top bir pencere getir ben içinde iki 2 pencere bulunmaktadır Windows programı: Ben hwnd üzerine çift tıkladığımdaWin32:
hwnd (main interface)
hwnd2 (toplevel window, no parent, created by hwnd)
, ben hwnd2 açılır ve bazı verileri göstermek gerekir, bu yüzden üst için hwnd2 getirmek için bu işlevi kullanın:
BringWindowToTop(hwnd2);
hwnd2 üste getirilir, ancak tek bir şey var. Yine hwnd2'ye tıkladığımda, hwnd (ana arayüz) otomatik olarak tekrar açılır. Bu sorunu çözmek için aşağıdaki işlevi kullanmayı denedim, ancak bunlar çalışmıyor.
SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
//doesn't work
BringWindowToTop(hwnd2); //This is the function brings hwnd2 to top
SetForegroundWindow(hwnd2); //doesn't work
SetWindowPos(hwnd2, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
//doesn't work
SetWindowPos(hwnd2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
// hwnd2 "always" on top, not what I want
SetActiveWindow(hwnd2); // doesn't work too (for replying to Magnus Skog, thanks)
SwitchToThisWindow(hwnd2, TRUE);// got the same problem with BringWindowToTop function
SwitchToThisWindow(hwnd2, FALSE);
Bu sorunu nasıl çözebilirim? Şimdiden teşekkürler.
(hwnd2 oluşmaktadır bir medya oynatıcı (o geri diğer pencerelerin/önünde olabilir, böylece üst düzey olarak pencere gerektiğinden AJ yanıtlamak, hwnd2 üst öğesi yok) birçok pencere, pencere birinin video dispaly, ilerleme çubuğu ve hacim çubuğu, kontrol paneli için bir araç çubuğu kontrolü için diğer iki trackbar kontrolleri içindir.)
(bu ben tıklayın hangi pencere olursa olsun, yardımcı olabilecek biri var hwnd2, hwnd, "fare, Z-düzeninde hwnd'nin üstündedir," menü çubuğu ve istemci olmayan alan dahil olmak üzere, otomatik olarak açılır.)
(Bu medya oynatıcı Direct Show'da yazılmıştır. Video penceresini video penceresi olarak koymak için IVideoWindow :: put_Owner kullanıyorum, Direct Show dahili olarak video penceresinin alt öğesi olarak bir alt video penceresi oluşturur. Kaynak kodunu göremediğim bu alt-video penceresi dışında, hwnd2'de şüpheli bir şey göremiyorum.)
Bunun sebebini, Direkt Şov nedeniyle buldum. Bunu yapmak için multithread kullanıyorum ve sonra problem çözüldü. Ama neden??
Bu sorun PostMessage (SendMessage yerine) kullanılarak çözülebilir.
hwnd2'nin neden ebeveynleri yok? hwnd oluşturma sırasında ebeveyn olarak ayarlanabilir. –
hwnd2'nin fare tuşu işlem kodunda ne yaparsınız? Orada balık var mı? –
PostMessage kullanarak nasıl çözdünüz? –