天天看點

VC++深入詳解的學習

 第一章Windows程式内部運作機制

      基礎知識:

            一個Windows應用程式至少要有一個視窗,稱為主視窗。

            一個應用程式視窗通常都包含标題欄、菜單欄、系統菜單、最小化框、最大化框、可調邊框,有的還帶有滾動條。下圖為WS_OVERLAPPEDWINDOW類型的視窗:           

VC++深入詳解的學習

       視窗可以分為客戶區和非客戶區,應用程式通常在客戶區中顯示文字或繪制圖形。标題欄、菜單欄、系統菜單、最小化框和最大化框、可調邊框統稱為視窗的非客戶區,它們由Windows系統管理,應用程式則主要管理客戶區的外觀及操作。

       對話框和消息框也是一種視窗。在Windows程式中,視窗是通過視窗句柄來辨別的。

       Windows程式設計是一種事件驅動方式的程式設計模式,主要是基于消息的。

       在Windows程式中,消息是由MSG結構體來表示的。MSG結構體的定義為:

                                          typedef  struct  tagMSG{

                                                        HWND   hwnd;          //視窗句柄

                                                        UINT      message;    //消息辨別符

                                                        WPARAM   wParam; 

                                                        LPARAM     lParam;

                                                        DWORD      time;

                                                        POINT         pt;

                                          } MSG;

        該結構體成員變量的含義為:第一個成員變量hwnd表示消息所屬的視窗,一個消息一般都是與某個視窗相關聯的。在Windows程式中,用HWND類型的變量來辨別視窗。

        第二個成員變量message指定了消息的辨別符。在Windows中,消息是由一個數值來表示的,不的消息對應不同的數值。

        第三、第四個變量成員wParam和lParam,用于指定消息的附加資訊。最後兩個變量分别表示消息投遞到消息隊列中的時間和滑鼠的目前位置。

       每一個Windows應用程式開始執行後,系統都會為該程式建立一個消息隊列,這個消息隊列用來存放該程式建立的視窗的消息。例如,當我們按下滑鼠左鍵的時候,将會産生一個WM_LBUTTONDOWN消息,系統會将這個消息放到視窗所屬的應用程式的消息隊列中,等待應用程式的處理。Windows将産生的消息依次放到消息隊列中,而應用程式則通過一個消息循環不斷地從消息隊列中取出消息,并進行相應。這種消息機制,就是Windows程式運作的機制。

       Windows程式中的消息可以分為“進隊消息”和“不進隊消息”。進隊的消息将由系統放入到應用程式的消息隊列中,然後由應用程式取出并發送。不進隊的消息在系統調用視窗過程時直接發送給視窗。

總結:

         Windows程式運作的機制:當外接裝置對應用程式進行有關的操作時,發出相關的消息,系統将該消息放到這個應用程式的消息隊列中,應用程式通過一個消息循環不斷地從消息隊列中取出消息,并進行響應。