簡単なWin 32プログラムを解説します


一、Windowsプログラムと普通のC或いはC++プログラムの違い
CやC++などの言語を学んだことがある人はみな知っています.私たちが書いたプログラムはすべて入り口、main関数ですが、Win 32プログラムでは、私たちの入り口関数は何ですか.それはどのように運行して、私たちがCあるいはC++で書いたコンソールプログラムと何が違いますか?
まず、Win 32プログラムと私たちのコンソールのプログラムの重要な違いは、Win 32プログラムがメッセージ応答プログラムであることです.例えば、ボタンをクリックすると、メッセージonButoonが生成され、その後、このメッセージが私たちのプログラムが維持しているメッセージキューに入り、プログラムの実行中にキュー内のメッセージを絶えず取り出します.対応する処理を行います.プログラムを終了するメッセージが取り出されるまで.
二、MSGの構造と構成を理解する
まず、Windowsのプログラムがメッセージに基づいてトリガーされる以上、Windowsはどのようにメッセージを定義しますか?以下にMSDNで説明するドキュメントの定義を示します.
typedef struct tagMSG {     // msg  
   HWND hwnd;
   UINT message;
   WPARAM wParam;
   LPARAM lParam;
   DWORD time;
   POINT pt;
} MSG;
HWND hwnd:hwnd        ,            ;         ,      C C++    ,        ,       ,            (HICON),    (HCURSOR),    (HWND),        (HINSTANCE)         。                          。
 
UINT message:message   UINT( C C++  unsign int)     ,            ,       。message        ,            ,   VC++                 , WM_KEYDOWN。

WPARAM wParam:    ,    message     。

LPARAM lParam: wParam  ,       ,    message     。 wParam  ,               。

DWORD time:DWORD   C C++  unsigned long  ,time             。

POINT pt:POINT      ,           ,     LONG     x y,                    。
      MSG                 。

 、  WinMain  
  , C C++         main    ,Win32       main  ,    WinMain  ,      :
int WINAPI WinMain(

   
   
   
   
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
);
HINSTANCE hInstance: hInstance 。 。
HINSTANCE hPrevInstance: hPrevInstance 。
LPSTR lpCmdLine:lpCmdLine , , ? C C++ main char *argv[]。
int nCmdShow: , , , 。
WinMain main , , 。
WINAPI ? , __stdcall, , VC , __cdecl。
? , , , VC ( )WNDCLASS。 , :
typedef struct _WNDCLASS { 
 UINT style;              // ,
 WNDPROC lpfnWndProc;    // ,  
 int cbClsExtra;         // , 0
 int cbWndExtra;         // , 0
 HANDLE hInstance;    // , WinMain
 HICON hIcon;         // , , LoadIcon
 HCURSOR hCursor; // , , LoadCursor
 HBRUSH hbrBackground;     // , (HBRUSH) GetStockObject 。
 LPCTSTR lpszMenuName;     //
 LPCTSTR lpszClassName;     //
 } WNDCLASS;
, , , , 。 , , , 。 , lpfnWndProc 。 , lpfnWndProc 。 
VC Windows , , (bit) 。 1 , , 0 , 。 1 , 。 , , , (bit) 1, bit 0。 UINT , | , &~ 。
, WinMain WNDCLASS , WNDCLASS , , R egisterClass(&wndcls) , WNDCLASS 。 HWND hwnd; CreateWindow, hwnd。 ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); 。
, ,Windows , ? , , , 。
, MSG , MSG msg;
while(GetMessage(&msg,NULL,0,0)) 
 TranslateMessage(&msg); 
 DispatchMessage(&msg); 
 }
GetMessage , MSG , msg ; ,NULL ; ; 。 0, 。 BOOL , WM_QUIT , FALSE; , , 。
TranslateMessage , 、 , 。
DispatechMessage , 。 , , 。
、 ( )
LRESULT CALLBACK WinSunProc( 
 HWND hwnd, //  
 UINT uMsg, //
 WPARAM wParam, // MSG  
 LPARAM lParam // MSG
 );
CALLBACK _stdcall,LRESULT long 。
, WNDCLASS , switch , , , switch default:return DefWindowProc(hwnd,uMsg,wParam,lParam); case , , 。