是什麼表示一個窗口的下列方法之間的差別:的ShowWindow VS SWP_SHOWWINDOW VS WS_VISIBLE
- 的
ShowWindow
功能。 - The
SetWindowPos
功能與SWP_SHOWWINDOW
標誌。 - 與
WS_VISIBLE
的SetWindowLong
功能加入到GWL_STYLE
。
還有其他方法嗎?
是什麼表示一個窗口的下列方法之間的差別:的ShowWindow VS SWP_SHOWWINDOW VS WS_VISIBLE
ShowWindow
功能。SetWindowPos
功能與SWP_SHOWWINDOW
標誌。WS_VISIBLE
的SetWindowLong
功能加入到GWL_STYLE
。還有其他方法嗎?
我認爲他們大多是相同的,但對於每一個附加的功能:
SetWindowLong
與WS_VISIBLE
加入GWL_STYLE
是proably最無趣:爲什麼惹樣式位,如果有一個功能,正是你所需要的。SetWindowPos
與SWP_SHOWWINDOW
允許您通過單個原子操作同時顯示窗口並設置其位置和大小,以便沒有人 - 程序或用戶 - 可以看到可見不移動或移動不可見的窗口。ShowWindow
函數有很多魔法,尤其是第一次在程序中調用。另外,它具有SW_SHOWDEFAULT
標誌,它很少使用,但不適用於任何其他方法AFAIK。還有其他方法可以使窗口可見。從頭到尾:
WS_VISIBLE
標誌設置創建它。DeferWindowPos
與SetWindowPos
具有相同的標誌。SetWindowLong
函數設置初始窗口樣式,即如果窗口在創建後立即顯示或不顯示。 MSDN表示在窗口創建之後,您必須使用其他兩個函數來設置可見屬性。一個典型的應用是:
case WM_CREATE:
{
long style = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong(hWnd, GWL_STYLE, style | WS_DLGFRAME);
return 0;
}
ShowWindow
和SetWindowPos
有關於可視窗口的重疊功能。如果您必須在設置其可見性的同時將窗口沿x,y或z方向移動,請使用SetWindowPos
。我個人發現需要指定必要的uFlags參數使得此功能使用起來有點麻煩,但MSDN是您的朋友;-)
如果另一方面您不需要窗口移動,但即將最大化,最小化,還原等,使用ShowWindow
。由於它只將窗口句柄和nCmdShow常量作爲參數,因此它是一個易於使用的函數。
你想達到什麼目的? – 2013-04-28 11:46:07
我需要編寫一個監視其他程序活動的程序,並且我需要知道何時顯示一個窗口。我想通過API掛鉤實現它,但現在我正在考慮使用消息掛鉤並監視WM_WINDOWPOSCHANGED消息。 您是否知道窗口在顯示時是否總是收到WM_WINDOWPOSCHANGED消息? – Ben 2013-04-28 15:20:33
你爲什麼不問這個問題?這就是你想知道的。直接詢問。是的,窗戶在可見性發生變化時會收到通知。 – 2013-04-28 15:28:23