- 1
- 0
- 约3.22万字
- 约 24页
- 2021-10-19 发布于福建
- 举报
MFC中自由使用自定义消息
消息映射、循环机制是 Windows程序运行的基本方式。 VC++ MFC中有许多
现成的消息句柄, 可当我们需要完成其它的任务, 需要自定义消息, 就遇到了一
些困难。
在 MFCClassWizard 中不允许添加用户自定义消息, 所以我们必须在程序中
添加相应代码, 以便可以象处理其它消息一样处理自定义消息。 通常的做法是采
取以下步骤 :
第一步 : 定义消息。
推荐用户自定义消息至少是 WM_USER+100,因为很多新控件也要使用 WM_USER
消息。
#define WM_MY_MESSAGE (WM_USER+100)
第二步 : 实现消息处理函数。
该函数使用 WPRAM和 LPARAM参数并返回 LPESULT。
LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
...
return 0;
}
第三步 : 在类头文件的 AFX_MSG块中说明消息处理函数 :
class CMainFrame:public CMDIFrameWnd
{
...
// 一般消息映射函数
protected:
// {{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
第四步 : 在用户类的消息块中,使用 ON_MESSAGE宏指令将消息映射到消息处理
函数中。
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
如果用户需要一个定义整个系统唯一的消息 , 可以调用 SDK函数
RegisterWindowMessage 定义消息 :
static UINT WM_MY_MESSAGE=RegisterWindowMessage(User);
并使用 ON_REGISTERED_MESSAGE宏指令取代 ON_MESSAGE宏指令 , 其余步骤同
上。
当需要使用自定义消息时 , 可以在相应类中的函数中调用函数 PostMessage
或 SendMessage发送消息 PoseMessage(WM_MY_MESSAGE,O,O);
如果向其他进程发送消息可通过如下方法发送消息 :
DWORD result;
SendMessageTimeout(wnd-m_hWnd, // 目标窗口
WM_MY_MESSAGE, // 消息
0, // WPARAM
0, // LPARAM
SMTO_ABORTIFHUNG |
SMTO_NORMAL,
TIMEOUT_INTERVAL,
result);
以避免其它进程如果被阻塞而造成系统死等状态。
可是如果需要向其它类 ( 如主框架、子窗口、视类、对话框、状态条、工具
条或其他控件等发送消息时上述方法显得无能为力, 而在编
您可能关注的文档
最近下载
- 明代宗教信仰与思想控制.docx VIP
- 江苏省南通市2024-2025学年高二上学期期末学业质量监测语文试卷(含答案).pdf VIP
- 国就有成人演出的电影了?想看就要冒生命危险.pdf VIP
- 综合素质练习题及答案.doc VIP
- 2020-2021学年北京高三化学二轮复习 反应原理型简答题(突破二卷)(word版 含答案).docx VIP
- 电力拖动控制线路安装与检修(白银矿冶职业技术学院)知到智慧树答案.docx VIP
- 煤炭巷道掘砌工(高级工)资格考试题库(全真题库).docx VIP
- 影像叙事中情感共鸣生成机制.docx VIP
- 同轴二级圆柱齿轮减速器的设计(硬齿面).doc VIP
- 基于GPU多线程多通道图像高速重构方法、设备及介质.pdf VIP
原创力文档

文档评论(0)