找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3272|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MFC中自定義消息映射、循環(huán)機(jī)制

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:60266 發(fā)表于 2014-8-18 02:36 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

通過消息映射、數(shù)據(jù)同步等有效減低CPU使用率
MFC中自定義
消息映射、循環(huán)機(jī)制是Windows程序運(yùn)行的基本方式。
VC++ MFC 中有許多現(xiàn)成的消息句柄,可當(dāng)我們需要完成其它的任務(wù),需要自定義消息,
就遇到了一些困難。在MFC ClassWizard中不允許添加用戶自定義消息,所以我們必須手動(dòng)在程序中添加相應(yīng)代碼,以便可以象處理其它消息一樣處理自定義消息。

自定義消息的步驟如下:
(1)建立Single Document的MFC Application,工程名為:MyMessage
(2)自定義消息:
第一步:定義消息
在Resource.h中添加如下代碼:

//推薦用戶自定義消息至少是WM_USER+100,因?yàn)楹芏嘈驴丶惨褂肳M_USER消息。
#define WM_MY_MESSAGE (WM_USER+100)
第二步:聲明消息處理函數(shù)
選擇CMainFrame類中添加消息處理函數(shù)
在MainFrm.h文件中,類CMainFrame內(nèi),聲明消息處理函數(shù),代碼如下:

protect:
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
第三步:實(shí)現(xiàn)消息處理函數(shù)
在MainFrm.cpp文件中添加如下代碼:

LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
      //TODO: Add your message handle code
      return 0;
}
第四步:在CMainFrame類的消息塊中,使用ON_MESSAGE宏指令將消息映射到消息處理函數(shù)中

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
    //ON_REGISTERED_MESSAGE (WM_MY_MESSAGE,OnMyMessage)
END_MESSAGE_MAP()
如果用戶需要一個(gè)定義整個(gè)系統(tǒng)唯一的消息,可以調(diào)用SDK函數(shù)RegisterWindowMessage定義消息:
在Resource.h中將代碼

#define WM_MY_MESSAGE (WM_USER+100)
替換為:

static UINT WM_MY_MESSAGE=RegisterWindowMessage(_T("User"));
并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步驟同上。
注:如果仍然使用ON_MESSAGE宏指令,compile可以通過,但是無法響應(yīng)消息。
當(dāng)需要使用自定義消息時(shí),可以在相應(yīng)類中的函數(shù)中調(diào)用函數(shù)PostMessage或SendMessage發(fā)送消息PoseMessage(WM_MY_MESSAGE,O,O)。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表