zoukankan      html  css  js  c++  java
  • MFC的自定义消息的定义与使用

      自定义消息的响应和资源消息的响应有很多类似之处;资源消息的响应是以资源的ID号作为标识的;自定义的消息要自己声明消息ID。

    一.           定义:

    第一步要声明消息:

    #define WM_MYMSG  WM_USER+200

    第二步要在类声明中声明消息映射:

    DECLARE_MESSAGE_MAP()

    第三步要在类声明中定义消息处理函数:

    afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM);

    在.cpp中做的工作:

    第四步要实现消息映射:

    BEGIN_MESSAGE_MAP()

    ON_MESSAGE(WM_MYMSG,OnMyMsgHandler)

    END_MESSAGE_MAP()

    第五步要实现消息处理函数(当然可以不实现):

    LRESULT CMainFrame::OnMyMsgHandler(WPARAM w,LPARAM l)

    {

    AfxMessageBox("Hello,World!");

    return 0;

    }

    二.           使用

    1.      如果该自定义消息所在的类是有CWnd派生出来的,且在本类中调用,那么我们可以调用CWnd::SendMessage()函数,具体定义为:

    LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

    此时我们只需要在引发消息的地方添加如下代码:

    SendMessge(WM_MYMSG,0,0);

    如果我们想在不同的情况下发送用户消息,我们只需要将SendMessage的后两个参数wParam,lParam加以标识即可;在消息处理函数,写一个if条件语句(或switch语句)就可以了;将不同情况下的用户消息区分开;

      例如看下面的例子:  

      ①加入消息响应函数实现
      在CCDlg类的实现文件中加入消息响应函数的实现部分,代码如下:
     
      void CCDlg::Customize(WPARAM wParam, LPARAM lParam)
      {
            CString strTittle;
            strTittle.Format("自定义消息参数:x=%d,y=%d",wParam,lParam);
            SetWindowText(strTittle);
      }
      此函数的作用是将鼠标的位置信息显示在对话框的标题栏部分。
      ②.菜单部分
      在主框架的“帮助”主菜单中加入“自定义消息”子菜单,其ID设为ID_CUSTOMIZE,通过类向导响应该命令,函数名默认。其函数体如下:
     
      void CMainFrame::OnCustomize()
      {
            // TODO: Add your command handler code here
            POINT pos;
            //将消息参数定义为屏幕坐标值
            GetCursorPos(&pos);
            pdlg->SendMessage(WM_CUSTOMIZE,(UINT)pos.x,pos.y);//这里就是将(UINT)pos.x,pos.y(注:它们分别对应①中消息响应函数的两个参数WPARAM     wParam和LPARAM lParam)两个参数分别传给消息响应函数。
      }
     

    2.      如果不在本类中响应自定义消息;那么我们只能用win32 的API函数;例如,当自定义消息在CMainFrame中,而触发消息的地方不在CMainFrame类中,那么我们可以用如下语句:

    ::SendMessge(::AfxGetMainWnd()->m_hWnd,WM_MYMSG,0,0);

    相关内容网址:

    http://www.cnblogs.com/smartvessel/archive/2011/07/18/2109472.html

    http://blog.csdn.net/penpenandtongtong/article/details/18598907

    http://www.oschina.net/question/565065_72596

    http://blog.chinaunix.net/uid-24459558-id-299010.html

  • 相关阅读:
    C# 五子棋_GDI+实现
    SAE python+chrome扩展快速存储喜欢的图片(可做图床)
    C# 生成迷宫及寻路
    解决 yii2 从数据库查出来的数据都变成了字符串格式
    英语词根3
    “诸葛马前课-小六壬”全面解析
    Ubuntu 尝试
    ListView + ToolTip 的問題
    英语词根 1
    英语词根6
  • 原文地址:https://www.cnblogs.com/zhangwuji/p/5260380.html
Copyright © 2011-2022 走看看