在VC中自定义一个消息,并利用该消息弹出一个对话框

来源:互联网 发布:为什么会遭到网络诈骗 编辑:程序博客网 时间:2024/05/17 02:04

Vc中怎么使用SendMessage自定义消息函数:
    最紧碰到一个问题,就是在VC中自定义一个消息,并且利用该消息弹出一个对话框,之前在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;
程序设置步骤如下:
1、在View.h件中,DECLARE_MESSAGE_MAP() 语句前加入如下语句
    #define WM_MY_TEST WM_USER+1 //自定义一个消息
    afx_msg LRESULT OnDebug(WPARAM wParam, LPARAM lParam); //自定义消息的处理函数声明
2在View.cpp文件中加入如下语句:
    在BEGIN_MESSAGE_MAP(CDemoMessageView, CView)END_MESSAGE_MAP() 之间加入:
    ON_MESSAGE(WM_MY_TEST, OnDebug)  //利用ON_MESSAGE()宏在自定义消息与其处理函数间建立映射关系
3、响应函数的实现
LRESULT CDemoMessageView::OnDebug(WPARAM wParam, LPARAM lParam)
{
    MessageBox(_T("收到消息了"),_T("测试"),MB_OK);
     //可以运用iParam1,iParam2 来做一些事情。
    return 0;
}
注意:参数有2个,WPARAM wParam,LPARAM lParam,WPARAM是16位的(WORD),LPARAM是32位的(LONG),哪怕没有东西传进来也要写,可能会有一些莫名奇妙的事情会发生。
类型用 LRESULT,完了要return 0; 
4、再添加菜单来发送我们自定义的消息
void CDemoMessageView::OnTest()
{
    // TODO: 在此添加命令处理程序代码
    ::SendMessage(this->m_hWnd, WM_MY_DOSOME,(WPARAM)0,(LPARAM)0);
}
这样就是一个完整的消息发送与接受过程,没有使用参数,wParam,iParam,当然可以使用它们去处理更复杂的消息。

原创粉丝点击