【MFC系列-第9天】MFC消息映射机制的原理
關(guān)注公號【逆向通信猿】更精彩!!!
第9天 MFC消息映射機(jī)制的原理
9.1 對話框常用的回調(diào)函數(shù)
a)窗口創(chuàng)建時的消息和虛函數(shù)包括:WM_CREATE,WM_INITDIALOG,和PreSubclassWindow等;
b)窗口關(guān)閉時的消息和虛函數(shù):WM_CLOSE,WM_DESTROY以及OnOK和OnCancel等。
c)有些消息是所有窗口都通用的,例如:WM_CREATE、WM_CLOSE和WM_DESTROY等。
d)有些消息和虛函數(shù)是對話框?qū)S玫幕卣{(diào)函數(shù),例如:WM_INITDIALOG消息以及OnOK、OnCancel等虛函數(shù)。
9.2 WM_CREATE和WM_INITDIALOG消息:
a)通過MSDN的說明可以查看到,WM_CREATE和WM_INITDIALOG都是是窗口剛創(chuàng)建時的回調(diào)消息;
b)當(dāng)窗口還未顯示出來之前,對窗口做預(yù)先處理的回調(diào)函數(shù)。
c)WM_CREATE是所有窗口通用的創(chuàng)建時回調(diào)消息,用于包括對話框、MDI或者SDI等任何窗口的初始化,對應(yīng)的消息映射函數(shù)是OnCreate。
d)可以在該函數(shù)中編寫代碼,在窗口剛創(chuàng)建還未顯示時,修改父窗口屬性或者創(chuàng)建內(nèi)部子窗口。
e)WM_INITDIALOG對話框是對話框?qū)S孟?#xff0c;最常用來初始化對話框及其內(nèi)部控件,對應(yīng)的消息映射函數(shù)是OnInitDialog。
f)這個函數(shù)內(nèi)部第一行一般是先執(zhí)行基類函數(shù)CDialog::OnInitDialog,基類函數(shù)執(zhí)行過程會將所有對話框資源模板內(nèi)的控件都創(chuàng)建完畢因此可以在該函數(shù)中,編寫代碼來對子窗口的做初始化設(shè)置。
g)PreSubclassWindow比OnCreate函數(shù)更早調(diào)用。
9.2 系統(tǒng)關(guān)閉過程:WM_SYSCOMMAND->WM_CLOSE->OnCancel->WM_DESTROY
a)WM_SYSCOMMAND:是對所有系統(tǒng)菜單中的命令的管理(包括:最大化、最小化、關(guān)閉、移動、大小等)
b)WM_CLOSE:是WM_SYSCOMMAND關(guān)閉分支消息
c)WM_DESTROY:窗口的句柄還在,以及子窗口都可以使用:窗口已經(jīng)處于不可見狀態(tài),并且不能取消關(guān)閉了
d)任何窗口包括控件、框架和對話框窗口關(guān)閉時,必經(jīng)此消息,甚至一些程序員把這個消息當(dāng)做析構(gòu)函數(shù)使用了。
9.3 SendMessage和PostMessage
a)消息回調(diào)函數(shù)的返回值
{//消息回調(diào)函數(shù)switch (uMsg){case WM_CLOSE://ShowWindow(hwndDlg, SW_MINIMIZE);MessageBox(hwndDlg, _T("關(guān)閉"), ("提示"), MB_OK);return TRUE;// TRUE代表系統(tǒng)不用關(guān)閉了 FALSE代表系統(tǒng)繼續(xù)關(guān)閉返回值類型不同:兩個函數(shù)的4個參數(shù)的意義是一樣的,只有返回值類型不同(其實(shí)從數(shù)據(jù)上看他們一樣是一個32位的數(shù),只是意義不一樣);
b)SendMessage的返回值類型是LRESULT:表示的是消息被處理后的返回值
PostMessage的返回值類型是BOOL:表示的是消息是不是傳遞成功。
c)PostMessage 是異步(不等待)的,SendMessage 是同步(阻塞)的。
PostMessage只把消息放入窗口消息隊列中,不管消息被處理后的結(jié)果就返回;而SendMessage等待消息被處理完了之后才返回。
d)如果在同一個線程內(nèi),常常使用SendMessage發(fā)送消息時,速度快并能得到返回的消息處理結(jié)果。在不同線程或者進(jìn)程之間,一般使用PostMessage發(fā)送消息,把消息先放入目標(biāo)窗口的消息隊列中,然后由目標(biāo)窗口通過消息循環(huán)自行派發(fā)處理。
e)SendMessage和PostMessage函數(shù)都是消息傳遞函數(shù),兩個函數(shù)的格式:
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);9.4 消息分類:
a)系統(tǒng)消息:范圍是從0到WM_USER
WM_CREATE: ... ... WM_USER 1024b)用戶(自定義)消息:
WM_USER+1以后的所有消息都是用戶可以使用消息
c)Win32工程中直接把用戶消息(例如:UM_TEST),放到消息處理函數(shù)的switch分支即可;
d)MFC工程中在類向?qū)е杏袑iT的一個按鈕來創(chuàng)建“用戶自定義消息”,生成的代碼是ON_MESSAGE消息映射種類。
總結(jié)
以上是生活随笔為你收集整理的【MFC系列-第9天】MFC消息映射机制的原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雪人骑士天赋打野天赋(雪人骑士天赋打野天
- 下一篇: 移动叔叔电脑版怎么用移动叔叔root工具