gpt4 book ai didi

vc中SendMessage自定义消息函数用法实例

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章vc中SendMessage自定义消息函数用法实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考。具体如下:

SendMessage的基本结构如下:

复制代码 代码如下:
SendMessage(
    HWND hWnd,  //消息传递的目标窗口或线程的句柄。
    UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)
    WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,
  //在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。
    LPARAM lParam); //参数2

  。

其中一些参数的由来如下:

//typedef unsigned int UINT; //typedef UINT WPARAM; //typedef LONG LPARAM; //typedef LONG LRESULT,

例如可以用以下语句:

复制代码 代码如下:
::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);

  。

这里我发送的消息是本窗体接收的,所以句柄用:this->m_hWnd 这里的消息类别WM_MY_DOSOME就是我自定义的, 在接收消息的窗体或线程所在的头文件里:

复制代码 代码如下:
#define WM_MY_DOSOME WM_USER+1 // do something

当然你还可以定义更多如:

复制代码 代码如下:
#define WM_DOOTHER WM_USER+2 // do other

表示要做一些事情.

  。

到这里,可能大家还是对消息类别有点模糊,不要担心,下面很快就讲到。 我们发了一个消息出去,那么接收方要能识别这个消息是干什么,就是通过消息类别来区分,并且开始去做这个消息对应要处理的事情。如下:

1、编写一个事情: 我们在接收窗体里定义一个这样的事情(过程), 。

复制代码 代码如下:
afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)
{
 MessageBox("收到消息了,我要开始做一些事情了。","收到",MB_OK);
 //可以运用iParam1,iParam2 来做一些事情。
 return 0;
}

这个事情有3点大家要注意,非常重要:

  。

1. 使用了afx_msg,并且要将afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2) 改写到头文件的 //{{AFX_MSG //。。。改写到这里,颜色会变成灰的。这一点非常重要。 //}}AFX_MSG 2. 参数有2个,WPARAM iParam1,LPARAM iParam2,哪怕没有东西传进来也要写,不然会吃苦头的,vc里不会提醒你少写了一个, 但一些莫名奇妙的事情会发生。 3. 类型用 LRESULT,完了要return 0,

2、让接收方知道什么时候做这个事情: 我们在 。

复制代码 代码如下:
//{{AFX_MSG_MAP
//。。。这里写上
ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)
//如果还有其他消息就再写一个
ON_MESSAGE(WM_DOOTHER,DoOther)
//}}AFX_MSG_MAP

到这里,当你用SendMessage,发了一个WM_MY_DOSOME类型的消息过来的时候,接收方就会去做DoSomeThing(WPARAM iParam1,LPARAM iParam2) 发了一个WM_DOOTHER类型的消息过来的时候,接收方就会去做DoOther(WPARAM iParam1,LPARAM iParam2)当然,这里DoOther我还没有定义.

  。

这样就是一个完整的消息发送与接受过程,这里没有详细讲参数,iParam1,因为还没有用到很复杂的情况, 。

在头文件里:

复制代码 代码如下:

#define WM_MYMSG  WM_USER+5 //自定义一个消息 。

  。

afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定义消息的处理函数声明 。

  。

在.cpp文件里:

复制代码 代码如下:

ON_MESSAGE(WM_MYMSG, OnMyMessage) //利用ON_MESSAGE()宏在自定义消息与其处理函数间建立映射关系 。

  。

void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) //从lParam中取出CString对象的指针,并将字符串内容在IDC_MSGEDIT中显示出来 { 。

    CString *str;     str=(CString *)lParam,

    SetDlgItemText(IDC_EDIT,*str); } 。

  。

按下按钮发送消息 。

复制代码 代码如下:
void CModelessDlg::OnMsgBTN()
{
 CString str= "自定义消息被触发了!";
 SendMessage(WM_MYMSG, 0, (LPARAM) &str);
 //给ModelessDlg自己发一个自定义的消息
}

  。

希望本文所述对大家的VC程序设计有所帮助.

最后此篇关于vc中SendMessage自定义消息函数用法实例的文章就讲到这里了,如果你想了解更多关于vc中SendMessage自定义消息函数用法实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com