亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C++ > 正文

VC/MFC中如何自定義消息

2020-05-23 14:24:19
字體:
供稿:網(wǎng)友

 定義一個(gè)自定義消息號(hào):const UINT WM_MYMESSAGE = WM_USER + n; // 自定義消息一般大于WM_USER,然后就可以為該消息添加映射了。

  afx_msg LRESULT OnMyMessage ( WPARAM wParam, LPARAM lParam );

  ON_MESSAGE ( WM_MYMESSAGE, OnMyMessage )

  LRESULT cxx::OnMyMessage ( WPARAM wParma, LPARAM lParam )

  {

  ...

  }

  如果該消息不需要返回值,也不需要參數(shù),那么可以使用宏ON_MESSAGE_VOID來映射

  afx_msg void OnMyMessage ();

  ON_MESSAGE_VOID ( WM_MYMESSAGE, OnMyMessage )

  void cxx::OnMyMessage ()

  {

  ...

  }

  復(fù)雜全面版本:

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

  第一步:定義消息。

  推薦用戶自定義消息至少是WM_USER+100,因?yàn)楹芏嘈驴丶惨褂肳M_USER消息。

  #define WM_MY_MESSAGE (WM_USER+100)

  第二步:實(shí)現(xiàn)消息處理函數(shù)。該函數(shù)使用WPRAM和LPARAM參數(shù)并返回LPESULT。

  LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)

  {

  // TODO: 處理用戶自定義消息

  ...

  return 0;

  }

  第三步:在類頭文件的AFX_MSG塊中說明消息處理函數(shù):

  class CMainFrame:public CMDIFrameWnd

  {

  ...

  // 一般消息映射函數(shù)

  protected:

  // {{AFX_MSG(CMainFrame)

  afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

  afx_msg void OnTimer(UINT nIDEvent);

  afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

  //}}AFX_MSG

  DECLARE_MESSAGE_MAP()

  }

  第四步:在用戶類的消息塊中,使用ON_MESSAGE宏指令將消息映射到消息處理函數(shù)中。

  BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

  //{{AFX_MSG_MAP(CMainFrame)

  ON_WM_CREATE()

  ON_WM_TIMER()

  ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

  //}}AFX_MSG_MAP

  END_MESSAGE_MAP()

  如果用戶需要一個(gè)定義整個(gè)系統(tǒng)唯一的消息,可以調(diào)用SDK函數(shù)RegisterWindowMessage定義消息:

  static UINT WM_MY_MESSAGE=RegisterWindowMessage(User);

  并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步驟同上。

  當(dāng)需要使用自定義消息時(shí),可以在相應(yīng)類中的函數(shù)中調(diào)用函數(shù)PostMessage或SendMessage發(fā)送消息PoseMessage(WM_MY_MESSAGE,O,O); 如果向其他進(jìn)程發(fā)送消息可通過如下方法發(fā)送消息:

  DWORD result;

  SendMessageTimeout(wnd->m_hWnd, // 目標(biāo)窗口

  WM_MY_MESSAGE, // 消息

  0, // WPARAM

  0, // LPARAM

  SMTO_ABORTIFHUNG |

  SMTO_NORMAL,

  TIMEOUT_INTERVAL,

  &result);

  以避免其它進(jìn)程如果被阻塞而造成系統(tǒng)死等狀態(tài)。

  可是如果需要向其它類(如主框架、子窗口、視類、對(duì)話框、狀態(tài)條、工具條或其他控件等)發(fā)送消息時(shí),上述方法顯得無(wú)能為力,而在編程過程中往往需要獲取其它類中的某個(gè)識(shí)別信號(hào),MFC框架給我們?cè)斐闪朔N種限制,但是可以通過獲取某個(gè)類的指針而向這個(gè)類發(fā)送消息,而自定義消息的各種動(dòng)作則在這個(gè)類中定義,這樣就可以自由自在的向其它類發(fā)送消息了。

  下面舉的例子敘述了向視類和框架類發(fā)送消息的方法:

  在主框架類中向視類發(fā)送消息:

  視類中定義消息:

  ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage) //定義消息映射

  視類定義消息處理函數(shù):

  // 消息處理函數(shù)

  LRESULT CMessageView::OnMyMessage(WPARAM wParam, LPARAM lParam)

  {

  // TODO: 處理用戶自定義消息

  ...

  return 0;

  }

  //發(fā)送消息的測(cè)試函數(shù)

  void CMainFrame::OnTest()

  {

  CView * active = GetActiveView();//獲取當(dāng)前視類指針

  if(active != NULL)

  active->PostMessage(WM_MY_MESSAGE,0,0);

  }

  在其它類中向視類發(fā)送消息:

  //發(fā)送消息的測(cè)試函數(shù)

  void CMainFrame::OnTest()

  {

  CMDIFrameWnd *pFrame;

  CMDIChildWnd *pChild;

  CView *pView;

  //獲取主窗口指針

  pFrame =(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

  // 獲取子窗口指針

  pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();

  //獲取視類指針

  pView = pChild->GetActiveView();

  if(pView != NULL)

  pView->PostMessage(WM_MY_MESSAGE,0,0);//發(fā)送消息

  }

  其余步驟同上。

  在視類中向主框架發(fā)送消息:

  首先在主框架中定義相關(guān)的消息,方法同上,然后在發(fā)送消息的函數(shù)中添加代碼如下

  //發(fā)送消息的測(cè)試函數(shù)

  void CMessageView::OnTest()

  {

  CFrameWnd * active = GetActiveFrame();//獲取當(dāng)前主窗口框架指針

  if(active != this)

  active->PostMessage(WM_MY_MESSAGE,0,0);

  return 0;

  }

  在其它類中向不同的類發(fā)送消息可依次方法類推,這樣我們的程序就可以的不受限制向其它類和進(jìn)程發(fā)送消息,而避免了種種意想不到的風(fēng)險(xiǎn)。

  下面一個(gè)例子程序?yàn)槎辔臋n程序里在一對(duì)話框中向視類發(fā)送消息,詳述了發(fā)送自定義消息的具體過程。

  實(shí)現(xiàn)步驟:

  第一步:在VC++中新建工程Message,所有ClassWizard步驟選項(xiàng)均為缺省,完成。

  第二步:在主菜單中添加測(cè)試菜單為調(diào)出對(duì)話框,在框架類中建立相應(yīng)函數(shù)OnTest()

  第三步:在資源中建立對(duì)話框,通過ClassWizard添加新類TestDialog,添加測(cè)試按鈕,

  在對(duì)話框類中建立相應(yīng)函數(shù)OnDialogTest()

  //通過對(duì)話框按鈕發(fā)送消息的函數(shù)

  void TestDialog::OnDialogTest()

  {

  CMDIFrameWnd *pFrame;

  CMDIChildWnd *pChild;

  CView *pView;

  //獲取主窗口指針

  pFrame =(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

  // 獲取子窗口指針

  pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();

  //獲取視類指針

  pView = pChild->GetActiveView();

  if(active != NULL)

  active->PostMessage(WM_MY_MESSAGE,0,0);//發(fā)送消息

  }

  在Message.h頭文件中添加如下語(yǔ)句:

  static UINT WM_MY_MESSAGE=RegisterWindowMessage(Message);

  第四步:在視類中添加自定義消息:

  在頭文件MessageView.h中添加消息映射

  protected:

  //{{AFX_MSG(CMessageView)

  //}}AFX_MSG

  afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //此行為添加代碼

  DECLARE_MESSAGE_MAP()

  在視類文件MessageView.cpp中的消息映射中添加自定義消息映射

  BEGIN_MESSAGE_MAP(CMessageView, CView)

  //{{AFX_MSG_MAP(CMessageView)

  //}}AFX_MSG_MAP

  // Standard printing commands

  ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage) //此行添加代碼定義唯一消息

  END_MESSAGE_MAP()

  添加相應(yīng)的0消息處理函數(shù)

  LRESULT CMessageView::OnMyMessage(WPARAM wParam, LPARAM lParam)

  {

  CRect rect;

  GetClientRect(&rect);

  InvalidateRect(&rect);

  test=!test;

  return 0;

  }

  在MessageView.h中添加布爾變量 public:BOOL test;

  在視類構(gòu)造函數(shù)中初始化 test變量:test=FALSE;

  修改CMessageView::OnDraw()函數(shù)

  void CMessageView::OnDraw(CDC* pDC)

  {

  CMessageDoc* pDoc = GetDocument();

  ASSERT_VALID(pDoc);

  // 以下程序顯示消息響應(yīng)效果

  if(test)

  pDC->TextOut(0,0,消息響應(yīng)!);

  }

  第五步:顯示測(cè)試對(duì)話框

  在MainFrame類中包含對(duì)話框頭文件:

  #include TestDialog.h;

  OnTest()函數(shù)中添加代碼

  void CMainFrame::OnTest()

  {

  TestDialog dialog;

  dialog.DoModal();

  }

  運(yùn)行程序,在測(cè)試菜單打開對(duì)話框,點(diǎn)擊測(cè)試按鈕即可看到結(jié)果。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
久久一区二区三区av| 欧美麻豆久久久久久中文| 亚洲精品在线三区| 国产精品久久久亚洲第一牛牛| 中文字幕高清av| 亚洲综合福利| 国产精品zjzjzj在线观看| 成人精品视频网站| 中文字幕人妻无码系列第三区| 日本xxxxxxxxx18| 欧美三级 欧美一级| 欧美黑人性受xxxx喷水| 国产精品吊钟奶在线| 成人黄色国产精品网站大全在线免费观看| hbad中文字幕| 国内自拍亚洲| 我和岳m愉情xxxⅹ视频| 国产一区二区视频在线看| 三年中文在线观看免费大全中国| 亚洲国产精品女人| 亚洲欧美另类动漫| 亚洲一区在线视频观看| 最近97中文超碰在线| 亚洲精品电影网| 亚洲.国产.中文慕字在线| 精品999在线| 欧美黑人xxxxx| 99这里都是精品| 午夜精品久久| 国产精品电影久久久久电影网| 国产一区在线播放| 日本不卡一区二区三区在线观看| 精品国产一区二区精华| 又黄又爽无遮挡| 葵司免费一区二区三区四区五区| 一本色道久久综合精品竹菊| 国产视频久久久久久| 欧美三级黄美女| 亚洲综合色在线观看| 色综合视频一区中文字幕| 国产精品久久久久久一区二区| 羞羞答答国产精品www一本| jizz亚洲女人高潮大叫| 欧美黄色www| 中文字幕一区二区三区中文字幕| 精品国产乱码91久久久久久网站| 日韩毛片在线| 97在线视频免费| 亚洲av无码片一区二区三区| 日韩中文字幕视频在线| 两个人免费视频观看日本| 精品乱人伦一区二区三区| www.久久色.com| 中文字幕巨乱亚洲| 国产成人手机高清在线观看网站| 国内精品视频久久| 狠狠色综合网站久久久久久久| 精品视频在线你懂得| 精品人妻一区二区三区日产| 日韩一级免费在线观看| 日韩不卡在线观看日韩不卡视频| 在线免费看污网站| 午夜视频精品| 亚洲视频在线免费观看| 成人写真福利网| 日韩视频在线观看| 韩剧1988免费观看全集| 理论片大全免费理伦片| 激情五月激情综合网| 四虎影视免费看电影| 1313精品午夜理伦电影| 亚洲第一精品夜夜躁人人躁| 亚洲激情第一区| 精品国产91亚洲一区二区三区婷婷| 日韩精品永久网址| 成人短视频在线观看免费| 手机毛片在线观看| 综合久久中文字幕| 国产欧美日韩专区发布| 一区二区成人网| 欧美激情一区二区三区高清视频| 国产乱子轮精品视频| 99在线小视频| 一区二区三区四区在线不卡高清| 亚洲 欧美综合在线网络| 中文字幕2022永久在线| 亚洲国产精品成人va在线观看| 国产蜜臀av在线一区二区三区| 日本免费a视频| 日本一极黄色片| 一区在线电影| 久久国内精品一国内精品| 久久久久国产精品免费免费搜索| 91成人小视频| 在线成人av观看| 国产精品mp4| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品一区二区三区香蕉| 久久女同性恋中文字幕| 成人性生交大片免费看视频r| 91片在线免费观看| 在线视频日韩一区| 色视频www在线播放国产| 久草在线免费福利| 久久爱www成人| 久久激情电影| 蜜桃免费网站一区二区三区| 成人激情视频在线| 亚洲大奶少妇| 日韩欧美中文字幕一区| 亚洲2020天天堂在线观看| 91资源在线观看| 国产精品视频500部| 3dmax动漫人物在线看| 国产精品㊣新片速递bt| 亚洲每日在线| 99久久久免费精品| 在线中文字幕不卡| 欧美视频三区| 天堂а√在线最新版中文在线| 亚洲成人激情图| 99久久夜色精品国产亚洲狼| 91视频你懂的| 亚洲经典三级| 欧美午夜一区二区三区免费大片| 蝌蚪91视频| 91精品国产免费久久综合| 成人h猎奇视频网站| 性の欲びの女javhd| 国产精品久久久久久久久果冻传媒| 欧美一区二区| 美女网站视频黄色| 国产精品免费人成网站酒店| 亚洲午夜女主播在线直播| 国产精品美女久久久久aⅴ| 亚洲综合影院| 免费在线观看毛片网站| 色综合视频在线| 国产美女玉足交| 黑人巨大亚洲一区二区久| 国产农村妇女精品一区二区| 日韩在线中文视频| 欧美午夜网站| 在线观看亚洲视频啊啊啊啊| 国产一级一片免费播放放a| 色综合天天综合网国产成人综合天| 九色porny视频国产网曝| 日韩精品电影一区二区三区| 欧美在线一二三四区| 天天爽人人爽夜夜爽| 亚洲国产精品久久艾草纯爱| 老牛影视av老牛影视av| 欧美日韩国产va另类| 一区二区三区日本| 亚洲精品乱码| 成人羞羞在线观看网站| 在线亚洲+欧美+日本专区| 日韩电影网在线| 国产精品自在线| 欧美视频在线观看网站| 亚洲香蕉在线观看| 在线免费看黄色片| 国产传媒久久文化传媒| 国产在线播放观看| 在线播放性xxx欧美| 成人看的羞羞网站| 亚洲一区二区小说| 西西444www无码大胆| 精品第一国产综合精品aⅴ| 成看片vvv222| 精品人妻少妇嫩草av无码专区| 有码在线播放| 亚洲熟妇一区二区三区| 亚洲精品在线国产| 黑森林福利视频导航| 九色在线视频蝌蚪| 看欧美日韩国产| 国产成人一二| 国产精品偷拍| 欧美日韩国产精品成人| 五月天婷婷在线观看视频| 欧美日韩国内自拍| 捆绑裸体绳奴bdsm亚洲| 国产一区亚洲二区| 国产视频一区二区三| 久久97精品久久久久久久不卡| 亚洲男人第一天堂| 素人av在线| 国产成人av网址| 一区二区三区91| 欧美 日韩 国产一区二区在线视频| 精品产品国产在线不卡| 国产在线观看欧美| 欧美电影《睫毛膏》| 亚洲av无码成人精品区| 精品国产成人在线| 欧美探花视频资源| 久久精品观看| 99久久99久久精品国产片果冰| 伊人激情综合网| 伦理片一区二区| 国产三级在线观看完整版| 天天操天天爱天天干| 国产在线精品成人一区二区三区| 欧美极品少妇无套实战| 精品免费av在线| 亚洲网站在线观看| 一本一道无码中文字幕精品热| 免费观看久久久4p| 亚洲人成网站在线| 午夜欧美巨大性欧美巨大| 国产一区二区三区直播精品电影| 日韩网红少妇无码视频香港| 欧美中文字幕亚洲一区二区va在线| 无套内谢丰满少妇中文字幕| 免费毛片在线播放| 欧美天天影院| www.浪潮av.com| av在线免费在线观看| 999一区二区三区| 97香蕉超级碰碰久久免费软件| 免费黄色片视频| 3d动漫精品啪啪| 久久婷五月综合| 欧美成人一区二区在线观看| 最新天堂在线视频| 国产精品久久久久婷婷| 性色av一区二区三区| 一级日本免费的| 日韩电影免费一区| av男人的天堂av| 欧美精品一卡二卡| 亚洲av无码一区二区三区人| 国产一区二区精品在线观看| 亚洲国产精品女人| 精品不卡在线视频| 蜜桃视频在线观看免费视频网站www| 色又黄又爽网站www久久| 欧美综合在线视频| 国产亚洲成aⅴ人片在线观看| 日本一区二区成人| 亚洲午夜精品一区二区| 日韩av一区二区在线观看| 91麻豆产精品久久久久久夏晴子| 最新日韩在线视频| 欧美肥臀大乳一区二区免费视频| 北京富婆泄欲对白| 国产熟人av一二三区| 黄色免费观看| 国产日韩精品视频一区| jizzjizzjizzjizzjizzjizzjizz| 波霸ol色综合网| 日韩有码欧美| 成人黄视频在线观看| 99精品视频在线观看播放| 天天操夜夜添| 日韩一区二区三区高清| 天天干免费视频| 日韩一区二区在线| 国产对白叫床清晰在线播放| 欧美jizz18hd性欧美| 亚洲女同同性videoxma| 久久人妻一区二区| 国产裸舞福利在线视频合集| 国产欧美最新羞羞视频在线观看| 国内精品在线视频| 日韩大陆av| 免费av在线一区| 18视频免费网址在线观看| 欧美中文字幕一区二区三区| 韩国日本一区二区三区| 国产伦精品一区二区三区视频女| 中文字幕第66页| 国产乱子视频| 日本福利小视频| 亚洲综合中文| 国产小视频一区| 欧美大片免费高清观看| 亚洲人成在线播放| 九九九在线视频| 国产69精品久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区精品区| 麻豆自创视频在线观看| 欧美成人精品欧美一级| 日本成人免费在线观看| 久久久精品日韩| 欧美综合一区二区三区| 99久久99久久综合| 国产激情在线观看视频| 国产成人免费观看视频| 色噜噜一区二区三区| 福利视频网站一区二区三区| 免费网站看v片在线a| 97精品视频在线观看自产线路二| 成人永久在线| 国产精品99久久久久久动医院| 国产精品老熟女一区二区| 四虎影院观看视频在线观看| 国产三区在线观看| 粉嫩av一区二区三区天美传媒| 国产成人禁片免费观看视频| 写真福利片hd在线观看| 欧美69xxxxx| 国产福利小视频在线| 成人免费电影视频| 欧美双性人妖o0| 国产制服丝袜一区| avhd101老司机| 日韩精品黄色网| www.天天射.com| 一级黄色片在线免费观看| 激情黄产视频在线免费观看| 免费成人美女在线观看| 欧美日韩在线二区| 开心久久婷婷综合中文字幕| 亚洲欧美三级在线| 亚洲免费成人av在线| 国产日韩成人精品| 久久久久综合网| 一区三区自拍| 国产黄色大片在线观看| 天堂在线第六区| 国产91精品欧美| 国产精品sm| 色婷婷久久99综合精品jk白丝| 亚洲一区二区av| 97蜜桃久久|