Windows視窗與訊息

2021-10-01 13:45:29 字數 1585 閱讀 7895

進行windows程式設計,實際上是在進行一種物件導向的程式設計(oop)。這一點在windows中使用得最多的物件上表現最為明顯。這種物件正是windows之所以命名為「windows」的原因,它具有人格化的特徵,甚至可能會在您的夢**現,這就是那個叫做「視窗」的東西。

桌面上最明顯的視窗就是應用程式視窗。這些視窗含有顯示程式名稱的標題列、選單甚至可能還有工具列和滾動條。另一類視窗是對話方塊,它可以有標題列也可以沒有標題列。

裝飾對話方塊表面的還有各式各樣的按鍵、單選按鈕、核取方塊、清單方塊、滾動條和文字輸入區域。其中每乙個小的視覺物件都是乙個視窗。更確切地說,這些都稱為「子視窗」或「控制項視窗」或「子視窗控制項」。

作為物件,使用者會在螢幕上看到這些視窗,並通過鍵盤和滑鼠直接與它們進行互動操作。更有趣的是,程式寫作者的觀點與使用者的觀點極其類似。視窗以「訊息」的形式接收視窗的輸入,視窗也用訊息與其它視窗通訊。對訊息的理解將是學習如何寫作windows程式所必須越過的障礙之一。

乙個windows的訊息範例:我們知道,大多數的windows程式都有大小合適的應用程式視窗。也就是說,您能夠通過滑鼠拖動視窗的邊框來改變視窗的大小。通常,程式將通過改變視窗中的內容來響應這種大小的變化。你可能會猜測,是windows本身而不是應用程式在處理與使用者重新調整視窗大小相關的全部雜亂程式。由於應用程式能改變其顯示的樣子,所以它也「知道」視窗大小改變了。

應用程式是如何知道使用者改變了視窗的大小的呢?由於程式寫作者習慣了往常的文字模式程式,作業系統沒有設定將此類訊息通知給使用者的機制。

問題的關鍵在於理解windows所使用的架構。當使用者改變視窗的大小時,window給程式傳送乙個訊息指出新視窗的大小。然後程式就可以調整視窗中的內容,以響應大小的變化。

其實,所謂「windows給程式傳送訊息」,是指windows呼叫程式中的乙個函式,該函式的引數描述了這個特定訊息。這種位於windows程式中的函式稱為「視窗訊息處理程式」。讀者對程式呼叫作業系統的做法是很熟悉的。例如,程式在開啟磁碟檔案時就要使用有關的系統呼叫。讀者所不習慣的,可能是作業系統呼叫程式,而這正是windows物件導向架構的基礎。

程式建立的每乙個視窗都有相關的視窗訊息處理程式。這個視窗訊息處理程式是乙個函式,既可以在程式中,也可以在動態鏈結庫中。windows通過呼叫視窗訊息處理程式來給視窗傳送訊息。視窗訊息處理程式根據此訊息進行處理,然後將控制傳回給windows。更確切地說,視窗通常是在「視窗類別」的基礎上建立的。視窗類別標識了處理視窗訊息的視窗訊息處理程式。使用視窗類別使多個視窗能夠屬於同乙個視窗類別,並使用同乙個視窗訊息處理程式。例如,所有windows程式中的所有按鈕均依據同乙個視窗類別。這個視窗類別與乙個處理所有按鈕訊息的視窗訊息處理程式(位於windows的動態鏈結庫中)聯結。

在物件導向的程式設計中,物件是程式與資料的組合。視窗是一種物件,其程式是視窗訊息處理程式。資料是視窗訊息處理程式儲存的資訊和windows為每個視窗以及系統中那個視窗類別儲存的資訊。c++的物件導向思想與windows視覺化視窗非常匹配。

windows程式開始執行後,windows為該程式建立乙個「訊息佇列」。這個訊息佇列用來存放該程式可能建立的各種不同視窗的訊息。程式中有一小段程式**,叫做「訊息迴圈」,用來從佇列中取出訊息,並且將它們傳送給相應的視窗訊息處理程式。有些訊息直接傳送給視窗訊息處理程式,不用放入訊息佇列中。

Windows視窗訊息大全

windows視窗訊息大全,全不全自己看 include afxpriv.h 訊息值的定義 include dde.h dde訊息值的定義 include cpl.h 控制面板訊息值的定義 include wfext.h 檔案管理器的訊息值的定義 include ras.h ras 遠端訪問服務 的...

Windows程式設計 視窗和訊息

include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow te...

Windows學習筆記4 視窗與訊息《二》

windows最重要的三個子系統 三個dll kernel,user,gdi kernel 處理所有在傳統上由作業系統核心處理的事務 記憶體管理,裝置io,多工管理 user 是指使用者介面,實現所有視窗執行機制 gdi 實現圖形裝置介面,允許程式在螢幕或印表機上顯示文字和圖形。關於wndclass...