win32基本框架

其實win32最主要的特點就是消息循環,它包含了倆個基本的函數

         

         (1)    LRESULT CALLBACK WndProc( HWND hWnd,

                                                                     UINT    message,

                                                                WPARAM   wParam,

                                                                  LPARAM  lParam)

           這個函數叫窗口函數, 接收消息並做出相應處理,比如(WM_MOUSEMOVE、WM_DESTROY),CALLBACK是一種函數調用習慣,被定義爲__stdcall,說明此函數爲回調函數,由系統自動調用的,當窗口接收到消息並DispatchMessage之後,系統就自動調用窗口函數WndProc了。注意窗口函數中消息的分支結構中default分支必須是return DefWindowProc ( hWnd, message, wParam, lParam );因爲不論什麼消息都必須被處理,DefWindowProc是windows內部預設的消息處理函數。

        (2)     int  WINAPI WinMain ( HINSTANCE     hInst,

                                                 HINSTANCE      hPrevInst,

                                                          LPSTR       lpCmdLine,

                                                                  int       nCmdShow )

     參數說明:hInst 爲當前實例句柄,Windows 環境下用於區別同一應用程序的不同實例;hPrevInst應用程序先前實例的句柄(如果有的話),否則爲 NULL,可以用來確定當前實例是否爲應用程序的第一個實例;lpCmdLine是以NULL結尾的命令行字符串長指針;nCmdShow指定窗口初始顯示方式的整型常量(1 = 通常;7 = 最小化)

     

框架結構與步驟

   註冊窗口---->創建窗口----->顯示和更新窗口---->消息循環

 

  WNDCLASSEX   wcex;

  wcex.cbSize           = sizeof( WNDCLASSEX );

  wcex.style               = CS_HREDRAW | CS_VREDRAW;

  wcex.lpfnWndProc = (WNDPROC) WndProc

   ............................

  RegisterClassEx(&wcex);                                          //註冊窗口

 

 HWND hwnd;                                                                  //定義一個句柄,把生成的窗口句柄賦給hwnd

 hwnd=CreateWindow("Weixin2003",

                                     "This is my test ! ",

                           WS_OVERLAPPEDWINDOW,

                           0,0,600,400,NULL,NULL,

                               hInstance,NULL);                   // 根據初始化的窗口類,創建該窗口。並把句柄賦給hwnd。

如果想要全屏顯示的話,屏幕參數可以爲

0, 0, ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN),

 

//顯示和更新窗口

ShowWindow(hwnd,nCmdShow);

  UpdateWindow(hwnd);

 

//消息循環

     while(GetMessage(&Msg,NULL,0,0))

     {

         TranslateMessage(&Msg);

         DispatchMessage(&Msg);         //對消息反應就會自動調用窗口函數

    }

 

//窗口函數

LRESULT CALLBACK WndProc( HWND hWnd,

                                                             UINT    message,

                                                      WPARAM   wParam,

                                                           LPARAM  lParam)

{

    switch(message)

    {

       case WM_DESTROY:                                                                                 //結束應用程序
                      PostQuitMessage(0);
                      break;
      default:
                return DefWindowProc(hWnd, message, wParam, lParam);        //調用內被預設的消息處理函數,是必須寫的
   }

}

這樣,一個win32窗口框架程序就介紹完了~~

 

 

 

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章