VC 深入詳解 之複習筆記 一

2021-04-12 17:00:12 字數 2480 閱讀 5835

1. api與sdk

windows

作業系統提供給應用程式程式設計的介面

()。主要的windows函式都在windows.h標頭檔案中進行了宣告。

windows

作業系統

大約有1000多種api函式,提供的api函式大多是有意義的單詞的組合,每個單詞首字母大寫,如: createwindow,從函式的名字上看,它是用來為程式建立乙個視窗的。沒有必要死記硬背api函式的呼叫語法和引數資訊,能從msdn中找到所需的資訊就可以了,使用次數多了,這些函式自然也就記住了。

我們常說win32 sdk開發,那麼什麼是sdk呢。sdk是software development kit,中文譯為軟體開發包

, 即windows 32位平台下的軟體開發包,包括了api函式、幫助文件、微軟提供的一些輔助開發工具。如開發呼叫中心,在購買語音卡時,廠商提供語音卡sdk開發包,方便我們對語音卡的程式設計操作。這個開發包會包含語音卡的api函式庫、幫助文件、使用手冊、輔助工具等資源。

2. 視窗和控制代碼

視窗,乙個windows應用程式至少要有乙個視窗,稱為主視窗。視窗是螢幕上的一塊矩形區域,是windows應用程式與使用者進行互動的介面。視窗可以有乙個父視窗,有父視窗的視窗稱為子視窗。利用視窗,可以接收使用者的輸入,以及顯示輸出。

在應用程式中,視窗是通過視窗控制代碼(

hwnd

)來標識的。要對某個視窗進行操作,首先要得到這個視窗的控制代碼(

handle)。在

windows

程式中,有各種各樣的資源(視窗、圖示、游標等),系統在建立這些資源時會為它們分配記憶體,並返回標識這些資源的標識號,即控制代碼。例如:圖示控制代碼(

hicon)

3. 訊息和訊息佇列

windows程式設計是一種事件驅動方式的程式設計模式,主要是基於訊息的。例如,當使用者在視窗中畫圖時,按下左鍵,作業系統會感知這一事件,並將這一事件包裝成乙個訊息,投遞到應用程式的訊息佇列中,然後應用程式從訊息佇列中取出訊息並進行響應。在這個處理過程中,作業系統也會給應用程式「傳送訊息」。所謂「傳送訊息」,實際上是作業系統呼叫程式中乙個專門負責處理訊息的函式,這個函式稱為視窗過程。訊息

在windows程式中,訊息是由msg結構體來表示的。msg結構體的定義如下(參見msdn):

typedef structtagmsg msg;

第乙個成員變數

hwnd

表示訊息所屬的視窗,

乙個訊息一般都是與某個視窗相關聯的。例如,在某個視窗中按下滑鼠左鍵,產生的按鍵訊息就是發給該視窗的。  

第二個成員變數

message

指定了訊息的識別符號。訊息是由乙個數值來表示的,不同的訊息對應不同的數值。

訊息對應的數值定義為

wm_***

巨集(wm

是window message

),***

對應某種訊息的英文拼寫的大寫。例如,滑鼠左鍵按下訊息是

wm_lbuttondown

,鍵盤按下訊息是

wm_keydown

,字元訊息是

wm_char等。

wm_***

訊息對應的具體數值,可在

vc++開

環境中選中

wm_***

,單擊右

鍵,彈出選單中選

goto definition

,即可看到該巨集的定義。

第三、第四個成員變數

wparam

和lparam

,用於指定訊息的附加資訊。

例如,當我們收到乙個字元訊息的時候,message成員變數的值就是wm_char,但使用者到底輸入的是什麼字元,那麼就由wparam和lparam來說明。wparam、lparam表示的資訊隨訊息的不同而不同。這兩種型別實際上就是unsigned int和long的巨集定義。

最後兩個變數分別表示訊息投遞到訊息佇列中的時間和滑鼠的當前位置。

訊息佇列

每乙個windows應用程式開始執行後,系統都會為該程式建立乙個訊息佇列,這個訊息佇列用來存放該程式建立的視窗的訊息。例如,當按下左鍵時,會產生wm_lbuttondown訊息,系統會將這個訊息放到視窗所屬的應用程式的訊息佇列中,等待應用程式的處理。windows將產生的訊息依次放到訊息佇列中,而應用程式則通過乙個訊息迴圈不斷地從訊息佇列中取出訊息,並進行響應。

進隊訊息和不進隊訊息

windows程式中的訊息可以分為「進隊訊息」和「不進隊訊息」。進隊的訊息將由系統放入到應用程式的訊息佇列中,然後由應用程式取出並傳送。不進隊的訊息在系統呼叫視窗過程時直接傳送給視窗。不管是進隊訊息還是不進隊訊息,最終都由系統呼叫視窗過程函式對訊息進行處理。

《VC 深入詳解》筆記(一)

1,sendmessage 將訊息直接傳送給視窗,並呼叫視窗的視窗過程進行處理。等訊息處理完後,函式才返回 它傳送的訊息為不進隊訊息 postmessage 則是將訊息方到訊息佇列中就 返回了。postthreadmessage 函式用於給執行緒傳送訊息。2 下面這段 會出問題,當關閉程式後,會出現...

VC 深入詳解 學習筆記

一 1 使用定義二進位制的值來定義相關的意義 如dword w cs hredraw cs vredraw 這樣就可以通過 或 運算來組合,同時要是不需要某個屬性可以通過 取反結合 與 運算來實現dword w cs hredraw cs vredraw dword h w cs verdraw 2...

VC 深入詳解筆記 引用

int a 5 int b a 用 表示申明乙個引用。引用必須在申明時進行初始化考慮下面 int a 5 int b a int c 3 b c 此處並不是將b變成c的引用,而是給b賦值,此時b和a的值都變成了3 引用只是乙個別名,是乙個變數或物件的替換名稱。引用的位址沒有任何意義,是所引用的變數或...