引用:http://blog.csdn.net/jarvischu/article/details/8115390程序員
WinMain是一個函數,該函數的功能是被系統調用,做爲一個32位應用程序的入口點。WinMain函數應初始化應用程序,顯示主窗口,進入一個消息接收-發送循環,這個循環是應用程序執行的其他部分的頂級控制結構。編程
WinMain函數的nShowCmd參數指示了窗口的顯示方式。顯示方式能夠是下表中的任何一種。windows
表格 1 窗口顯示方式緩存
SW_HIDE網絡 |
隱藏窗口而且激活另一個窗口app |
SW_RESTOREssh |
激活並顯示窗口。若是窗口已經最小化或最大化,系統將以恢復到原來的尺寸和位置顯示窗口(與SW_SHOWNORMAL相同)函數 |
SW_SHOWoop |
激活一個窗口並以原來的尺寸和位置顯示窗口性能 |
SW_SHOWMAXIMIZED |
激活窗口而且將其最大化 |
SW_SHOWMINIMIZED |
激活窗口並將其最小化(以圖標顯示) |
SW_SHOWMINNOACTIVE |
將一個窗口顯示爲圖標。激活窗口維持活動狀態 |
SW_SHOWNA |
以窗口的當前狀態顯示窗口。激活窗口保持活動狀態 |
SW_SHOWNOACTIVATE: |
以窗口的最近一次的尺寸和位置顯示窗口。激活窗口維持激活狀態 |
SW_SHOWNORMAL |
激活並顯示窗口。若是窗口最大化或最小化,系統將其恢復到原來的尺寸和位置(與SW_RESTORE相同) |
SW_MINIMIZE |
最小化指定的窗口,而且激活在系統表中的頂層窗口 |
多種窗口類型可使用 | 號疊加
表格 2 窗口類型
標識 |
描述 |
CS_BYTEALIGNCLIENT |
在字節邊界上(在x方向上)定位窗口的用戶區域的位置 |
CS_BYTEALIGNWINDOW |
在字節邊界上(在x方向上)定位窗口的位置 |
CS_CLASSDC: |
該窗口類的全部窗口實例都共享一個窗口類DC |
CS_DBLCLKS |
容許向窗口發送雙擊鼠標鍵的消息 |
CS_GLOBALCLASS |
當調用CreateWindow 或 CreateWindowEx 函數來建立窗口時容許它的hInstance參數和註冊窗口類時傳遞給RegisterClass 的 hInstance參數不一樣。若是不指定該風格,則這兩個 hInstance 必須相同。 |
CS_HREDRAW |
當水平長度改變或移動窗口時,重畫整個窗口 |
CS_NOCLOSE |
禁止系統菜單的關閉選項 |
CS_OWNDC |
給予每一個窗口實例它自己的DC。注意,儘管這樣是很方便,但它必須慎重使用,由於每一個DC大約要佔800個字節的內存。 |
CS_PARENTDC |
將子窗口的裁剪區域設置到父窗口的DC中去,這樣子窗口即可以在父窗口上繪製自身。注意,這是子窗口仍是從系統緩存中獲取DC,而不是使用父窗口的DC。使用該風格能夠提升系統性能。 |
CS_SAVEBITS |
以位圖形式保存被該窗口遮擋的屏幕部分,這樣當給窗口移動之後,系統即可以用該保存的位圖恢復屏幕移動的相應部分,從而系統不用向被該窗口遮擋的窗口發送 WM_PAINT 消息。該特性對於菜單類型的窗口比較合適,由於它一般是簡短的顯示一下以後便消失。設置該特性將增長顯示該窗口的時間,由於它一般要先分配保存位圖的內存。 |
CS_VREDRAW |
當垂直長度改變或移動窗口時,重畫整個窗口 |
表格 3 系統圖標資源
IDI_APPLICATION |
Default application icon. |
IDI_ASTERISK |
Same as IDI_INFORMATION. |
IDI_ERROR |
Hand-shaped icon. |
IDI_EXCLAMATION |
Same as IDI_WARNING. |
IDI_HAND |
Same as IDI_ERROR. |
IDI_INFORMATION |
Asterisk icon. |
IDI_QUESTION |
Question mark icon. |
IDI_WARNING |
Exclamation point icon. |
IDI_WINLOGO |
Windows logo icon. Windows XP: Default application icon. |
IDI_SHIELD |
Security Shield icon. |
[1] 添加圖標資源
File-->New-->Files-->Icon File (Name it 「My_Icon.ico」 on the right)-->Draw the Icon
[2] 添加資源文件
File-->New-->Files-->Resource Script (Name it 「My_Resource」)
打開resource.h 文件,添加語句「#define ID_MYICON 1024」(1024 能夠隨意)
用記事本打開My_Resource.rc文件,添加語句「ID_MYICON ICON My_Icon.ico」
[3] 添加「resource.h」頭文件的引用
在主程序的.cpp文件中,引用頭文件「#include 「resource.h」」
[4] 使用自定義圖標
光標資源的加載相似於圖標資源
IDC_APPSTARTING |
Standard arrow and small hourglass |
IDC_ARROW |
Standard arrow |
IDC_CROSS |
Crosshair |
IDC_HAND |
Windows 98/Me, Windows 2000/XP: Hand |
IDC_HELP |
Arrow and question mark |
IDC_IBEAM |
I-beam |
IDC_ICON |
Obsolete for applications marked version 4.0 or later. |
IDC_NO |
Slashed circle |
IDC_SIZE |
Obsolete for applications marked version 4.0 or later. Use IDC_SIZEALL. |
IDC_SIZEALL |
Four-pointed arrow pointing north, south, east, and west |
IDC_SIZENESW |
Double-pointed arrow pointing northeast and southwest |
IDC_SIZENS |
Double-pointed arrow pointing north and south |
IDC_SIZENWSE |
Double-pointed arrow pointing northwest and southeast |
IDC_SIZEWE |
Double-pointed arrow pointing west and east |
IDC_UPARROW |
Vertical arrow |
IDC_WAIT |
Hourglass |
具體步驟與圖標相同(3.3.3)
[1] resource.h
[2] My_Resource.rc
[3] main.cpp
背景畫刷就是用來設置窗口的背景。
hbrBackground是畫刷的句柄,它必須是用於繪製背景的物理刷子的句柄,或者是一個顏色的值。
若是給出一個顏色的值,它必須是下面列出的標準系統顏色之一(系統將對所選顏色加1)。
表格 4 標準系統顏色
名稱 |
樣式 |
名稱 |
樣式 |
COLOR_ACTIVEBORDER COLOR_ACTIVECAPTION COLOR_CAPTIONTEXT COLOR_WINDOWTEXT |
COLOR_BTNTEXT COLOR_MENUTEXT |
||
COLOR_APPWORKSPACE |
COLOR_HIGHLIGHTTEXT |
||
COLOR_BACKGROUND COLOR_GRAYTEXT COLOR_HIGHLIGHT COLOR_INACTIVEBORDER |
COLOR_INACTIVECAPTION |
||
COLOR_BTNFACE COLOR_SCROLLBAR COLOR_WINDOWFRAME |
COLOR_MENU |
||
COLOR_BTNSHADOW COLOR_WINDOW |
|
|
BRUSH |
名稱 |
BLACK_BRUSH |
黑色畫刷 |
DKGRAY_BRUSH |
暗灰色畫刷 |
DC_BRUSH |
(Win7中錯誤) |
GRAY_BRUSH |
灰色畫刷 |
HOLLOW_BRUSH |
空心刷(至關於NULL_BRUSH) |
LTGRAY_BRUSH |
淺灰色畫刷 |
NULL_BRUSH |
空心刷(即背景透明) |
WHITE_BRUSH |
白色畫刷 |
該函數檢索預約義的備用筆、刷子、字體或者調色板的句柄。
fnObject能夠是: BLACK_BRUSH,WHITE_PEN,SYSTEM_FONT, DEFAULT_PALETTE
窗口只有在其對應的窗口類註冊以後,才能使用CreateWindow或CreateWindowEx建立。
Window_Style(能夠組合)
表格 5 Window_Style
Style |
說明 |
WS_BORDER |
建立一個單邊框的窗口。 |
WS_CAPTION |
建立一個有標題框的窗口(包括WS_BODER風格)。 |
WS_CHILD |
建立一個子窗口。這個風格不能與WS_POPUP風格合用。 |
WS_CHLDWINDOW |
與WS_CHILD相同。 |
WS_CLIPCHILDREN |
當在父窗口內繪圖時,排除子窗口區域。在建立父窗口時使用這個風格。 |
WS_CLIPSIBLINGS |
排除子窗口之間的相對區域,也就是,當一個特定的窗口接收到WM_PAINT消息時,WS_CLIPSIBLINGS 風格將全部層疊窗口排除在繪圖以外,只重繪指定的子窗口。若是未指定WS_CLIPSIBLINGS風格,而且子窗口是層疊的,則在重繪子窗口的客戶區時,就會重繪鄰近的子窗口。 |
WS_DISABLED |
建立一個初始狀態爲禁止的子窗口。一個禁止狀態的窗口不能接受來自用戶的輸入信息。 |
WS_DLGFRAME |
建立一個帶對話框邊框風格的窗口。這種風格的窗口不能帶標題條。 |
WS_GROUP |
指定一組控制的第一個控制。這個控制組由第一個控制和隨後定義的控制組成,自第二個控制開始每一個控制,具備WS_GROUP風格,每一個組的第一個控制帶有WS_TABSTOP風格,從而使用戶能夠在組間移動。用戶隨後可使用光標在組內的控制間改變鍵盤焦點。 |
WS_HSCROLL |
建立一個有水平滾動條的窗口。 |
WS_ICONIC |
建立一個初始狀態爲最小化狀態的窗口。與WS_MINIMIZE風格相同。 |
WS_MAXIMIZE |
建立一個初始狀態爲最大化狀態的窗口。 |
WS_MAXIMIZEBOX |
建立一個具備最大化按鈕的窗口。該風格不能與WS_EX_CONTEXTHELP風格同時出現,同時必須指定WS_SYSMENU風格。 |
WS_OVERLAPPED |
產生一個層疊的窗口。一個層疊的窗口有一個標題條和一個邊框。與WS_TILED風格相同。 |
WS_OVERLAPPEDWINDOW |
建立一個具備WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX風格的層疊窗口,與WS_TILEDWINDOW風格相同。 |
WS_POPUP |
建立一個彈出式窗口。該風格不能與WS_CHLD風格同時使用。 |
WS_POPUPWINDOW |
建立一個具備WS_BORDER,WS_POPUP,WS_SYSMENU風格的窗口,WS_CAPTION和WS_POPUPWINDOW必須同時設定才能使窗口某單可見。 |
WS_SIZEBOX |
建立一個可調邊框的窗口,與WS_THICKFRAME風格相同。 |
WS_SYSMENU |
建立一個在標題條上帶有窗口菜單的窗口,必須同時設定WS_CAPTION風格。 |
WS_TABSTOP |
建立一個控制,這個控制在用戶按下Tab鍵時能夠得到鍵盤焦點。按下Tab鍵後使鍵盤焦點轉移到下一具備WS_TABSTOP風格的控制。 |
WS_THICKFRAME |
建立一個具備可調邊框的窗口,與WS_SIZEBOX風格相同。 |
WS_TILED |
產生一個層疊的窗口。一個層疊的窗口有一個標題和一個邊框。與WS_OVERLAPPED風格相同。 |
WS_TILEDWINDOW |
建立一個具備WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU, WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX風格的層疊窗口。與WS_OVERLAPPEDWINDOW風格相同。 |
WS_VISIBLE |
建立一個初始狀態爲可見的窗口。 |
WS_VSCROLL |
建立一個有垂直滾動條的窗口。 |
顯示方式能夠是下表中的任何一種。
表格 6 窗口顯示方式
窗口顯示方式 |
說明 |
SW_HIDE |
隱藏窗口並激活其餘窗口。 |
SW_MAXIMIZE |
最大化指定的窗口。 |
SW_MINIMIZE |
最小化指定的窗口而且激活在Z序中的下一個頂層窗口。 |
SW_RESTORE |
激活並顯示窗口。若是窗口最小化或最大化,則系統將窗口恢復到原來的尺寸和位置。在恢復最小化窗口時,應用程序應該指定這個標誌。 |
SW_SHOW |
在窗口原來的位置以原來的尺寸激活和顯示窗口。 |
SW_SHOWDEFAULT |
依據在STARTUPINFO結構中指定的SW_FLAG標誌設定顯示狀態,STARTUPINFO 結構是由啓動應用程序的程序傳遞給CreateProcess函數的。 |
SW_SHOWMAXIMIZED |
激活窗口並將其最大化。 |
SW_SHOWMINIMIZED |
激活窗口並將其最小化。 |
SW_SHOWMINNOACTIVE |
窗口最小化,激活窗口仍然維持激活狀態。 |
SW_SHOWNA |
以窗口原來的狀態顯示窗口。激活窗口仍然維持激活狀態。 |
SW_SHOWNOACTIVATE |
以窗口最近一次的大小和狀態顯示窗口。激活窗口仍然維持激活狀態。 |
SW_SHOWNORMAL |
激活並顯示一個窗口。若是窗口被最小化或最大化,系統將其恢復到原來的尺寸和大小。應用程序在第一次顯示窗口的時候應該指定此標誌。 |
若是窗口更新的區域不爲空,UpdateWindow函數經過發送一個WM_PAINT消息來更新指定窗口的客戶區。函數繞過應用程序的消息隊列,直接發送WM_PAINT消息給指定窗口的窗口過程,若是更新區域爲空,則不發送消息。
MSG結構體包含一條WindowMessage的所有信息
窗口過程函數是一個應用程序定義的函數,用來處理髮送到窗口的消息。WNDPROC類型定義了一個指向該回調函數的指針。WindowProc是用於應用程序定義函數的佔位符,也就是說,程序員本身更改WindowProc這個名稱,可是參數類型不變。
一個Windows 程序能夠包含多個窗口過程。一個窗口過程老是與調用RegisterClass註冊的特定窗口類相關聯。程序一般不直接調用窗口過程。窗口過程一般由 Windows 自己調用。經過調用 SendMessage 函數,程序可以直接調用它本身的窗口過程。
該函數主要是用來處理髮送給窗口的各種MSG消息。
窗口過程在處理消息時,必須返回0。
窗口過程不予處理的全部消息應該被傳給名爲DefWindowProc() 函數。
從 DefWindowProc 返回的值必須由窗口過程返回。
本文部份內容來自MSDN和網絡。
轉載請註明地址: