Předání událostí myši všech prvků na formuláři   zodpovězená otázka

VB.NET, WinForms

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?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak už jsem to vyřešil přidáním handlerů pro mousedown, move a up jednotlivým prvkům, které spouští při těchto událostech stejné metody jako tyto události přímo na formuláři.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback