《VC++深入詳解》讀書筆記 第一章:Windows程式內部運行機制

來源:互聯網
上載者:User

1.1API與SDK

API:Application Programming Interface
SDK:Software Development Kit

1.2視窗與控制代碼

一個Windows應用程式至少要有一個視窗,稱為主視窗。
一個應用程式視窗通常都包含標題列、功能表列、系統功能表、最大最小化框、可調邊框、及捲軸。
視窗分為客戶區和非客戶區。
在Windows應用程式中,視窗是通過視窗控制代碼(HWND)來標識的。控制代碼(HANDLE)。

1.3訊息與訊息佇列

Windows程式設計是一種事件驅動方式的程式設計模式,主要是基於訊息的。
在Windows程式中,訊息是由MSG結構體來表示的。
    typedf struct tagMSG{
        HWND  hwnd;//成員變數hwnd表示訊息所屬視窗
        UINT     message;//成員變數message指定了訊息的標識符
        WPARAM wParam;//用於指定訊息的附加訊息
        LPARAM lParam;//用於指定訊息的附加訊息
        DWORD time;//訊息投遞到訊息佇列中的時間
        POINT    pt;//滑鼠當前位置
    }MSG;
每一個Windows程式開始執行後,系統都會為該程式建立一個訊息佇列,這個訊息佇列用來存放該程式建立的視窗的訊息。
Windows程式中的訊息可以分為“進隊訊息”和“不進隊訊息”。
進隊的訊息由系統放入到應用程式的訊息佇列中,然後由應用程式取出並發送。
不進隊訊息在系統調用視窗過程時直接發送給視窗。
不論進隊與否,訊息最終都由系統調用視窗過程函數對訊息進行處理。

1.4WinMain函數

WinMain函數是Windows程式的入口函數,當WinMain函數結束或返回時,Windows應用程式結束。
    int  WINAPI WinMain(
        HINSTANCE hInstance,//程式當前啟動並執行執行個體的控制代碼,這是一個數值
        HINSTANCE hPrevInstance,//當前執行個體的前一個執行個體的控制代碼
        LPSTR lpCmdLine,//指定傳遞給應用程式的命令列參數
        int nCmdShow//指定視窗的顯示方式
    );
視窗的建立:1.設計視窗;2.註冊視窗;3.建立視窗;4.顯示視窗
設計視窗,Windows已經為我們定義好一個視窗應該具有的基本屬性,我們只需要將要填充的部分填好視窗就設計好了。視窗的特徵是通過結構體

WNDCLASS來定義的。
    typedef structure _WNDCLASS{
        UINT          style;//指定這一類型視窗的樣式
        WNDPROC     lpfnWndProc;//函數指標,指向視窗過程函數
        int        cbClsExtra;//Windows為系統中的每一個視窗類別管理一個WNDCLASS結構
        int        cbWndExtra;//視窗附加記憶體
        HANDLE        hInstance;//指定包含視窗過程的程式的執行個體控制代碼
        HICON        hIcon;//指定視窗類別的表徵圖控制代碼
        HCURSOR        hCursor;//指定視窗類別的游標控制代碼
        HBRUSH        hbrBackground;//指定視窗類別的背景畫刷控制代碼
        LPCTSTR        lpszMenuName;//一個以空終止的字串,指定菜單資源的名字
        LPCTSTR        lpszClassName;//一個以空終止的字串,指定視窗類別的名字
    }WNDCLASS;
註冊視窗,視窗類別(WNDCLASS)設計完後,需要調用RegisterClass函數進行註冊。
    ATOM  RegisterClass(CONST WNDCLASS *lpWndClass);//*lpWndClass即視窗類別對象的指標
建立視窗,設計並註冊好視窗類別之後,就可以用CreateWindow函數產生這種類型視窗。
    HWND  CreateWindow(
        LPCTSTR         lpClassName,//指定視窗類別的名稱
        LPCTSTR         lpWindowName,//指定視窗的名字
        DWORD         dwStyle,//指定建立的視窗的樣式
        int         x,//視窗左上方的x座標
        int         y,//視窗左上方的y座標
        int         nWidth,//視窗的寬度
        int         nHeight,//視窗的高度
        HWND         hWndParent,//指定被建立視窗的父視窗控制代碼
        HMENU         hMenu,//指定視窗菜單的控制代碼
        HANDLE         hInstance,//指定視窗所屬應用程式執行個體的控制代碼
        LPVOID         lpParam//作為WM_CREATE訊息的附加參數lParam傳入的資料指標
    );
顯示視窗,調用函數ShowWindow來顯示視窗
    BOOL ShowWindow(
        HWND hWnd,//成功建立視窗後返回的視窗控制代碼
        int nCmdShow//視窗的顯示狀態
    );
更新視窗,調用ShowWindow函數後,我們調用UpdateWindow來重新整理視窗
    BOOL UpdateWindow(
        HWND hWnd//建立成功後的視窗控制代碼
    )
訊息迴圈,在建立視窗、顯示視窗、更新視窗後,我們需要編寫一個訊息迴圈,不斷的從訊息佇列中取出訊息並響應。
從訊息佇列中取出訊息,我們調用GetMessage()函數
    BOOL GetMessage(
        LPMSG lpMsg,//指向一個訊息(MSG)結構體,GetMessage從線程的訊息佇列中取出的訊息資訊將儲存在該結構體對象中
        HWND hWnd,//指定接受屬於哪一個視窗的訊息
        UINT wMsgFilterMin,//指定要擷取的訊息的最小值
        UINTwMsgFiletermax//指定要擷取的訊息的最大值,若min和max都設定為0,則接收所有訊息
    );
GetMessage函數接收到除WM_QUIT外的訊息均返回非零值。
對於WM_QUIT訊息,該函數返回零。
如果出現了錯誤,返回-1

Windows應用程式訊息處理機制:(1)作業系統接受到應用程式的視窗訊息,將訊息投遞到該應用程式的訊息佇列中。(2)應用程式在訊息迴圈中調用

GetMessage函數從訊息佇列中取出一條一條的訊息。取出訊息後,應用程式可以對訊息進行一些預先處理,例如放棄對某些訊息的響應,或者調用

TranslateMessage產生新的訊息。(3)應用程式調用DispatchMessage,將訊息回傳給作業系統。(4)系統利用WNDCLASS結構體的lpfnWndProc成員

儲存的視窗過程函數的指標調用視窗過程,對訊息進行處理。

視窗過程函數,用於處理髮送給視窗的訊息。一個Windows應用程式的主要代碼部分就集中在視窗過程函數中。
    LRESULT CALLBACK WindowProc(
        HWND  hwnd,//訊息的視窗控制代碼
        UINT  uMsg,//訊息代碼
        WPARAM  wParam,//訊息代碼的附加參數
        LPARAM      lParam//訊息代碼的附加參數
    );

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.