Windows編程入門程序詳解

引用:http://blog.csdn.net/jarvischu/article/details/8115390程序員

1.     程序

 

[cpp]  view plain copy
  1. /************************************************************************ 
  2.  * 名  稱:Windows_Frist_Code.cpp 
  3.  * 功  能:Windows編程入門 
  4.  * 描  述:包含WinMain函數、WNDCLASS、消息循環等多種內容 
  5.            windows窗口程序的流程以下:【WinMain入口】-->建立和設計窗口類 
  6.         -->註冊窗口類-->建立、顯示和更新窗口-->消息循環-->【窗口過程函數】 
  7.  * 做  者:JarvisChu 
  8.  * 時  間:2012-10-24 
  9.  * 修  訂:1. 2012-10-26,Jarvis. 完善代碼和註釋。 
  10.  ************************************************************************/  
  11. #include <windows.h>  
  12. #include <stdio.h>  
  13. #include "resource.h"  
  14.   
  15. //回調函數  
  16. LRESULT CALLBACK WinProc(  
  17.                             HWND hwnd,   
  18.                             UINT uMsg,   
  19.                             WPARAM wParam,   
  20.                             LPARAM lParam   
  21. );  
  22.   
  23. //入口函數 WinMain  
  24. int WINAPI WinMain(HINSTANCE hInstance,    //當前應用程序的句柄  
  25.                    HINSTANCE hPrevInstance,//先前應用程序的句柄,老是NULL  
  26.                    LPSTR lpCmdLine,        //不包含程序名的命令行,可經過GetCommandLine獲取  
  27.                    int nShowCmd            //窗口顯示方式  
  28.                 )  
  29. {  
  30. //-------------------建立和設計窗口類----------------------------------------------------  
  31.     WNDCLASS wndclass;      
  32.     wndclass.cbClsExtra =0;  
  33.     wndclass.cbWndExtra =0;  
  34.     wndclass.hbrBackground =(HBRUSH)GetStockObject(GRAY_BRUSH);  
  35.     wndclass.hCursor =LoadCursor(hInstance,MAKEINTRESOURCE(ID_MYCURSOR));   //LoadCursor(NULL,IDC_HELP);//  
  36.     wndclass.hIcon =LoadIcon(hInstance,MAKEINTRESOURCE(ID_MYICON));         //LoadIcon(NULL,IDI_APPLICATION);//  
  37.     wndclass.hInstance =hInstance;  
  38.     wndclass.lpfnWndProc =WinProc;  
  39.     wndclass.lpszClassName ="Jarvis";  
  40.     wndclass.lpszMenuName =NULL;  
  41.     wndclass.style =CS_HREDRAW | CS_VREDRAW;  
  42.   
  43. //-------------------註冊窗口類----------------------------------------------------  
  44.     RegisterClass(&wndclass);  
  45.       
  46. //-------------------建立顯示更新窗口----------------------------------------------------  
  47.     HWND hwnd;  
  48.     hwnd=CreateWindow("Jarvis","Jarvis",WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_MAXIMIZE,  
  49.         CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);  
  50.       
  51.     ShowWindow(hwnd,SW_SHOWNORMAL);  
  52.     UpdateWindow(hwnd);  
  53.   
  54. //-------------------消息循環----------------------------------------------------  
  55.     MSG msg;  
  56.     while(GetMessage(&msg,NULL,0,0))  
  57.     {  
  58.         TranslateMessage(&msg);  
  59.         DispatchMessage(&msg);  
  60.     }  
  61.     return 0;  
  62. }  
  63.   
  64.   
  65. //窗口過程函數實現  
  66. LRESULT CALLBACK WinProc(  
  67.                             HWND hwnd,   
  68.                             UINT uMsg,   
  69.                             WPARAM wParam,   
  70.                             LPARAM lParam   
  71.                             )  
  72. {  
  73.     switch(uMsg)  
  74.     {  
  75.   
  76.     case WM_LBUTTONDOWN:  
  77.         MessageBox(hwnd,"LeftButton Clicked!","Prompt",0);  
  78.         break;  
  79.     case WM_CLOSE:  
  80.         if(IDYES==MessageBox(hwnd,"Are you sure to quit?","Prompt",MB_YESNO))  
  81.         {  
  82.             DestroyWindow(hwnd);  
  83.         }  
  84.         break;  
  85.     case WM_DESTROY:  
  86.         PostQuitMessage(0);  
  87.         break;  
  88.     default:  
  89.         return DefWindowProc(hwnd,uMsg,wParam,lParam);  
  90.           
  91.     }  
  92.     return 0;  
  93. }  

 

 

2.  WinMain函數解析

2.1.   WinMain函數原型

