2013-04-28 29 views
3

是什麼表示一個窗口的下列方法之間的差別:的ShowWindow VS SWP_SHOWWINDOW VS WS_VISIBLE

  • ShowWindow功能。
  • The SetWindowPos功能與SWP_SHOWWINDOW標誌。
  • WS_VISIBLESetWindowLong功能加入到GWL_STYLE

還有其他方法嗎?

+0

你想達到什麼目的? – 2013-04-28 11:46:07

+0

我需要編寫一個監視其他程序活動的程序,並且我需要知道何時顯示一個窗口。我想通過API掛鉤實現它,但現在我正在考慮使用消息掛鉤並監視WM_WINDOWPOSCHANGED消息。 您是否知道窗口在顯示時是否總是收到WM_WINDOWPOSCHANGED消息? – Ben 2013-04-28 15:20:33

+0

你爲什麼不問這個問題?這就是你想知道的。直接詢問。是的,窗戶在可見性發生變化時會收到通知。 – 2013-04-28 15:28:23

回答

4

我認爲他們大多是相同的,但對於每一個附加的功能:

  1. SetWindowLongWS_VISIBLE加入GWL_STYLE是proably最無趣:爲什麼惹樣式位,如果有一個功能,正是你所需要的。
  2. SetWindowPosSWP_SHOWWINDOW允許您通過單個原子操作同時顯示窗口並設置其位置和大小,以便沒有人 - 程序或用戶 - 可以看到可見不移動或移動不可見的窗口。
  3. ShowWindow函數有很多魔法,尤其是第一次在程序中調用。另外,它具有SW_SHOWDEFAULT標誌,它很少使用,但不適用於任何其他方法AFAIK。

還有其他方法可以使窗口可見。從頭到尾:

  1. 使用WS_VISIBLE標誌設置創建它。
  2. DeferWindowPosSetWindowPos具有相同的標誌。
1

SetWindowLong函數設置初始窗口樣式,即如果窗口在創建後立即顯示或不顯示。 MSDN表示在窗口創建之後,您必須使用其他兩個函數來設置可見屬性。一個典型的應用是:

case WM_CREATE: 
{ 
    long style = GetWindowLong(hWnd, GWL_STYLE); 
    SetWindowLong(hWnd, GWL_STYLE, style | WS_DLGFRAME); 

    return 0; 
} 

ShowWindowSetWindowPos有關於可視窗口的重疊功能。如果您必須在設置其可見性的同時將窗口沿x,y或z方向移動,請使用SetWindowPos。我個人發現需要指定必要的uFlags參數使得此功能使用起來有點麻煩,但MSDN是您的朋友;-)

如果另一方面您不需要窗口移動,但即將最大化,最小化,還原等,使用ShowWindow。由於它只將窗口句柄和nCmdShow常量作爲參數,因此它是一個易於使用的函數。

相關問題