MFC自定义消息的方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC自定义消息的方法?相关的知识,希望对你有一定的参考价值。
我知道基于对话框的自定义消息的流程,但是不知道自定义消息是干什么用的……
我可不可以通过自定义的消息,而不是WM_CHAR消息,来响应键盘上的“K”按键,从而在用户点击“K”这个按键的时候,弹出一个对话框?
我的初衷是收集外部的一个按钮信号(这个按钮信号是用板卡采集的),即当用户按下这个按钮的时候,弹出一个对话框。这种情况下,我可不可以用自定义消息来响应这个按钮,从而弹出一个对话框呢?
所谓自定义消息,是相对系统消息来说的,你将的键盘消息这些,从硬件和操作系统来的,都是系统消息,不能自定义。
在MFC中,
对于系统消息,你需要做的就是设置响应函数,并在函数中实现对该消息发生后要处理的事情。
对于自定义消息,首先你需要的是一个“消息发送者”,而不是接收处理,从哪里发送消息,比如来自菜单、按键等等。
板卡的按键,你首先需要的是接收信号,比如在一个线程中,然后自定义一个消息号,当接收按键信号后,想你的主窗口或者指定窗口发送这个消息。在窗口类中,自定义消息处理函数,并在消息处理函数中弹出对话框即可。追问
这是消息号是关键,但是我不会,我就是不知道什么时候定义这个消息号,或者在哪里定义这个消息号,比如“OnInitDialog()”函数,或者定时器函数“OnTimer”,还是自定义的按钮函数“OnBnClickedButton1”?
还有,你说的消息号是不是一个Flag标志,当有这个消息号的时候,才发送命令,没有的话不发送,也就是是一个BOOL型的变量?
望大侠指教!!!
消息号,是一个#define语句定义的整数而已。要求是和系统消息号不冲突,定义在两边都支持的.h头文件中即可。
函数名字随意,关联即可。
消息响应窗口要由自己指定。
定时器的消息号是WM_TIMER,OnTimer是消息响应函数,在指定窗口中产生关联。
建议你找一本书看看吧,这东西几大章的讲解,这里哪能说那么细。
MFC自定义消息使用
消息对于windows程序来说,是一个非常重要的内容,也有非常多的消息,如果WM_CREATE、WM_LBUTTONDOWN等等。
实际开发时,除了系统定义的这些消息之外,也会使用到自定义消息,因此,记一小章使用方法。
它的声明如下 :
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
1、在公共头文件中添加自定义消息
const UINT WM_TESTMESSAGE = WM_USER + 0x100;
2、在类的头文件中,添加函数声明,和普通函数类似,只是消息函数有固定的格式
afx_msg LRESULT OnTestMessage(WPARAM wParam, LPARAM lParam);
3、在类的实现文件中,添加消息映射,以告知程序当接收到WM_TESTMESSAGE消息时,应该交由哪个函数处理
BEGIN_MESSAGE_MAP(CReceiveDlg, CDialogEx)
ON_MESSAGE(WM_TESTMESSAGE, OnTestMessage)
END_MESSAGE_MAP()
4、编写消息对应的函数具体实现
LRESULT CReceiveDlg::OnTestMessage(WPARAM wParam, LPARAM lParam)
{
}
5、使用PostMessage或者SendMessage发送自定义消息
::PostMessage(m_pRecvDlg->GetSafeHwnd(),WM_TESTMESSAGE, (WPARAM)pInfo, 0);
如下图,发送消息 窗口输入一个芯片编号,然后通过PostMessage传递给接收窗口显示。
测试项目链接链接: https://pan.baidu.com/s/1l2WoEXC2amxuf6v9YoaKTg 提取码: vy3u
以上是关于MFC自定义消息的方法?的主要内容,如果未能解决你的问题,请参考以下文章