Dobrý den, tvořím ve VB.Net (VS 2012) formulářovou aplikaci, která obsahuje 2 panely. Spodní panel funguje jako rodič externí aplikace, která v něm běží a horní panel funguje jako titlebar okna kam programově přidávám až za běhu aplikace labely, textboxy a pictureboxy zobrazující různé hodnoty a obrázky. Uživatel má mít možnost celé okno přesouvat, což jsem vyřešil úpravou zprávy WndProc následovně :
Protected Overrides Sub WndProc(ByRef m As Message)
Const WM_NCHITTEST As Integer = &H84
If m.Msg = WM_NCHITTEST Then
m.Result = &H2
Else
MyBase.WndProc(m)
End If
End Sub
Dále bych ale potřeboval, aby se celé okno přesouvalo i při tažení horního panelu či jakéhokoli prvku na něm. Určitě i to se dá řešit úpravou WndProc zpráv. Bohužel jsem nedokázal přijít na to jak. Přestože je myš nad tím panelem nebo některým z prvků na něm, obsahuje zpráva HWND celého okna nikoli objektu nad kterým je a žádný z parametrů zprávy neobsahuje informaci o tom, nad kterým oběktem myš je, abych ji mohl upravit. Našel jsem nějaká řešení, kdy se nastaví result zprávy na -1 (transparent), což má způsobit předání na níže zobrazený objekt, ale to mi nefunguje. Napadá vás někoho, jak to vyřešit?
|