Nie napisałeś nic jak robisz (nawet fragmentu kodu) a tylko objawy więc trudno powiedzieć co może być nie tak. Wydaje mi się (dawno sie nie bawiłem WinApi a nie che mi się sprawdzać) że powinno zadziałać SetActiveWindow
lub SetWindowPos
z parametrem HWND_TOP
na uchwyt okna z ListView
a później SetFocus
dla kontrolki ListView
.
Dziękuję za wskazówki.
Twoja sugestia nie pomogła, chyba , że robię coś niepoprawnie. Wrzuciłem ją do funkjci w której wypełniam kontrlkę ListView:
int iRezultat = SetWindowPos( hwndListView, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
_listView.SetFocus();
Kodu nie wrzucałem, bo jest rozbudowany ( wrapper) , poza tym zakładałem, że być może to jakiś rodzaj "wytrychu", o którym wielu wie, tylko nie ja.
Problem jest o tyle zastanawiający, że kiedu na szybko wrzuciłem prosty kod nawet dla układu:
Okno główne -> 2 okna podrzędne -> kontrolka ListView.
Focus się pojawia. Kod tworzenie i wypełniania kontrolki ListView (style, kolumny itd ) jest taki sam , jak w programie bardziej rozbudowanym . Róznica polega tylko na tym , że pominąłem opakowanie kodu w klasy.
Kod opakowany w klasy ( wrapper):
-
Klasa bazowa CWindowBase
- zawiera uchwyt do tworzonego okna
- tworzy wszystkie okna
- zawiera metody konfigurujące tworzone okna
-
klasa CWindowDerivid wyprowadzona z CWindowBase:
- tu przechowuję jako statyczną Procedurę tworzonych okien (głównego i potomnych) , która deleguje do odpowiednich obiektów komunikaty msg.
Procedura zawiera tzw. "mechanizm przekazywania wskaźników do funkcji statycznej "
- virtualne delegaty obsługi komunikatów ( OnMessage, OnCreate ... )
- Klasa Panel
- wywołuje utworzenie kontrolek ListView
- dodaję kolumny, tekst ...
- ustawiam , który item kontrolki będzia miał fokus i czy będzie zaznaczony:
UINT state_ = LVNI_SELECTED | LVNI_FOCUSED;
- ustawiam Focus:
int iRezultat = SetWindowPos( hwndListView, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
_listView.SetFocus();
- zawiera subclassing kontrolki ListView
- Klasa ListView
- zawiera obsługę kontrolki ListView
- I. cz. subclassingi
Na koniec po utworzeniu wszystkich okien sprawdzam ( w pliku log) poprawność uchwytów okien, kontrolek , kto ma Focus , jakie okna jest aktywne ... jaki element kontrolki ma focus i zaznaczenie
Podobną procedurę testową wykonywałem dla testów prymitywnego programu, w którym focus i zaznaczenie pojawiają się bez problemu.
Okna i kontrolki tworzą się poprawnie, poprawnie się pozycjonują , tak jak tego sobie życzę.
Tylko Focus jest niewidoczny, mimo, że w logach ( również to sprawdzałem dobugerem) mam dowód , że kontrolka ListView ma focus, a oknem aktywnym jest okno główne. W ramach testu zmieniałem ustawienia dla kontrolek , pozycję elementu, który ma mieć focus itd i wszystko w pliku log jest poprawne.