第一篇:MFC消息處理函數(shù)總結(jié)
1.AfxWndProc()該函數(shù)負(fù)責(zé)接收消息,找到消息所屬的CWnd對(duì)象,然后調(diào)用AfxCallWnd
Proc
2.AfxCallWndProc()該函數(shù)負(fù)責(zé)保存消息(保存的內(nèi)容主要是消息標(biāo)識(shí)符和消息參數(shù))供應(yīng)
用程序以后使用,然后調(diào)用WindowProc()函數(shù)
3.WindowProc()該函數(shù)負(fù)責(zé)發(fā)送消息到OnWndMsg()函數(shù),如果未被處理,則調(diào)用DefWin
dowProc()函數(shù)
4.OnWndMsg()該函數(shù)的功能首先按字節(jié)對(duì)消息進(jìn)行排序,對(duì)于WM_COMMAND消息,調(diào)用OnCommand()消息響應(yīng)函數(shù),對(duì)于WM_NOTIFY消息調(diào)用OnNotify()消息響應(yīng)函數(shù)。任何被遺漏的消息將是一個(gè)窗口消息。OnWndMsg()函數(shù)搜索類(lèi)的消息映像,以找到一個(gè)能處理任何窗口消息的處理函數(shù)。如果OnWndMsg()函數(shù)不能找到這樣的處理函數(shù)的話,則把消
息返回到WindowProc()函數(shù),由它將消息發(fā)送給DefWindowProc()函數(shù)
5.OnCommand()該函數(shù)查看這是不是一個(gè)控件通知(lParam參數(shù)不為NULL,如果lParam參數(shù)為空的話,說(shuō)明該消息不是控件通知),如果它是,OnCommand()函數(shù)會(huì)試圖將消息映射到制造通知的控件;如果他不是一個(gè)控件通知(或者如果控件拒絕映射的消息)OnCommand()
就會(huì)調(diào)用OnCmdMsg()函數(shù)
6.OnCmdMsg()根據(jù)接收消息的類(lèi),OnCmdMsg()函數(shù)將在一個(gè)稱(chēng)為命令傳遞(Command Routing)的過(guò)程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類(lèi)是一個(gè)框架類(lèi),則命令和通知消息也被傳遞到視圖和文檔類(lèi),并為該類(lèi)尋找一個(gè)消息處理函數(shù)
MFC應(yīng)用程序創(chuàng)建窗口的過(guò)程
1.PreCreateWindow()該函數(shù)是一個(gè)重載函數(shù),在窗口被創(chuàng)建前,可以在該重載函數(shù)中改變
創(chuàng)建參數(shù)(可以設(shè)置窗口風(fēng)格等等)
2.PreSubclassWindow()這也是一個(gè)重載函數(shù),允許首先子分類(lèi)一個(gè)窗口
3.OnGetMinMaxInfo()該函數(shù)為消息響應(yīng)函數(shù),響應(yīng)的是WM_GETMINMAXINFO消息,允許設(shè)置窗口的最大或者最小尺寸
4.OnNcCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_NCCREATE消息,發(fā)送消息以告
訴窗口的客戶區(qū)即將被創(chuàng)建
5.OnNcCalcSize()該函數(shù)也是消息響應(yīng)函數(shù),響應(yīng)WM_NCCALCSIZE消息,作用是允許改
變窗口客戶區(qū)大小
6.OnCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送消息告訴一個(gè)
窗口已經(jīng)被創(chuàng)建
7.OnSize()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送該消息以告訴該窗口
大小已經(jīng)發(fā)生變化
8.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息說(shuō)明窗口在移動(dòng)
9.OnChildNotify()該函數(shù)為重載函數(shù),作為部分消息映射被調(diào)用,告訴父窗口即將被告知一
個(gè)窗口剛剛被創(chuàng)建
MFC應(yīng)用程序關(guān)閉窗口的順序(非模態(tài)窗口)
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_CLOSE消息,當(dāng)關(guān)閉按鈕被單擊的時(shí)候發(fā)送
此消息
2.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_DESTROY消息,當(dāng)一個(gè)窗口將被銷(xiāo)毀時(shí),發(fā)送此消息
3.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀
后發(fā)送此消息
4.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作,被CWnd調(diào)用
MFC應(yīng)用程序中打開(kāi)模式對(duì)話框的函數(shù)調(diào)用順序
1.DoModal()重載函數(shù),重載DoModal()成員函數(shù)
2.PreSubclassWindow()重載函數(shù),允許首先子分類(lèi)一個(gè)窗口
3.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被
創(chuàng)建
4.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
5.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息,以告訴窗口正在移動(dòng)
6.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息,以允許改變對(duì)話框
中控件的字體
7.OnInitDialog()消息響應(yīng)函數(shù),響應(yīng)WM_INITDIALOG消息,發(fā)送此消息以允許初始化對(duì)
話框中的控件,或者是創(chuàng)建新控件
8.OnShowWindow()消息響應(yīng)函數(shù),響應(yīng)WM_SHOWWINDOW消息,該函數(shù)被ShowWind
ow()函數(shù)調(diào)用
9.OnCtlColor()消息響應(yīng)函數(shù),響應(yīng)WM_CTLCOLOR消息,被父窗口發(fā)送已改變對(duì)話框或
對(duì)話框上面控件的顏色
10.OnChildNotify()重載函數(shù),作為WM_CTLCOLOR消息的結(jié)果發(fā)送
MFC應(yīng)用程序中關(guān)閉模式對(duì)話框的順序
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)WM_CLOSE消息,當(dāng)“關(guān)閉”按鈕被單擊的時(shí)候,該函數(shù)
被調(diào)用
2.OnKillFocus()消息響應(yīng)函數(shù),響應(yīng)WM_KILLFOCUS消息,當(dāng)一個(gè)窗口即將失去鍵盤(pán)輸
入焦點(diǎn)以前被發(fā)送
3.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_DESTROY消息,當(dāng)一個(gè)窗口即將被銷(xiāo)毀時(shí),被發(fā)
送
4.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀以后被
發(fā)送
5.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作被CWnd調(diào)用
打開(kāi)無(wú)模式對(duì)話框的順序
1.PreSubclassWindow()重載函數(shù),允許用戶首先子分類(lèi)一個(gè)窗口
2.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被
創(chuàng)建
3.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
4.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息以告訴窗口正在移動(dòng)
5.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息以允許改變對(duì)話框中
控件的字體
以上這些的執(zhí)行都是按給定的順序執(zhí)行!
只有清楚的了解應(yīng)用程序的執(zhí)行順序,才能在編寫(xiě)代碼的時(shí)候知道,在什么時(shí)候應(yīng)該執(zhí)行什
么,以及在什么地方該處理什么!
這只是本人總結(jié)的一點(diǎn)小小的經(jīng)驗(yàn),希望能對(duì)MFC的初學(xué)者有所幫助!MFC應(yīng)用程序中處
理消息的順序
1.AfxWndProc()該函數(shù)負(fù)責(zé)接收消息,找到消息所屬的CWnd對(duì)象,然后調(diào)用AfxCallWnd
Proc
2.AfxCallWndProc()該函數(shù)負(fù)責(zé)保存消息(保存的內(nèi)容主要是消息標(biāo)識(shí)符和消息參數(shù))供應(yīng)
用程序以后使用,然后調(diào)用WindowProc()函數(shù)
3.WindowProc()該函數(shù)負(fù)責(zé)發(fā)送消息到OnWndMsg()函數(shù),如果未被處理,則調(diào)用DefWin
dowProc()函數(shù)
4.OnWndMsg()該函數(shù)的功能首先按字節(jié)對(duì)消息進(jìn)行排序,對(duì)于WM_COMMAND消息,調(diào)用OnCommand()消息響應(yīng)函數(shù),對(duì)于WM_NOTIFY消息調(diào)用OnNotify()消息響應(yīng)函數(shù)。任何被遺漏的消息將是一個(gè)窗口消息。OnWndMsg()函數(shù)搜索類(lèi)的消息映像,以找到一個(gè)能處理任何窗口消息的處理函數(shù)。如果OnWndMsg()函數(shù)不能找到這樣的處理函數(shù)的話,則把消
息返回到WindowProc()函數(shù),由它將消息發(fā)送給DefWindowProc()函數(shù)
5.OnCommand()該函數(shù)查看這是不是一個(gè)控件通知(lParam參數(shù)不為NULL,如果lParam參數(shù)為空的話,說(shuō)明該消息不是控件通知),如果它是,OnCommand()函數(shù)會(huì)試圖將消息映射到制造通知的控件;如果他不是一個(gè)控件通知(或者如果控件拒絕映射的消息)OnCommand()
就會(huì)調(diào)用OnCmdMsg()函數(shù)
6.OnCmdMsg()根據(jù)接收消息的類(lèi),OnCmdMsg()函數(shù)將在一個(gè)稱(chēng)為命令傳遞(Command Routing)的過(guò)程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類(lèi)是一個(gè)框架類(lèi),則命令和通知消息也被傳遞到視圖和文檔類(lèi),并為該類(lèi)尋找一個(gè)消息處理函數(shù)
MFC應(yīng)用程序創(chuàng)建窗口的過(guò)程
1.PreCreateWindow()該函數(shù)是一個(gè)重載函數(shù),在窗口被創(chuàng)建前,可以在該重載函數(shù)中改變
創(chuàng)建參數(shù)(可以設(shè)置窗口風(fēng)格等等)
2.PreSubclassWindow()這也是一個(gè)重載函數(shù),允許首先子分類(lèi)一個(gè)窗口
3.OnGetMinMaxInfo()該函數(shù)為消息響應(yīng)函數(shù),響應(yīng)的是WM_GETMINMAXINFO消息,允許設(shè)置窗口的最大或者最小尺寸
4.OnNcCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_NCCREATE消息,發(fā)送消息以告
訴窗口的客戶區(qū)即將被創(chuàng)建
5.OnNcCalcSize()該函數(shù)也是消息響應(yīng)函數(shù),響應(yīng)WM_NCCALCSIZE消息,作用是允許改
變窗口客戶區(qū)大小
6.OnCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送消息告訴一個(gè)
窗口已經(jīng)被創(chuàng)建
7.OnSize()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送該消息以告訴該窗口
大小已經(jīng)發(fā)生變化
8.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息說(shuō)明窗口在移動(dòng)
9.OnChildNotify()該函數(shù)為重載函數(shù),作為部分消息映射被調(diào)用,告訴父窗口即將被告知一
個(gè)窗口剛剛被創(chuàng)建
MFC應(yīng)用程序關(guān)閉窗口的順序(非模態(tài)窗口)
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_CLOSE消息,當(dāng)關(guān)閉按鈕被單擊的時(shí)候發(fā)送
此消息
2.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_DESTROY消息,當(dāng)一個(gè)窗口將被銷(xiāo)毀時(shí),發(fā)送此消息
3.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀
后發(fā)送此消息
4.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作,被CWnd調(diào)用
MFC應(yīng)用程序中打開(kāi)模式對(duì)話框的函數(shù)調(diào)用順序
1.DoModal()重載函數(shù),重載DoModal()成員函數(shù)
2.PreSubclassWindow()重載函數(shù),允許首先子分類(lèi)一個(gè)窗口
3.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被
創(chuàng)建
4.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
5.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息,以告訴窗口正在移動(dòng)
6.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息,以允許改變對(duì)話框
中控件的字體
7.OnInitDialog()消息響應(yīng)函數(shù),響應(yīng)WM_INITDIALOG消息,發(fā)送此消息以允許初始化對(duì)
話框中的控件,或者是創(chuàng)建新控件
8.OnShowWindow()消息響應(yīng)函數(shù),響應(yīng)WM_SHOWWINDOW消息,該函數(shù)被ShowWind
ow()函數(shù)調(diào)用
9.OnCtlColor()消息響應(yīng)函數(shù),響應(yīng)WM_CTLCOLOR消息,被父窗口發(fā)送已改變對(duì)話框或
對(duì)話框上面控件的顏色
10.OnChildNotify()重載函數(shù),作為WM_CTLCOLOR消息的結(jié)果發(fā)送
MFC應(yīng)用程序中關(guān)閉模式對(duì)話框的順序
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)WM_CLOSE消息,當(dāng)“關(guān)閉”按鈕被單擊的時(shí)候,該函數(shù)
被調(diào)用
2.OnKillFocus()消息響應(yīng)函數(shù),響應(yīng)WM_KILLFOCUS消息,當(dāng)一個(gè)窗口即將失去鍵盤(pán)輸
入焦點(diǎn)以前被發(fā)送
3.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_DESTROY消息,當(dāng)一個(gè)窗口即將被銷(xiāo)毀時(shí),被發(fā)
送
4.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀以后被
發(fā)送
5.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作被CWnd調(diào)用
打開(kāi)無(wú)模式對(duì)話框的順序
1.PreSubclassWindow()重載函數(shù),允許用戶首先子分類(lèi)一個(gè)窗口
2.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被
創(chuàng)建
3.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
4.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息以告訴窗口正在移動(dòng)
5.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息以允許改變對(duì)話框中
控件的字體
評(píng)論(1)|閱讀(570)|添加評(píng)論
第二篇:MFC應(yīng)用程序中處理消息的順序(模版)
MFC應(yīng)用程序中處理消息的順序
MFC應(yīng)用程序中處理消息的順序
1.AfxWndProc()該函數(shù)負(fù)責(zé)接收消息,找到消息所屬的CWnd對(duì)象,然后調(diào)用AfxCallWndProc
2.AfxCallWndProc()該函數(shù)負(fù)責(zé)保存消息(保存的內(nèi)容主要是消息標(biāo)識(shí)符和消息參數(shù))供應(yīng)用程序以后使用,然后調(diào)用WindowProc()函數(shù)
3.WindowProc()該函數(shù)負(fù)責(zé)發(fā)送消息到OnWndMsg()函數(shù),如果未被處理,則調(diào)用DefWindowProc()函數(shù)
4.OnWndMsg()該函數(shù)的功能首先按字節(jié)對(duì)消息進(jìn)行排序,對(duì)于WM_COMMAND消息,調(diào)用OnCommand()消息響應(yīng)函數(shù),對(duì)于WM_NOTIFY消息調(diào)用OnNotify()消息響應(yīng)函數(shù)。任何被遺漏的消息將是一個(gè)窗口消息。OnWndMsg()函數(shù)搜索類(lèi)的消息映像,以找到一個(gè)能處理任何窗口消息的處理函數(shù)。如果OnWndMsg()函數(shù)不能找到這樣的處理函數(shù)的話,則把消息返回到WindowProc()函數(shù),由它將消息發(fā)送給DefWindowProc()函數(shù)
5.OnCommand()該函數(shù)查看這是不是一個(gè)控件通知(lParam參數(shù)不為NULL,如果lParam參數(shù)為空的話,說(shuō)明該消息不是控件通知),如果它是,OnCommand()函數(shù)會(huì)試圖將消息映射到制造通知的控件;如果他不是一個(gè)控件通知(或者如果控件拒絕映射的消息)OnCommand()就會(huì)調(diào)用OnCmdMsg()函數(shù)
6.OnCmdMsg()根據(jù)接收消息的類(lèi),OnCmdMsg()函數(shù)將在一個(gè)稱(chēng)為命令傳遞(Command Routing)的過(guò)程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類(lèi)是一個(gè)框架類(lèi),則命令和通知消息也被傳遞到視圖和文檔類(lèi),并為該類(lèi)尋找一個(gè)消息處理函數(shù)
MFC應(yīng)用程序創(chuàng)建窗口的過(guò)程
1.PreCreateWindow()該函數(shù)是一個(gè)重載函數(shù),在窗口被創(chuàng)建前,可以在該重載函數(shù)中改變創(chuàng)建參數(shù)(可以設(shè)置窗口風(fēng)格等等)
2.PreSubclassWindow()這也是一個(gè)重載函數(shù),允許首先子分類(lèi)一個(gè)窗口
3.OnGetMinMaxInfo()該函數(shù)為消息響應(yīng)函數(shù),響應(yīng)的是WM_GETMINMAXINFO消息,允許設(shè)置窗口的最大或者最小尺寸
4.OnNcCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_NCCREATE消息,發(fā)送消息以告訴窗口的客戶區(qū)即將被創(chuàng)建
5.OnNcCalcSize()該函數(shù)也是消息響應(yīng)函數(shù),響應(yīng)WM_NCCALCSIZE消息,作用是允許改變窗口客戶區(qū)大小
6.OnCreate()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送消息告訴一個(gè)窗口已經(jīng)被創(chuàng)建
7.OnSize()該函數(shù)也是一個(gè)消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送該消息以告訴該窗口大小已經(jīng)發(fā)生變化
8.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息說(shuō)明窗口在移動(dòng)
9.OnChildNotify()該函數(shù)為重載函數(shù),作為部分消息映射被調(diào)用,告訴父窗口即將被告知一個(gè)窗口剛剛被創(chuàng)建
MFC應(yīng)用程序關(guān)閉窗口的順序(非模態(tài)窗口)
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_CLOSE消息,當(dāng)關(guān)閉按鈕被單擊的時(shí)候發(fā)送此消息
2.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_DESTROY消息,當(dāng)一個(gè)窗口將被銷(xiāo)毀時(shí),發(fā)送此消息
3.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)窗口的WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀后發(fā)送此消息
4.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作,被CWnd調(diào)用MFC應(yīng)用程序中打開(kāi)模式對(duì)話框的函數(shù)調(diào)用順序
1.DoModal()重載函數(shù),重載DoModal()成員函數(shù)
2.PreSubclassWindow()重載函數(shù),b31.org 允許首先子分類(lèi)一個(gè)窗口
3.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被創(chuàng)建
4.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
5.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息,以告訴窗口正在移動(dòng)
6.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息,以允許改變對(duì)話框中控件的字體
7.OnInitDialog()消息響應(yīng)函數(shù),響應(yīng)WM_INITDIALOG消息,發(fā)送此消息以允許初始化對(duì)話框中的控件,或者是創(chuàng)建新控件
8.OnShowWindow()消息響應(yīng)函數(shù),響應(yīng)WM_SHOWWINDOW消息,該函數(shù)被ShowWindow()函數(shù)調(diào)用
9.OnCtlColor()消息響應(yīng)函數(shù),響應(yīng)WM_CTLCOLOR消息,被父窗口發(fā)送已改變對(duì)話框或?qū)υ捒蛏厦婵丶念伾?/p>
10.OnChildNotify()重載函數(shù),作為WM_CTLCOLOR消息的結(jié)果發(fā)送
MFC應(yīng)用程序中關(guān)閉模式對(duì)話框的順序
1.OnClose()消息響應(yīng)函數(shù),響應(yīng)WM_CLOSE消息,當(dāng)“關(guān)閉”按鈕被單擊的時(shí)候,該函數(shù)被調(diào)用
2.OnKillFocus()消息響應(yīng)函數(shù),響應(yīng)WM_KILLFOCUS消息,當(dāng)一個(gè)窗口即將失去鍵盤(pán)輸入焦點(diǎn)以前被發(fā)送
3.OnDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_DESTROY消息,當(dāng)一個(gè)窗口即將被銷(xiāo)毀時(shí),被發(fā)送
4.OnNcDestroy()消息響應(yīng)函數(shù),響應(yīng)WM_NCDESTROY消息,當(dāng)一個(gè)窗口被銷(xiāo)毀以后被發(fā)送
5.PostNcDestroy()重載函數(shù),作為處理OnNcDestroy()函數(shù)的最后動(dòng)作被CWnd調(diào)用打開(kāi)無(wú)模式對(duì)話框的順序
1.PreSubclassWindow()重載函數(shù),允許用戶首先子分類(lèi)一個(gè)窗口
2.OnCreate()消息響應(yīng)函數(shù),響應(yīng)WM_CREATE消息,發(fā)送此消息以告訴一個(gè)窗口已經(jīng)被創(chuàng)建
3.OnSize()消息響應(yīng)函數(shù),響應(yīng)WM_SIZE消息,發(fā)送此消息以告訴窗口大小發(fā)生變化
4.OnMove()消息響應(yīng)函數(shù),響應(yīng)WM_MOVE消息,發(fā)送此消息以告訴窗口正在移動(dòng)
5.OnSetFont()消息響應(yīng)函數(shù),響應(yīng)WM_SETFONT消息,發(fā)送此消息以允許改變對(duì)話框中控件的字體
以上這些的執(zhí)行都是按給定的順序執(zhí)行!
只有清楚的了解應(yīng)用程序的執(zhí)行順序,才能在編寫(xiě)代碼的時(shí)候知道,在什么時(shí)候應(yīng)該執(zhí)行什么,以及在什么地方該處理什么!新濠天地娛樂(lè)城66bb.org
第三篇:MFC消息映射機(jī)制分析論文
摘 要:MFC以層次結(jié)構(gòu)組織起來(lái),比較龐雜,尤其是它的消息映射機(jī)制,更是涉及到很多底層的東西。本文通過(guò)對(duì)整個(gè)消息映射機(jī)制進(jìn)行系統(tǒng)的 分析,可以幫助程序開(kāi)發(fā)人員更好地了解MFC,進(jìn)行可視化編程。
關(guān)鍵詞:消息驅(qū)動(dòng);消息映射;MFC 程序設(shè)計(jì)引言
微軟公司提供的MFC基本類(lèi)庫(kù)(Microsoft Foundation Classes),是進(jìn)行可視化編程時(shí)使用最為流行的一個(gè)類(lèi)庫(kù)。MFC封裝了大部分Windows ApI函數(shù)和Windows控件,使得程序的開(kāi)發(fā)變得簡(jiǎn)單,極大的縮短了程序的開(kāi)發(fā)周期。MFC獨(dú)創(chuàng)的Document/View框架結(jié)構(gòu),能夠?qū)⒐芾頂?shù)據(jù)的代碼和顯示數(shù)據(jù)的程序代碼分開(kāi),并且設(shè)計(jì)了一套方便的消息映射和命令傳遞機(jī)制,方便程序員的開(kāi)發(fā)使用。其中消息映射機(jī)制本身比較龐大和復(fù)雜,對(duì)它的分析和了解無(wú)疑有助于我們寫(xiě)出更為合理的高效的程序。這里我們分析一下MFC的消息映射機(jī)制,以了解MFC是如何對(duì)Windows的消息加以封裝,方便用戶的開(kāi)發(fā)。SDK下的消息機(jī)制實(shí)現(xiàn)
首先,簡(jiǎn)單回顧一下SDK下我們是如何進(jìn)行Windows的程序開(kāi)發(fā)的。Windows程序的運(yùn)行是依靠外部發(fā)生的事件來(lái)驅(qū)動(dòng)的,事件由操作系統(tǒng)捕捉,以消息的形式進(jìn)入消息隊(duì)列,然后通過(guò)消息循環(huán)從隊(duì)列中不斷取出消息,送到對(duì)應(yīng)的窗口過(guò)程里處理。相對(duì)于DOS程序,Windows是以WinMain作為程序的入口點(diǎn),以下就是一個(gè)簡(jiǎn)化的Win32程序的主體,通過(guò)while語(yǔ)句實(shí)現(xiàn)消息循環(huán):
WinMain(…)
{
MSG msg;
RegisterClass(…);// 注冊(cè)窗口類(lèi)
CreateWindow(…);// 創(chuàng)建窗口
ShowWindow(…);// 顯示窗口
UpdateWindow(…);
While(GetMessage(&msg,…)){ // 消息循環(huán)
TranslateMessage(…);
DispatchMessage(…);
}
return msg.wparam;
}
其中,msg代表消息,程序是通過(guò)GetMessage函數(shù)從和某個(gè)線程相對(duì)應(yīng)的消息隊(duì)列里面把消息取出來(lái)并放到消息變量msg里面。然后TranslateMessage函數(shù)用來(lái)把鍵盤(pán)消息轉(zhuǎn)化并放到響應(yīng)的消息隊(duì)列里面,最后DispatchMessage函數(shù)把消息分發(fā)到相關(guān)的窗口過(guò)程去處理。窗口過(guò)程根據(jù)消息的類(lèi)型對(duì)不同的消息進(jìn)行相關(guān)的處理。在SDK編程過(guò)程中,用戶需要在窗口過(guò)程中分析消息的類(lèi)型及其參數(shù)的含義,然后做不同的處理,相對(duì)比較麻煩;而MFC把消息調(diào)用的過(guò)程給封裝起來(lái),使用戶能夠通過(guò)ClassWizard方便的使用和處理Windows的各種消息。MFC中的消息映射機(jī)制
在MFC的框架結(jié)構(gòu)下,“消息映射”是通過(guò)巧妙的宏定義,形成一張消息映射表格來(lái)進(jìn)行的。這樣一旦消息發(fā)生,F(xiàn)ramework就可以根據(jù)消息映射表格來(lái)進(jìn)行消息映射和命令傳遞。
首先在需要進(jìn)行消息處理的類(lèi)的頭文件(.H)里,都會(huì)含有DECLARE_MESSAGE_MAp()宏,聲明該類(lèi)擁有消息映射表格:
class CscribbleDoc:public Cdocument
{
…
DECLARE_MESSAGE_MAp()
};
然后在類(lèi) 應(yīng)用 程序文件(.Cpp)實(shí)現(xiàn)這一表格
BEGIN_MESSAGE_MAp(CInheritClass, CBaseClass)
//{{AFX_MSG_MAp(CInheritClass)
ON_COMMAND(ID_EDIT_COpY,OnEditCopy)
………
//}}AFX_MSG_MAp
END_MESSAGE_MAp()
----這里主要進(jìn)行消息映射的實(shí)現(xiàn),把它和消息處理函數(shù)聯(lián)系在一起。其中出現(xiàn)三個(gè)宏,第一個(gè)宏是BEGIN_MESSAGE_MAp有兩個(gè)參數(shù),分別是擁有消息表格的類(lèi),及其父類(lèi)。第二個(gè)宏是ON_COMMAND,指定命令消息的處理函數(shù)名稱(chēng)。第三個(gè)宏是END_MESSAGE_MAp()作為結(jié)尾符號(hào)。中間的奇怪符號(hào)//}}和//{{,是ClassWizard產(chǎn)生的,對(duì)程序無(wú) 影響。
觀察DECLARE_MESSAGE_MAp的定義:
#define DECLARE_MESSAGE_MAp()
private:
static const AFX_MESSAGE_ENTRY _messageEntries[];
protected:
static AFX_DATA const AFX_MSGMAp messageMap;
virtual const AFX_MSGMAp* GetMessageMap()const;
里面又包含了MFC新定義的兩個(gè)數(shù)據(jù)結(jié)構(gòu),如下:
AFX_MSGMAp_ENTRY
struct AFX_MSGMAp_ENTRY
{
UINT nMessage;// windows message
UINT nCode;// control code or WM_NOTIFY code
UINT nID;// control ID(or 0 for windows messages)
UINT nLastID;// used for entries specifying a range of control id's
UINT nSig;// signature type(action)or pointer to message #
AFX_pMSG pfn;// routine to call(or special value)
};
和AFX_MSGMAp
struct AFX_MSGMAp
{
const AFX_MSGMAp* pBaseMap;
const AFX_MSGMAp_ENTRY* lpEntries;
};
其中AFX_MSGMAp_ENTRY結(jié)構(gòu)包含了一個(gè)消息的所有相關(guān)信息,而AFX_MSGMAp主要作用有兩個(gè),一是用來(lái)得到基類(lèi)的消息映射入口地址。二是得到本身的消息映射入口地址。
實(shí)際上,MFC把所有的消息一條條填入到AFX_MSGMAp_ENTRY結(jié)構(gòu)中去,形成一個(gè)數(shù)組,該數(shù)組存放了所有的消息和與它們相關(guān)的參數(shù)。同時(shí)通過(guò)AFX_MSGMAp能得到該數(shù)組的首地址,同時(shí)得到基類(lèi)的消息映射入口地址。當(dāng)本身對(duì)該消息不響應(yīng)的時(shí)候,就可以上溯到基類(lèi)的消息映射表尋找對(duì)應(yīng)的消息響應(yīng)。
現(xiàn)在我們來(lái)分析MFC是如何讓窗口過(guò)程來(lái)處理消息的,實(shí)際上所有MFC的窗口類(lèi)都通過(guò)鉤子函數(shù)_AfxCbtFilterHook截獲消息,并且在鉤子函數(shù)_AfxCbtFilterHook中把窗口過(guò)程設(shè)定為AfxWndproc。原來(lái)的窗口過(guò)程保存在成員變量m_pfnSuper中。
在MFC框架下,一般一個(gè)消息的處理過(guò)程是這樣的。
(1)函數(shù)AfxWndproc接收Windows操作系統(tǒng)發(fā)送的消息。
(2)函數(shù)AfxWndproc調(diào)用函數(shù)AfxCallWndproc進(jìn)行消息處理,這里一個(gè)進(jìn)步是把對(duì)句柄的操作轉(zhuǎn)換成對(duì)CWnd對(duì)象的操作。
(3)函數(shù)AfxCallWndproc調(diào)用CWnd類(lèi)的 方法 Windowproc進(jìn)行消息處理。
(4)Windowproc調(diào)用OnWndMsg進(jìn)行正式的消息處理,即把消息派送到相關(guān)的方法中去處理。在CWnd類(lèi)中都保存了一個(gè)AFX_MSGMAp的結(jié)構(gòu),而在AFX_MSGMAp結(jié)構(gòu)中保存有所有我們用ClassWizard生成的消息的數(shù)組的入口,我們把傳給OnWndMsg的message和數(shù)組中的所有的message進(jìn)行比較,找到匹配的那一個(gè)消息。實(shí)際上系統(tǒng)是通過(guò)函數(shù)AfxFindMessageEntry來(lái)實(shí)現(xiàn)的。找到了那個(gè)message,實(shí)際上我們就得到一個(gè)AFX_MSGMAp_ENTRY結(jié)構(gòu),而我們?cè)谏厦嬉呀?jīng)提到AFX_MSGMAp_ENTRY保存了和該消息相關(guān)的所有信息,其中主要是消息的動(dòng)作標(biāo)識(shí)和相關(guān)的執(zhí)行函數(shù)。然后我們就可以根據(jù)消息的動(dòng)作標(biāo)識(shí)調(diào)用相關(guān)的執(zhí)行函數(shù),而這個(gè)執(zhí)行函數(shù)實(shí)際上就是通過(guò)ClassWizard在類(lèi)實(shí)現(xiàn)中定義的一個(gè)方法。這樣就把消息的處理轉(zhuǎn)化到類(lèi)中的一個(gè)方法的實(shí)現(xiàn)上。
(5)如果OnWndMsg方法沒(méi)有對(duì)消息進(jìn)行處理的話,就調(diào)用DefWindowproc對(duì)消息進(jìn)行處理。這是實(shí)際上是調(diào)用原來(lái)的窗口過(guò)程進(jìn)行缺省的消息處理。所以如果正常的消息處理的話,MFC窗口類(lèi)是完全脫離了原來(lái)的窗口過(guò)程,用自己的一套體系結(jié)構(gòu)實(shí)現(xiàn)消息的映射和處理。即先調(diào)用MFC窗口類(lèi)掛上去的窗口過(guò)程,再調(diào)用原先的窗口過(guò)程。用戶面對(duì)的消息參數(shù)將不再是固定的wparam和lparam,而是和消息類(lèi)型具體相關(guān)的參數(shù)。比如和消息WM_LButtonDown相對(duì)應(yīng)的方法OnLButtonDown的兩個(gè)參數(shù)是nFlags和point。nFlags表示在按下鼠標(biāo)左鍵的時(shí)候是否有其他虛擬鍵按下,point更簡(jiǎn)單,就是表示鼠標(biāo)的位置。同時(shí)MFC窗口類(lèi)消息傳遞中還提供了兩個(gè)函數(shù),分別為WalkpreTranslateTree和preTranslateMessage。我們知道利用MFC框架生成的程序,都是從CWinApp開(kāi)始執(zhí)行的,而CWinapp實(shí)際繼承了CWinThread類(lèi)。在CWinThread的運(yùn)行過(guò)程中會(huì)調(diào)用窗口類(lèi)中的WalkpreTranslateTree方法。而WalkpreTranslateTree方法實(shí)際上就是從當(dāng)前窗口開(kāi)始查找愿意進(jìn)行消息翻譯的類(lèi),直到找到窗口沒(méi)有父類(lèi)為止。在WalkpreTranslateTree方法中調(diào)用了preTranslateMessage方法。實(shí)際上preTranslateMessage最大的好處是我們?cè)谙⑻幚砬翱梢栽谶@個(gè)方法里面先做一些事情。舉一個(gè)簡(jiǎn)單的例子,比如我們希望在一個(gè)CEdit對(duì)象里,把所有的輸入的字母都以大寫(xiě)的形式出現(xiàn)。我們只需要在preTranslateMessage方法中判斷message是否為WM_CHAR,如果是的話,把wparam(表示鍵值)由小寫(xiě)字母的值該為大寫(xiě)字母的值就實(shí)現(xiàn)了這個(gè)功能。小結(jié)
MFC通過(guò)巧妙的宏定義把消息調(diào)用的過(guò)程給封裝起來(lái),使用戶能夠通過(guò)ClassWizard方便的使用和處理Windows的各種消息。通過(guò)對(duì)MFC消息映射機(jī)制的分析,不僅能夠使我們更好的使用MFC類(lèi)庫(kù),同時(shí),對(duì)于我們自己設(shè)計(jì)程序框架和類(lèi),無(wú)疑也有相當(dāng)大的幫助。
參考 文獻(xiàn) :
[1] 侯俊杰 著,深入淺出MFC(第2版)[M].湖北:華中 科技 大學(xué)出版社,2001.5
[2] David J.Kruglinski著,Visual C 技術(shù)內(nèi)幕(第五版)[M].北京:北京希望 電子 出版社,2001.1
第四篇:MFC處理繪圖
(一)簡(jiǎn)單的圖形輸出、點(diǎn): pDC->SetPixel(Cpoint(200,200),RGB(255,0,0,));// 在 [200,200] 的位置畫(huà)一個(gè)紅點(diǎn)2、線: pDC->MoveTo(0,0);// 直線起點(diǎn)的坐標(biāo)為(0,0)
pDC->LineTo(100,100)// 從起點(diǎn)(0,0)到終點(diǎn)(100,100)畫(huà)一條直線、矩形: Crect rect(0,0,100,100);
pDC->Rectangle(&rect);// 畫(huà)一個(gè)長(zhǎng) 100,寬 100 的矩形、圓和橢圓:
Crect rect(0,0,100,100);
pDC->Ellipse(&rect);
Crect rect(0,0,50,100);
pDC->Ellipse(&rect);、多邊形:
CPoint poly[4];
poly[0]=CPoint(0,0);
poly[1]=CPoint(50,50);
poly[2]=Cpoint(50,100);
poly[3]=Cpoint(0,50);
pDC->Polygon(poly,4);
(二)庫(kù)存對(duì)象
庫(kù)存對(duì)象是由操作系統(tǒng)維護(hù)的用于繪制屏幕的常用對(duì)象,包括庫(kù)存畫(huà)筆、畫(huà)刷、字體等。使用 SelectStockObject()函數(shù)可以直接選擇庫(kù)存對(duì)象,修改系統(tǒng)默認(rèn)值。
例如,在視圖中選用畫(huà)筆和畫(huà)刷庫(kù)存對(duì)象來(lái)畫(huà)圖。
Void Cexam3_3View::OnDraw(CDC*pDC)
{
Cexam3_2Doc*pDoc=GetDocument();
CRect rect;
Rect.SetRect(Cpoint(0,0),Cpoint(200,200));
pDC->SelectStockObject(WHITE_PEN);// 選用白色畫(huà)筆
pDC->SelectStockObject(GRAY_BRUSH);// 選用灰色畫(huà)刷
pDC->Rectangle(rect);
pDC->MoveTo(0,0);
pDC->LineTo(200,200);
pDC->MoveTo(0,200);
pDC->LineTo(200,0);
}
(三)創(chuàng)建和使用自定義畫(huà)刷和畫(huà)筆、創(chuàng)建 CPen 的的方法:
?定義時(shí)直接創(chuàng)建
Cpen MyPen(PS_SOLID,2,RGB(255,0,0));
(2)定義 Cpen 對(duì)象,再調(diào)用 CreatePen()函數(shù)
Cpen pen;
Pen.CreatePen(PS_SOLID,2,RGB(255,0,0));、創(chuàng)建畫(huà)刷的方法:
(1)創(chuàng)建實(shí)心畫(huà)刷的 CreateSolidBrush()函數(shù)
Cbrush bs;
Bs.CreateSolidBrush(RGB(255,0,0));
(2)創(chuàng)建帶陰影的畫(huà)刷的 CreateHatchBrush()函數(shù)
Bs.CreateHatchBrush(HS_CROSS,RGB(255,0,0));// 創(chuàng)建一個(gè)帶十字陰影的紅色畫(huà)刷
(3)創(chuàng)建位圖畫(huà)刷的 CreatePatternBrush()函數(shù)
本函數(shù)的應(yīng)用如下:
CbitMap bmp;
Bmp.LoadBitMap(IDB_MYBITMAP);
Cbrush bs;
Bs.CreatePatternBrush(&bmp);
例4_
3、在視圖中繪制三個(gè)圖形,一個(gè)用陰影風(fēng)格的畫(huà)刷畫(huà)的橢圓形,一個(gè)用深蘭色實(shí)心畫(huà)刷畫(huà)的圓角矩形,一個(gè)用淺灰色畫(huà)刷畫(huà)的餅形。
void CExam4_3View::OnDraw(CDC* pDC)
{
CExam4_3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//設(shè)置影象模式
pDC->SetMapMode(MM_ANISOTROPIC);
CPen NewPen,OldPen;
//將畫(huà)筆選入設(shè)備上下文
NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255));
//創(chuàng)建深藍(lán)色實(shí)心畫(huà)刷
pDC->SelectObject(&NewPen);
CBrush NewBrush1,NewBrush2;
//將畫(huà)刷選入設(shè)備上下文
NewBrush1.CreateSolidBrush(RGB(0,0,128));
//繪制圓角矩形
pDC->RoundRect(200,100,330,200,15,15);
//將庫(kù)存對(duì)象淺灰畫(huà)刷選入設(shè)備上下文
pDC->SelectStockObject(LTGRAY_BRUSH);
//繪制餅圖
pDC->Pie(350,50,420,150,360,50,400,50);
//創(chuàng)建陰影畫(huà)刷
NewBrush2.CreateHatchBrush(HS_DIAGCROSS,RGB(125,125,125));
pDC->SelectObject(NewBrush2);
//繪制橢圓
pDC->Ellipse(50,50,150,150);
}
第五篇:MFC實(shí)踐總結(jié)
mfc編程實(shí)驗(yàn)總結(jié)報(bào)告 知識(shí)總結(jié)+個(gè)人心得 2011年暑期mfc編程實(shí)驗(yàn)報(bào)告 mfc編程實(shí)驗(yàn)個(gè)人總結(jié)報(bào)告
一、mfc類(lèi)、函數(shù)等知識(shí)小結(jié):
1、settimer(1, m_intlevel, null);在mfc程序中settimer被封裝在cwnd類(lèi)中,調(diào)用就不用指定窗口句柄了于是settimer函數(shù)的原型變?yōu)椋? uint settimer(uint nidevent,uint nelapse,void(callback export *lpfntimer)(hwnd,uint ,yint ,dword))當(dāng)使用settimer函數(shù)的時(shí)候,就會(huì)生成一個(gè)計(jì)時(shí)器。函數(shù)中nidevent指的是計(jì)時(shí)器的標(biāo)識(shí),也就是名字。nelapse指的是時(shí)間間隔,也就是每隔多長(zhǎng)時(shí)間觸發(fā)一次事件。第三個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),在這個(gè)函數(shù)里,放入你想要做的事情的代碼,你可以將它設(shè)定為null,也就是使用系統(tǒng)默認(rèn)的回調(diào)函數(shù),系統(tǒng)默認(rèn)認(rèn)的是ontime函數(shù)。這個(gè)函數(shù)怎么生成的呢?你需要在需要計(jì)時(shí)器的類(lèi)的生成ontime函數(shù):在classwizard里,選擇需要計(jì)時(shí)器的類(lèi),添加wm_time消息映射,就自動(dòng)生成ontime函數(shù)了。然后在函數(shù)里添加代碼,讓代碼實(shí)現(xiàn)功能。每隔一段時(shí)間就會(huì)自動(dòng)執(zhí)行一次。例: settimer(1,1000,null);1:計(jì)時(shí)器的名稱(chēng);
1000:時(shí)間間隔,單位是毫秒; null:使用ontime函數(shù)。
當(dāng)不需要計(jì)時(shí)器的時(shí)候調(diào)用killtimer(nidevent);例如:killtimer(1);killtimer(1);
2、typedef struct{};(1)struct{ int x;int y;}test1;好,定義了 結(jié)構(gòu) test1,test1.x 和 test1.y 可以在語(yǔ)句里用了。(2)struct test {int x;int y;}test1;定義了結(jié)構(gòu) test1,test1.x 和 test1.y 可以在語(yǔ)句里用了。
與(1)比,省寫(xiě) 了 test(3)typedef struct test {int x;int y;}text1,text2;此處時(shí)說(shuō)了這種結(jié)構(gòu)體(類(lèi)型)別名 叫 text1 或叫 text2,而不是定義了結(jié)構(gòu)體變量.真正在語(yǔ)句里用,還要寫(xiě): text1 test1;//定義結(jié)構(gòu)體變量
然后好用 test1.x test1.y 或?qū)?text2 test1;//定義結(jié)構(gòu)體變量
然后好用 test1.x test1.y
3、invalidate();//讓客戶區(qū)無(wú)效,即時(shí)重新繪制客戶區(qū) void invalidate(bool berase = true);該函數(shù)的作用是使整個(gè)窗口客戶區(qū)無(wú)效。窗口的客戶區(qū)無(wú)效意味著需要重繪,例如,如果一個(gè)被其它窗口遮住的窗口變成了前臺(tái)窗口,那么原來(lái)被遮住的部分就是無(wú)效的,需要重繪。這時(shí)windows會(huì)在應(yīng)用程序的消息隊(duì)列中放置wm_paint消息。mfc為窗口類(lèi)提供了wm_paint的消息處理函數(shù)onpaint,onpaint負(fù)責(zé)重繪窗口。視圖類(lèi)有一些例外,在視圖類(lèi)的onpaint函數(shù)中調(diào)用了ondraw函數(shù),實(shí)際的重繪工作由ondraw來(lái)完成。參數(shù)berase為true時(shí),重繪區(qū)域內(nèi)的背景將被擦除,否則,背景將保持不變。
4、cdc::rectangle(左上x(chóng),左上y,右下x,右下y);使用該函數(shù)畫(huà)一個(gè)矩形,可以用當(dāng)前的畫(huà)筆畫(huà)矩形輪廓,用當(dāng)前畫(huà)刷進(jìn)行填充。
函數(shù)原型:bool rectangle(hdc hdc, int nleftrect, int ntoprect, int nrightrect, int nbottomrect);
hdc:設(shè)備環(huán)境句柄。
nleftrect:指定矩形左上角的邏輯x坐標(biāo)。ntoprect:指定矩形左上角的邏輯y坐標(biāo)。nrightrect:指定矩形右下角的邏輯x坐標(biāo)。nbottomrect:指定矩形右下角的邏輯y坐標(biāo)。
5、cbrush:: cbrush//畫(huà)刷類(lèi) eg:cbrush brushstick(rgb(127, 127, 127));四種構(gòu)造函數(shù): cbrush();cbrush(colorref crcolor);cbrush(int nindex, colorref crcolor);cbrush(cbitmap* pbitmap);參數(shù)說(shuō)明: crcolor指定畫(huà)刷的前景色(rgb方式)。如果畫(huà)刷是陰影線型的,則指定陰影線的顏色。nindex指定畫(huà)刷陰影線采用的風(fēng)格,取值如下: hs_bdiagonal45度的向下影線(從左到右)hs_cross水平和垂直方向以網(wǎng)格線作出陰影 hs_diagcross 45度的網(wǎng)格線陰影 hs_fdiagonal 45度的向上陰影線(從左到右)
hs_horizontal 水平的陰影線 hs_vertical 垂直的陰影線 pbitmap指向cbitmap對(duì)象的指針,該對(duì)象指定了畫(huà)刷要繪制的位
圖。
構(gòu)造函數(shù)說(shuō)明:
6、messagebox(game over!);messagebox(null,text,title,button);參數(shù)title:string類(lèi)型,指定消息對(duì)話框的標(biāo)題。text:指定消息對(duì)話框中顯示的消息,該參數(shù)可以是數(shù)值數(shù)據(jù)類(lèi)型、字符串或boolean值。icon:icon枚舉類(lèi)型,可選項(xiàng),指定要在該對(duì)話框左側(cè)顯示的圖標(biāo)。button:button枚舉類(lèi)型,可選項(xiàng),指定顯示在該對(duì)話框底部的按鈕。default:數(shù)值型,可選項(xiàng),指定作為缺省按鈕的按鈕編號(hào),按鈕編號(hào)自左向右依次計(jì)數(shù),缺省值為1,如果該參數(shù)指定的編號(hào)超過(guò)了顯示的按鈕個(gè)數(shù),那么messagebox()函數(shù)將使用缺省值返回值integer。函數(shù)執(zhí)行成功時(shí)返回用戶選擇的按鈕編號(hào)(例如1、2、3等),發(fā)生錯(cuò)誤時(shí)返回-1。如果任何參數(shù)的值為null,messagebox()函數(shù)返回null。
函數(shù)原型:
messagebox.show(text,title,messageboxbuttons,messageboxicon ,messageboxdefaultbuttons)參數(shù)說(shuō)明:
(1)text:必選項(xiàng),消息框的正文。
(2)title:可選項(xiàng),消息框的標(biāo)題。(3)messageboxbuttons:可選項(xiàng),消息框的按鈕設(shè)置,默認(rèn)只顯示【確定】按鈕。ok――確定 okcancel――確定和取消 abortretryignore――終止、重試和忽略 yesnocancel――是、否和取消 yesno――是和否 retrycancel――重試和取消
(4)messageboxicon:對(duì)話框中顯示的圖標(biāo)樣式,默認(rèn)不顯示任何圖標(biāo)。
question――問(wèn)號(hào) information、asterisk――i號(hào) error、stop、hand――錯(cuò)誤號(hào) warning、exclamation――!號(hào) none――不顯示任何圖標(biāo)
(5)messageboxdefaultbuttons:可選項(xiàng),對(duì)話框中默認(rèn)選中的按鈕設(shè)置。
defaultbutton1――第1個(gè)button是默認(rèn)按鈕 defaultbutton2――第2個(gè)button是默認(rèn)按鈕 defaultbutton3――第3個(gè)button是默認(rèn)按鈕
7、memcpy(拷貝目的地,拷貝對(duì)象,拷貝長(zhǎng)度);包含在頭文件#include
函數(shù)原型:
extern void *memcpy(void *destin, void *source, unsigned n);功能:
由source指向地址為起始地址的連續(xù)n個(gè)字節(jié)的數(shù)據(jù)復(fù)制到以destin指向地址為起始地址的空間內(nèi)。eg: int a=5,b=9;memcpy(a,b,sizeof(a));//將b按位拷給a;說(shuō)明:
1.source和destin所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向destin的指針。2.與strcpy相比,memcpy并不是遇到 主站蜘蛛池模板: 99re66在线观看精品免费| 精品亚洲一区二区三区在线播放| 亚洲中文字幕在线第六区| 亚洲综合网站久久久| 久久青草精品38国产| 四虎亚洲欧美成人网站| 狂野欧美激情性xxxx在线观看| 欧美精品中文字幕在线视| 少妇愉情理伦片丰满丰满| 丁香五香天堂网| 国产成人精品亚洲日本语言| 无码av高潮喷水无码专区线| 欧洲日本一线二线三线区本庄铃| 欧美性猛交xxxx乱大交蜜桃| 毛片免费视频| 亚洲色欲色欲欲www在线| 高清自拍亚洲精品二区| 97国产精华最好的产品亚洲| 国产精品一区二区av不卡| 九九精品超级碰视频| 97人妻熟女成人免费视频色戒| 日日碰狠狠添天天爽无码| 真人抽搐一进一出视频| 国产精品污www一区二区三区| 亚洲内射少妇av影院| 国产丰满麻豆videossexhd| 内射夜晚在线观看| 久久人人爽av亚洲精品| 欧美性猛交xxxx乱大交极品| 国产婷婷色一区二区三区| 国产精品不卡无码av在线播放| 精品h动漫无遮挡在线看中文| 国产乱子伦农村xxxx| 上司人妻互换hd无码中文| 少妇被黑人4p到惨叫在线观看| 午夜无码区在线观看| 久久视频这里只精品99| 藏春阁福利视频| 国产suv精品一区二区五| 人人超人人超碰超国产97超碰| 国产成人a∨麻豆精品|