1,sendmessage
將訊息直接傳送給視窗,並呼叫視窗的視窗過程進行處理。等訊息處理完後,函式才返回(它傳送的訊息為不進隊訊息)。
postmessage
則是將訊息方到訊息佇列中就
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
返回了。
postthreadmessage
函式用於給執行緒傳送訊息。 2
,下面這段**會出問題,當關閉程式後,會出現
cpu占用
100%
的狀況。
hwnd =0
, cw_usedefault,
0, null, null, hinstance, null);
msg msg;
while
(getmessage(
&msg, hwnd, 0,
0))
原因在於:如果
hwnd
引數是無效的視窗控制代碼或
lpmsg
引數是無效的指標時,
getmessage
函式會返回
-1,當我們關閉視窗時,就呼叫了
destroywindow
來銷毀視窗,則視窗控制代碼就成為無效的控制代碼了,那麼
getmessage
就返回-1
,並且是總是返回
-1,而非
0即為真,所以就死迴圈了。所以可以修改如下:
hwnd =0
, cw_usedefault,
0, null, null, hinstance, null);
msg msg;
bool bret;
while
(getmessage(
&msg, hwnd, 0,
0))
else
程式執行的順序依次是:
全域性物件定義處,
建構函式,父類
的建構函式,然後才是
winmain
函式。而
winmain
實際上呼叫的是
afxwinmain
函式,這個函式首先呼叫
afxgetthread
獲得乙個
cwinthread
型別指標
pthread
,接著呼叫
獲得乙個
型別指標
,而實際上這兩個指標是一致的,都指向
物件。接下來
首先呼叫
函式,完成
mfc的內部管理工作,然後
pthread
呼叫子類中的
initinstance
函式,;
首先利用全域性應用程式物件
啟動應用程式,再呼叫全域性應用程式物件的建構函式,從而呼叫其父類的建構函式來完成程式的一些初始化工作,並將應用程式指標儲存起來。進入
winmain
函式,在
afxwinmain
中可以獲取子類的指標,並利用它呼叫虛函式
initinstance,
完成應用程式的一些初始化工作,包括視窗類的建立,註冊,視窗的顯示,更新,期間會多次呼叫
createx
函式。最後進入訊息迴圈,而
mfc是採用訊息對映機制來處理的,當收到
wm_quit
訊息時,退出迴圈,程式結束。
4,檢視類視窗始終覆蓋在框架類視窗之上,就好比是一張牆紙總貼在牆上,則像滑鼠單擊,移動這些操作都只能由檢視類視窗捕獲,這就是為何在框架類視窗中收不到滑鼠單擊這一訊息的原因。
5,在桌面視窗中畫圖:
cwnd
類的getdesktopwindow
函式可以獲取桌面視窗的控制代碼。
void
ctestview::onlbuttonup(uint nflags,cpoint point)
VC 深入詳解 之複習筆記 一
1.api與sdk windows 作業系統提供給應用程式程式設計的介面 主要的windows函式都在windows.h標頭檔案中進行了宣告。windows 作業系統 大約有1000多種api函式,提供的api函式大多是有意義的單詞的組合,每個單詞首字母大寫,如 createwindow,從函式的名...
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 引用只是乙個別名,是乙個變數或物件的替換名稱。引用的位址沒有任何意義,是所引用的變數或...