[cpp]  view plain copy
  1. int WINAPI WinMain ( HINSTANCE hInstance,    //當前應用程序的句柄  
  2.                      HINSTANCE hPrevInstance,//先先前應用程序的句柄,老是NULL  
  3.                      LPSTR lpCmdLine,        //不含程序名的命令行,經過GetCommandLine獲取  
  4.              int nShowCmd            //窗口顯示方式  
  5.            );  

2.2.   WinMain函數功能

WinMain是一個函數,該函數的功能是被系統調用,做爲一個32位應用程序的入口點WinMain函數應初始化應用程序,顯示主窗口,進入一個消息接收-發送循環,這個循環是應用程序執行的其他部分的頂級控制結構。編程

2.3.   窗口顯示方式

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

最小化指定的窗口,而且激活在系統表中的頂層窗口

 

3.     建立和設計窗口類

3.1.   WNDCLASS結構體定義

 

[cpp]  view plain copy
  1. typedef struct {  
  2.             UINT style;              //窗口類型CS_HREDRAW|CS_VREDRAW  
  3.             WNDPROC lpfnWndProc;     //窗口回調函數  
  4.             int cbClsExtra;          //指定緊隨在 WNDCLASS 後分配的字節數,初始化爲零  
  5.             int cbWndExtra;          //指定緊隨在窗口實例以後分配的字節數,初始化爲零。  
  6.             HINSTANCE hInstance;     //指示該窗口類的回調函數所在實例的句柄,不爲NULL  
  7.             HICON hIcon;             //窗口圖標句柄,若爲NULL,系統提供默認  
  8.             HCURSOR hCursor;         //光標資源句柄  
  9.             HBRUSH hbrBackground;    //背景畫刷句柄  
  10.             LPCTSTR lpszMenuName;    //菜單資源名  
  11.             LPCTSTR lpszClassName;   //窗口對應的窗口類名  
  12.            } WNDCLASS, *PWNDCLASS; //  

 

3.2.   窗口類型

多種窗口類型可使用 | 號疊加

 

 

表格 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.3.   窗口圖標

3.3.1. LoadIcon函數

[cpp]  view plain copy
  1. HICON  LoadIcon(  HINSTANCE Instance,   //應用程序的實例句柄  
  2.                     LPCTSTR lpIconName   //圖標資源的字符串型ID  
  3. ) ;  

3.3.2. 加載系統預約義圖標

 

[cpp]  view plain copy
  1. LoadIcon(NULL, IDI_APPLICATION);  

 

 

表格 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.

 

 

3.3.3. 加載自定義圖標

[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] 使用自定義圖標

 

[cpp]  view plain copy
  1. LoadIcon(hInstance,MAKEINTRESOURCE(ID_MYICON));  

 

3.4.   光標資源

光標資源的加載相似於圖標資源

3.4.1. LoadCursor函數

 

[cpp]  view plain copy
  1. HCURSOR  LoadCursor (  HINSTANCE Instance,   //應用程序的實例句柄  
  2.                     LPCTSTR lpCursorName      //光標資源的字符串型ID  
  3. ) ;    

 

3.4.2. 加載系統預約義光標

 

