更新时间:2015-12-09 20:38:54浏览次数:1+次
5. 在CMSGDlg类实现文件MSGDlg.cpp中的消息映射表中加入自定义消息映射:
BEGIN_MESSAGE_MAP(CMSGDlg, CDialog)
//{{AFX_MSG_MAP(CMSGDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_COUNT_MSG,OnCountMsg)
ON_BN_CLICKED(ID_SENDMSG, OnSendmsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
6.在CMSGDlg类实现文件MSGDlg.cpp中定义“发消息”按钮消息响应
void CMSGDlg::OnSendmsg()
{
// TODO: Add your control notification handler code here
staticint count;
++count;
this->SendMessage(WM_COUNT_MSG,0,count);
}
7.在CMSGDlg类实现文件MSGDlg.cpp中定义OnCountMsg消息响应LRESULT CMSGDlg::OnCountMsg(WPARAM wParam,LPARAM lParam)
{
this->SetDlgItemInt(IDC_EDIT,lParam);
return 1;
}
8.SendMessage函数的API原型为:// TellToClose.cpp文件
//::FindWindow&::SendMessage
#include"stdafx.h"
#include<windows.h>
int main(int argc,char* argv[])
{
// 查找标题为“无标题- 记事本”的窗口
// 也可以使用类名来查找,如
// HWND hWnd =::FindWindow("Notepad", NULL);
HWND hWnd = ::FindWindow(NULL, "无标题- 记事本");
if(hWnd != NULL)
{
// 向目标窗口发送WM_CLOSE消息
::SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}
另外还有一个函数:
函数不等消息被处理就立即返回。
如果开启了记事本程序,则运行以上程序记事本关闭。
另附PeekMessage和GetMessage的区别:
PeekMessage 返回 TRUE 的条件是有消息,如果没有消息返回 FALSE
GetMessage 返回 TRUE 的条件是有消息且该消息不为 WM_QUIT
返回 FALSE 的条件是有消息且该消息 为 WM_QUIT
9.在MFC中SendMessage函数封装到CWnd类中:
CWnd::SendMessage
LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
返回值:消息处理的结果;它的值依赖于发送的消息。
参数:
message指定了要发送的消息;
wParam和lParam指定了与消息有关的附加信息。
wParam和lParam是Windows消息机制的两个最重要参数,整个Windows依靠这两个参数传递各种各样的消息。
首先是wParam,它表示此次的消息类型是什么。是键盘?是鼠标?键盘里又分按下还是抬起,鼠标里又分是单击还是
双击,等等。
相关资讯