积极答复者
自定义消息是如何触发的,机制是什么?

问题
答案
-
Hi Warden,
以下过程详细讲解如何在VC++中加入自定义消息,和触发这个消息。
假设我们的工程名为ownermessage;
1 首先在ownermessageDlg.h中定义消息:例如
define WM_MYMESSAGE (WM_USER+100)
2 在.H文件中,加入消息响应函数,如:
afx_msg LRESULT OnMyMessage(WPARAM w,LPARAM l);
该函数有规定的格式:
afx_msg LRESULT Function_Name(WPARAM w,LPARAM l);
3 在ownermessageDlg.cpp中加入消息响应宏
在响应该消息的类中,在消息响应块中,
BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
加入以下语句:
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
成为如下样式:
BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4 在.CPP文件中,编辑消息响应函数,如下:
LRESULT CownermessageDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) {
MessageBox(_T("My Message!"));
return 1;
}
5.在对话框中为新增的按钮添加单击响应,ownermessageDlg.cpp中的MESSAGE_MAP变成:
BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CownermessageDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
void CownermessageDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
//::PostMessage(
PostMessage(WM_MYMESSAGE, IDC_BUTTON1);
}
如果您的问题解决了,请把有用的回答标记为答案,
谢谢,
Lucy
Lucy Liu [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Warden_ 2011年2月24日 7:45
全部回复
-
while (GetMessage(&msg, NULL, 0, 0)) { } 触发的最重要的机制“消息循环” 处理消息靠这个 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { } 发送一个消息 LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); SendMessage(hWnd,WM_我的消息,0,0); 自定义消息 无非就是Msg不是系统常值 自已定的一个数 处理自定义消息要在WndProc 中搞定 switch (message) { case WM_我的消息(0x6000): 。。。。。。。 该死的不让换行还删除空格
-
Hi Warden,
以下过程详细讲解如何在VC++中加入自定义消息,和触发这个消息。
假设我们的工程名为ownermessage;
1 首先在ownermessageDlg.h中定义消息:例如
define WM_MYMESSAGE (WM_USER+100)
2 在.H文件中,加入消息响应函数,如:
afx_msg LRESULT OnMyMessage(WPARAM w,LPARAM l);
该函数有规定的格式:
afx_msg LRESULT Function_Name(WPARAM w,LPARAM l);
3 在ownermessageDlg.cpp中加入消息响应宏
在响应该消息的类中,在消息响应块中,
BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
加入以下语句:
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
成为如下样式:
BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
4 在.CPP文件中,编辑消息响应函数,如下:
LRESULT CownermessageDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) {
MessageBox(_T("My Message!"));
return 1;
}
5.在对话框中为新增的按钮添加单击响应,ownermessageDlg.cpp中的MESSAGE_MAP变成:
BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CownermessageDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
void CownermessageDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
//::PostMessage(
PostMessage(WM_MYMESSAGE, IDC_BUTTON1);
}
如果您的问题解决了,请把有用的回答标记为答案,
谢谢,
Lucy
Lucy Liu [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Warden_ 2011年2月24日 7:45