本文是在學習Windows Feature時的筆記:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632599(v=vs.85).aspx
Windows Features >桌面視窗 GetDesktopWindow:擷取桌面視窗句柄 SystemParameter(wAction=SPI_SETDESKWALLPAPER):設定桌面桌面 >窗體結構
>客戶區和非客戶區 客戶區:應用程式中可以直接輸出的區域 非客戶區:應用程式中的特殊區域(保護标題欄、菜單欄、系統按鈕等)
>視窗建立消息:在這些消息中處理程式初始化的任務 WM_NCCREATE:建立非客戶區消息 WM_CREATE:建立客戶區消息 WM_PARENTNOTIFY:建立子視窗後系統發送給父視窗
> 視窗類型 1.OverlappedWindows: 是一種頂層視窗 有标題欄、邊框、客戶區(WS_OVERLAPPED),可選:視窗菜單、最小化和最大化按鈕、滾動條(WS_OVERLAPPEDWINDOW) 通常作為程式的主視窗 2.Pop-UpWindows:彈出視窗 是一種特殊的Overlapped視窗 經常用來彈出對話框、消息視窗和臨時視窗 使用WS_POPUP樣式建立視窗 3.Child Windows:子視窗 WS_CHILD樣式 局限于父視窗的顯示區,必須為其指定一個父視窗 通常用來切分父視窗 子視窗顯示預設是在父視窗的左上角,如果比父視窗大,則進行裁剪 父視窗的消息影響其子視窗: Destroyed:子視窗先銷毀 Hidden:子視窗先隐藏 Moved:随着父視窗移動,移動後得自繪 Show:父視窗先顯示 裁剪:WS_CLIPCHILDREN樣式使父視窗不能在子視窗之上繪制 和父視窗關系: SetParent:指定一個父視窗,參數為NULL時,顯示在桌面上,可以自由拖動 GetParent:獲得父視窗的句柄 IsChild:判斷一個視窗是不是另一個視窗的子視窗 EnumChildWindow:枚舉子視窗 子視窗和父視窗的類型可以不一樣 消息: 子視窗的消息直接發送給子視窗,如被禁止,則發送到父視窗 EnableWindow:禁止或啟用一個子視窗 層疊視窗:WS_EX_LAYERED 消息視窗: 不可見、沒有z自序,不能被枚舉,不能收到廣播消息 使用HWND_MESSAGE句柄 使用FindWindowEx并傳入HWND_MEAAGE查找視窗 視窗關系 >前台視窗與背景視窗 和使用者互動的視窗叫做前台視窗,建立的線程叫做前台線程 其他線程建立的視窗叫做背景視窗,其他線程叫做背景線程 前台視窗線程的優先級(9)高于其他線程的(7) 設定前台視窗:點選、Alt+Tab、Alt+Esc 擷取前台視窗句柄:GetForegroundWindow() 設定前台視窗:SetForegroundWindow(),設定的程序需要滿足特定的條件 >Owned視窗 視窗在其擁有者視窗之上(Z order) 擁有者視窗銷毀時被擁有者視窗也自動銷毀 擁有者視窗最小化時被擁有者視窗隐藏 隻有Overlapped和popup視窗可以稱為擁有者視窗,子視窗不能稱為擁有者視窗 通過GetWindow及參數GW_OWNER擷取視窗的擁有者視窗
>Z-Order 頂層視窗在所有其它非頂層視窗之上 BringWindowToTop、SetWindowPos、DeferWindowPos設定視窗在Z序的位置
視窗狀态 >Aactive Windows:目前使用者正在使用的視窗 SetActiveWindows:切換激活視窗(本程序内?) SetWindowsPos、DeferWindowPos、SetWindowPlacement GetActiveWindow WM_ACTIVATEAPP:發送激活視窗切換時系統發送給兩個視窗 >Disable Windows: Disable視窗不能收到滑鼠和鍵盤消息 EnableWindow:禁止或啟用一個視窗 IsWindowEnabled:判斷一個視窗是否可用 子視窗被disable的時候,父視窗可以接收子視窗的滑鼠消息 >可見性 如果一個視窗被隐藏等同于失效 IsWindowVisible:判斷一個視窗是否可見
>CloseWindow:最小化視窗 SetWindowPlacement與ShowWindows功能類似,還可以改變最小化、最大化和恢複時預設的位置 WM_QUERYOPEN:最大化或恢複視窗時,系統給視窗發送這個指令 WM_GETMINMAXINOF:後去視窗的預設大小資訊
Windows大小和位置
>WM_GETMINMAXINFO:擷取視窗大小拖動時最大尺寸和最小尺寸 WS_THICKFREAME:容許一個視窗大小被拖動
>WM_SYSCOMMAND:使用者點選視窗菜單時由系統發送 SC_CLOSE:關閉視窗,發送WM_CLOSE消息到視窗 SC_MAXIMIZE:最大化視窗 SC_MINIMIZE:最小化視窗 SC_MOVE:移動視窗 SC_RESTORE:恢複最大化或最小化之前的大小 SC_SIZE:改變視窗大小 >改變大小或位置: SetWindowPlacement:設定視窗最大化、最小化,恢複的大小和位置,以及顯示狀态 MoveWindow和SetWindowPos:設定視窗位置 XXXDeferWindowPos:同時設定視窗的大小、位置,Z序和顯示狀态 GetWindowRect:擷取視窗矩形資訊,都是相對于桌面的位置 ScreenToClient和MapWindowPoints:進行坐标轉化 GetClientRect:擷取客戶區的矩形,相對與自身的 TileWindows和 CascadeWindows: 将左右最大化視窗還原 WM_WINDOWPOSCHANGING:視窗大小和位置改變之後會收到此消息 WM_NCCALSIZE:視窗建立時和大小改變時會收到此消息
>AnimateWindow:特殊顯示或隐藏視窗
視窗銷毀 >DestroyWindow:銷毀視窗 給自己和所有子視窗發送WM_DESTROY消息 >WM_CLOSE:在銷毀視窗前,提供給使用者一個确認的機會 >WM_DESTROY:給應用程式一次清理資源的機會 >PostQuitMessage:應用程式清理完資源時調用,退出主消息循環
>UpdateWindow:發送WM_PAINT消息