In mijn GUI-classes die ik in een aantal programma's gebruik heb ik nu ook een eigen popup menu-implementatie geschreven (deze vervangt overal TrackPopupMenu voor context-menus en regelt ook popups voor color selectors enzo). Deze bestaat uit een popup-window (ge'owned door het hoofdscherm, maar geen child daarvan) die de opties laat zien en een eigen modal loop die zorgt dat dat ding de rest blokkeert totdat een van de opties gekozen is. Redelijk standaard allemaal.
Nou is er een probleem wat betreft activatie: ik wil graag toetsaanslagen (WM_KEYDOWN enzo) ontvangen, en ik wil graag weten wanneer de gebruiker weer in het hoofdscherm van de applicatie klikt (zodat het menu verborgen kan worden). Dit werkt standaard door gewoon de popup te laten zien met ShowWindow (met SW_SHOW) zodat deze wordt geactivate en de focus krijgt. Het probleem is dat het hoofdscherm dan gedeactiveerd wordt en dat de titelbalk dat ook laat zien! Dat is in Windows niet de bedoeling (open maar eens een menu en je zult zien dat de titelbalk gewoon hetzelfde blijft).
Ik heb nu dus gezorgd dat dat venster niet geactiveerd wordt (middels WS_EX_NOACTIVATE en het vervangen van SW_SHOW met SW_SHOWNA en het afhandelen van WM_MOUSEACTIVATE in de popup), maar nu kan ik nooit weten of de gebruiker ergens anders klikt en krijg ik ook geen toetsaanslagen binnen (immers ik heb geen focus). Het is niet mogelijk om focus te hebben zonder geactiveerd te zijn. Is er iemand hier die weet hoe ik toch zo'n menu op een goede manier kan implementeren? Ik heb gegoogled en gegoogled, maar ik kan nergens een implementatie van een eigen popup-menu vinden...
Nou is er een probleem wat betreft activatie: ik wil graag toetsaanslagen (WM_KEYDOWN enzo) ontvangen, en ik wil graag weten wanneer de gebruiker weer in het hoofdscherm van de applicatie klikt (zodat het menu verborgen kan worden). Dit werkt standaard door gewoon de popup te laten zien met ShowWindow (met SW_SHOW) zodat deze wordt geactivate en de focus krijgt. Het probleem is dat het hoofdscherm dan gedeactiveerd wordt en dat de titelbalk dat ook laat zien! Dat is in Windows niet de bedoeling (open maar eens een menu en je zult zien dat de titelbalk gewoon hetzelfde blijft).
Ik heb nu dus gezorgd dat dat venster niet geactiveerd wordt (middels WS_EX_NOACTIVATE en het vervangen van SW_SHOW met SW_SHOWNA en het afhandelen van WM_MOUSEACTIVATE in de popup), maar nu kan ik nooit weten of de gebruiker ergens anders klikt en krijg ik ook geen toetsaanslagen binnen (immers ik heb geen focus). Het is niet mogelijk om focus te hebben zonder geactiveerd te zijn. Is er iemand hier die weet hoe ik toch zo'n menu op een goede manier kan implementeren? Ik heb gegoogled en gegoogled, maar ik kan nergens een implementatie van een eigen popup-menu vinden...
[ Voor 3% gewijzigd door MisterData op 21-03-2008 14:28 ]