=0);2.在類的聲明中添加消息處理函數(shù)的聲明?afx_msgvoidxxxx(WPARAMwParam,LPARAMlParam);3.在類的實現(xiàn)文件中">

vc_添加自定義消息及消息處理函數(shù)分5步及詳解

ID:47551629

大?。?0.37 KB

頁數(shù):6頁

時間:2019-09-19

vc_添加自定義消息及消息處理函數(shù)分5步及詳解_第1頁
vc_添加自定義消息及消息處理函數(shù)分5步及詳解_第2頁
vc_添加自定義消息及消息處理函數(shù)分5步及詳解_第3頁
vc_添加自定義消息及消息處理函數(shù)分5步及詳解_第4頁
vc_添加自定義消息及消息處理函數(shù)分5步及詳解_第5頁
資源描述:

《vc_添加自定義消息及消息處理函數(shù)分5步及詳解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、1.在要添加消息的類頭文件中定義宏?#defineWM_xxxWM_USER+n(n>=0);2.在類的聲明中添加消息處理函數(shù)的聲明?afx_msgvoidxxxx(WPARAMwParam,LPARAMlParam);3.在類的實現(xiàn)文件中消息映射部分添加消息映射??ON_MESSAGE(WM_xxx,xxxx);4.自己編寫消息處理函數(shù)。5.在要發(fā)送此消息的函數(shù)中調(diào)用函數(shù)BOOLPostMessage(?HWNDhWnd,?????//handleofdestinationwindow?UINTMsg,??????//messagetopost?W

2、PARAMwParam,?//firstmessageparameter?LPARAMlParam??//secondmessageparameter);把消息送到消息隊列中。最近在用VC2008做開發(fā),后來由于要用到消息的發(fā)送,而且需要自定義消息,在網(wǎng)上查找了很多例子,根據(jù)他們所說的,雖然大致都差不多,但是基本上沒有一個能完全做出來的。要知道VC編程有一個小地方出錯,都可能是個讓你頭暈?zāi)X脹的事情。經(jīng)過我后來不但探索,經(jīng)過改進之后,一點錯誤都沒有,現(xiàn)在貼出來供大家參考。??????1.先來個基本知識介紹SendMessage的基本結(jié)構(gòu)如下:SendM

3、essage(????HWNDhWnd,??//消息傳遞的目標窗口或線程的句柄。????UINTMsg,?//消息類別(這里可以是一些系統(tǒng)消息,也可以是自己定義,下文具體介紹,)????WPARAMwParam,//參數(shù)1(WPARAM其實是與UINT是同種類型的,??//在vc編譯器中右鍵有個“轉(zhuǎn)到WPARAM的定義”的選項可以查看。????LPARAMlParam);//參數(shù)2其中一些參數(shù)的由來如下://typedefunsignedintUINT;//typedefUINTWPARAM;//typedefLONGLPARAM;//typedef

4、LONGLRESULT;2.??SendMessage用法實例????例如可以用以下語句:voidCTScrollWinView::OnLButtonDblClk(UINTnFlags,CPointpoint)???????{????????????//TODO:在此添加消息處理程序代碼和/或調(diào)用默認值?????::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CHILDFRAMEDBCLK,0,0);?????CScrollView::OnLButtonDblClk(nFlags,point);???????}這是我

5、用VC2008下建立的一個多文檔選項卡式工程里面的一段代碼,是為了實現(xiàn)在子窗口雙擊后發(fā)送一個不帶參數(shù)的消息(其ID為WM_USER+1)給主窗口,如上為部分代碼,其中WM_CHILDFRAMEDBCLK是自定義的消息ID,AfxGetMainWnd()->m_hWnd是獲得主窗口(這里不能使用GetParent()->m_hWnd或者GetParentFrame()->m_hWnd,因為這是獲得父窗口,但父窗口不一定是主窗口,一定要注意,不然消息就會發(fā)錯導致接收不到,我這里卡了半天,后來在QQ群里一位大俠告訴我的,在此再感謝一下那位大俠);3.在接收

6、消息的窗體以及線程所在的頭文件里定義:#defineWM_CHILDFRAMEDBCLK?WM_USER+1???//dosomething4.然后接下來定義一個消息需要映射的函數(shù),如下:afx_msgLRESULTOnChlidFrameDBClick(WPARAMwParam,LPARAMlParam);注意格式必須是:兩個參數(shù)必不可少,返回類型一定為LRESULT,網(wǎng)上很多文章都忽略了這兩點,這也是網(wǎng)上文章普遍錯誤的地方。5.添加消息函數(shù)映射????ON_MESSAGE(WM_CHILDFRAMEDBCLK,OnChlidFrameDBClic

7、k)????注意這里必須是ON_MESSAGE,不能使用ON_COMMAND,前者主要針對用戶自定義消息,后者針對WM_COMMAND命令,比如菜單、工具欄等.6.實現(xiàn)消息函數(shù):我們在接收窗體里定義一個這樣的事情(過程),LRESULTCMainFrame::OnChlidFrameDBClick(WPARAMwParam,LPARAMlParam)??????{????????????CancelFullScreenWin();??//這里調(diào)用了一個使子窗口全屏的自寫函數(shù),我就不貼出來了,以后專題將的時候會提到??????return0;?????

8、?}?7.下面是部分代碼,要想搞清楚自定義消息發(fā)送只看這部分代碼就足夠了在MainFrm.h頭文件里定義了消

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。
关闭