Senaryo, üst düzey pencerelere pencere tutamaçlarımın bir listesini oluşturmam ve bunları değiştirmek için seçtiğim z düzeninde düzenlenmelerini istiyorum. Listeyi yinelemeye başladım (sonuncuya kadar sonlandırmak istediğim pencereyle), her birine SetForegroundWindow
'u arıyorum. Bu, zamanın bir kısmı gibi görünüyordu, ama her aramayla, aramda biraz ara verdiğimde biraz iyileşiyordu.Win32 API Kullanarak Birçok Windows'un Z Sırasını Güncelleme
Bunu yapmanın daha iyi bir yolu var mı?
Düzenleme:
BuBeginDeferWindowPos
/
DeferWindowPos
/
EndDeferWindowPos
rota benziyor
gitmek yoludur. Ancak, bir seferde birden fazla pencere ile çalışmak için görünmüyor olabilir. Pencere listesini tek bir pencerede sınırladığımda, düzgün çalışıyor. Liste birden fazla pencereye sahip olduğunda, yalnızca bunlardan birini alır gibi görünüyor. İşte ne yapıyorum sözde kod şudur:
HWND[] windows;
HWND lastWindowHandle = 0;
HDWP positionStructure = BeginDeferWindowPos(windows.length);
for (int i = 0; i < windows.length; i++)
{
positionStructure = DeferWindowPos(positionStructure, windows[i],
lastWindowHandle, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
EndDeferWindowPos(positionStructure);
ben bir şey küçük eminim/bariz Burada eksik ama sadece bunu göremiyorum.
+1: Özellikle çok sayıda pencereyle uğraşıyorsanız, bu kesinlikle daha iyi bir yoldur. –
Bahşiş için teşekkürler, bu almak için doğru yaklaşım gibi görünüyor. İçinde bulunduğum sorun için sorduğum soruya bakın. –
@Greg Pranga: Muhtemelen SWP_NOACTIVATE, ve belki de SWP_ASYNCWINDOWPOS – Anders