[cpp]  view plain copy
  1. LoadCursor(NULL,IDC_CROSS);  

 

 

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.4.3. 加載自定義光標

 具體步驟與圖標相同(3.3.3

[1]  resource.h

 

[2] My_Resource.rc

 

[3] main.cpp

 

3.5.   背景畫刷

背景畫刷就是用來設置窗口的背景。

hbrBackground是畫刷的句柄,它必須是用於繪製背景的物理刷子的句柄,或者是一個顏色的值。

若是給出一個顏色的值,它必須是下面列出的標準系統顏色之一(系統將對所選顏色加1)。

 

3.5.1. 使用標準系統顏色

 

[cpp]  view plain copy
  1. hbrBackground=(HBRUSH)(COLOR_ACTIVEBORDER+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

 

 

 

3.5.2. 使用系統預約義的畫刷

 

[cpp]  view plain copy
  1. hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);  

 

 

BRUSH

名稱

BLACK_BRUSH                                      

黑色畫刷

DKGRAY_BRUSH

暗灰色畫刷

DC_BRUSH

(Win7中錯誤)

GRAY_BRUSH 

灰色畫刷

HOLLOW_BRUSH 

空心刷(至關於NULL_BRUSH)

LTGRAY_BRUSH         

淺灰色畫刷

NULL_BRUSH           

空心刷(即背景透明)

WHITE_BRUSH             

白色畫刷

3.5.3. GetStockObject()函數

 

[cpp]  view plain copy
  1. HGDIOBJ GetStockObject(int fnObject);  

 

 

該函數檢索預約義的備用筆、刷子、字體或者調色板的句柄。

fnObject能夠是: BLACK_BRUSH,WHITE_PEN,SYSTEM_FONT, DEFAULT_PALETTE

4.     註冊窗口類

 

[cpp]  view plain copy
  1. ATOM RegisterClass(CONST WNDCLASS *lpWndClass);  

 

 

窗口只有在其對應的窗口類註冊以後,才能使用CreateWindow或CreateWindowEx建立。

5.     建立窗口

 

[cpp]  view plain copy
  1. HWND hwnd;  
  2. hwnd = CreateWindow("Jarvis","Jarvis",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,  
  3. CW_USEDEFAULT,NULL,NULL,hInstance,NULL);  

 

 

 

[cpp]  view plain copy
  1. HWND CreateWindow(             
  2.      LPCTSTR            lpClassName,   // 對應的窗口類的名稱  
  3.             LPCTSTR             lpWindowName, //窗口名稱  
  4.             DWORD              dwStyle,       / /窗口類型/  
  5.          int                   x,            //初始水平位置  
  6.             int                   y,             //初始垂直位置   
  7.         int                   nWidth,        //窗口寬度  
  8.          int                   nHeight,       //窗口高度  
  9.          HWND               hWndParent,   //父窗口句柄  
  10.             HMENU              hMenu,        //菜單資源句柄  
  11.             HINSTANCE          hInstance,      //實例句柄  
  12.          LPVOID              lpParam       //傳給WM_CREATE的值  
  13. );   

 

 

 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.     顯示窗口

 

 

[cpp]  view plain copy
  1. BOOL ShowWindow(HWND hWnd,     //窗口句柄  
  2.                  int nCmdShow   //顯示方式  
  3.                 );  

 

 

顯示方式能夠是下表中的任何一種。

表格 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

激活並顯示一個窗口。若是窗口被最小化或最大化,系統將其恢復到原來的尺寸和大小。應用程序在第一次顯示窗口的時候應該指定此標誌。

7.     更新窗口

 若是窗口更新的區域不爲空,UpdateWindow函數經過發送一個WM_PAINT消息來更新指定窗口的客戶區。函數繞過應用程序的消息隊列,直接發送WM_PAINT消息給指定窗口的窗口過程,若是更新區域爲空,則不發送消息。

8.     消息循環

 

[cpp]  view plain copy
  1. MSG msg;  
  2. while (GetMessage(&msg,NULL,0,0))     //從消息隊列中取得一條消息  
  3. {  
  4.     TranslateMessage(&msg);       //將虛擬鍵消息轉化成字符消息     
  5.     DispatchMessage(&msg);        //將消息發送給相應的窗口過程函數  
  6. }//  

 

 

8.1.   MSG 結構體

MSG結構體包含一條WindowMessage的所有信息

 

[cpp]  view plain copy
  1. typedef struct  tagMSG {                 //msg  
  2.                         HWND hwnd;       //接受消息循環的窗口句柄  
  3.             UINT message;    //消息類型  
  4.             WPARAM wParam;   //附加信息  
  5.             LPARAM lParam;   //附加信息  
  6.             DWORD time;      //投遞到消息隊列的時間  
  7.             POINT pt;        //鼠標的位置  
  8.                }MSG; //  

 

 

8.2.   自定義MSG

參見博文:MFC程序最小化到系統托盤區的一個簡單實例

 

9.     窗口過程

窗口過程函數是一個應用程序定義的函數,用來處理髮送到窗口的消息。WNDPROC類型定義了一個指向該回調函數的指針。WindowProc是用於應用程序定義函數的佔位符,也就是說,程序員本身更改WindowProc這個名稱,可是參數類型不變。

一個Windows 程序能夠包含多個窗口過程。一個窗口過程老是與調用RegisterClass註冊的特定窗口類相關聯。程序一般不直接調用窗口過程。窗口過程一般由 Windows 自己調用。經過調用 SendMessage 函數,程序可以直接調用它本身的窗口過程。

 

9.1.   函數聲明

 

[cpp]  view plain copy
  1. LRESULT CALLBACK WindowProc(        
  2.                          HWND   hwnd,   //指向窗口的句柄  
  3.              UINT   uMsg,   //指定消息類型  
  4.              WPARAM wParam, //指定其他的、消息特定的信息  
  5.                          LPARAM lParam  //指定其他的、消息特定的信息  
  6. );  

 

 

9.2.   函數功能

該函數主要是用來處理髮送給窗口的各種MSG消息。

窗口過程在處理消息時,必須返回0。

窗口過程不予處理的全部消息應該被傳給名爲DefWindowProc() 函數。

從 DefWindowProc 返回的值必須由窗口過程返回。

 

本文部份內容來自MSDN和網絡。

轉載請註明地址:

JarvisChu的專欄

相關文章
相關標籤/搜索