Pokud chcete skutečně low-level řešení, což je podle mě naprosto zbytečné, pak se můžete inspirovat tímto:
Imports System.Runtime.InteropServices
Public Class UserControl1
Private Const WM_SIZE As Integer = &H5
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_SIZE Then
'Dodělat m.LParam = ...
End If
MyBase.WndProc(m)
End Sub
End Class
Když přijde do ovládacího prvku zpráva pro změnu velikosti (WM_SIZE), potom horní část hodnoty LParam (high-order word) znamená nově požadovanou výšku ovládacího prvku. Tuto horní část hodnoty byste musel pokaždé nastavovat na požadovanou konstantní velikost. Ale pozor, hodnota LParam má také dolní část (low-order word), která udává nově požadovanou šířku ovládacího prvku. Takže byste složil pomocí dolní a horní části hodnotu typu Integer a tu potom pomocí maršálizace přeložil v Unmanaged paměti na Pointer (IntPtr) a ten nastavil do LParam a předal ke zpracování pomocí MyBase.WndProc(m). Ještě se vám do toho chce?
|