Popup menu nie znika, rozwiązany, potrzebne wyjasnienia

0

Stworzyłem sobie menu funkcją CreatePopupMenu(), pokazuję je po kliknięciu PPM na ikonkę w trayu funkcją TrackPopupMenu() ale ono nie chce zniknąć gdy klikam poza nim. Na msdnie nie było zbyt pocieszających informacji..
#To display a context menu for a notification icon, the current window must be the foreground window before the application calls TrackPopupMenu or TrackPopupMenuEx. Otherwise, the menu will not disappear when the user clicks outside of the menu or the window that created the menu (if it is visible). If the current window is a child window, you must set the (top-level) parent window as the foreground window.
Rodzicem dla mojego okna jest HWND_MESSAGE, i nie bardzo chcę ustawiać innego rodzica (bo niby jakiego w tym wypadku?). Jeśli nie ma innej opcji mogę utworzyć normalne okno bez rodzica bo i tak chciałem dodać jakieś ustawienia, ale jednak to nie jest rozwiązaniem problemu..

Na forum znalazłem rozwiązanie ale chciałbym wiedzieć co teraz dzieje się w moim kodzie:P

#SetForegroundWindow(hWnd); Co ta funkcja oznacza dla message-only window, bo takie okno chyba z założenia nie może być oknem pierwszoplanowym?
#PostMessage(hWnd, WM_NULL, 0, 0); Jaki sens jest w wysyłaniu wiadomości która tak naprawdę nic konkretnego nie robi oprócz tego, że jest wysyłana?:P

1

SetForegroundWindow(hWnd); Co ta funkcja oznacza dla message-only window, bo takie okno chyba z założenia nie może być oknem pierwszoplanowym?

Dokumentacja nie mówi nic o tym, że „takie okno chyba z założenia nie może być oknem pierwszoplanowym”.
Mówi zaś np. o tym że “The system assigns a slightly higher priority to the thread that created the foreground window than it does to other threads.”.

Zresztą, czym się przejmujesz. Skoro każą robić SetForegroundWindow, i to rzeczywiście pomaga, to tak rób.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539(v=vs.85).aspx

Jaki sens jest w wysyłaniu wiadomości która tak naprawdę nic konkretnego nie robi oprócz tego, że jest wysyłana
Prawdopodobnie żaden. Próbowałeś to wyciąć?

0

Wyciąłem to i wszystko działa. W dwóch przykładach w necie było wysyłanie tego WM_NULL wiec uznałem, być może niesłusznie, że coś to tutaj robi:P Sprawdzałem na msdnie i były tam przykłady użycia ale nie dla menu, wiec napisałem tutaj:)
Ale nadal nie do końca rozumiem po co ta funkcja SetForegroundWindow():P Skoro mam menu i dostaje normalnie komunikat prawokliku, to dlaczego nie mogę po prostu wyświetlić go funkcja i tyle? Pewnie to kolejne dziwactwo WinAPI ale może zna ktoś powód tego?

1 użytkowników online, w tym zalogowanych: 0, gości: 1