控件的WM_NOTIFY消息映射
控件的WM_NOTIFY消息映射
前几天,我尝试在CListCtrl中映射HDN_BEGINTRACK这个WM_NOTIFY消息。
轻松的用ClassWizard建立了消息映射,几秒中完成了所有工作之后发生的事情却让我很长时间轻松不起来了。
消息根本映射不上!!
BEGIN_MESSAGE_MAP(CPrevList, CListCtrl)
//{{AFX_MSG_MAP(CPrevList)
ON_NOTIFY_REFLECT(HDN_BEGINTRACK, OnBegintrack)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CPrevList::OnBegintrack(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
// TODO: Add your control notification handler code here
AfxMessageBox("总算映射上了!");//程序始终执行不到这个位置
*pResult = 0;
}
此后我在这个问题上苦恼了很久,最后发现了两种解决办法
1,对消息映射两次,分别是XXXXW和XXXXA
BEGIN_MESSAGE_MAP(CPrevList, CListCtrl)
//{{AFX_MSG_MAP(CAdvHeaderCtrl)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
ON_NOTIFY_REFLECT(HDN_BEGINTRACKW, OnBeginTrack)
ON_NOTIFY_REFLECT(HDN_BEGINTRACKA, OnBeginTrack)
END_MESSAGE_MAP()
2,重载CWnd::OnNotify虚函数在其中对XXXXW和XXXXA分别处理
BOOL CPrevList::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
switch (((NMHDR*)lParam)->code)
{
case HDN_BEGINTRACKW:
case HDN_BEGINTRACKA:
AfxMessageBox("终于映射上了");
}
return CListCtrl::OnNotify(wParam, lParam, pResult);
}
反观问题的产生完全是操作系统惹的祸,我的操作系统是WIN2K(VC6无SP)
WIN2K使用Wide Char,就是常说的UNICODE,在WIN2K下消息对应着WM_XXXXW
而早期WIN9X使用ASCII,消息为WM_XXXXA。
要想使用某些控件的WM_NOTIFY消息就必须自己做类似上面的处理……
控件的WM_NOTIFY消息映射相关推荐
- iOS: 教你给UI控件添加Badge(消息提醒小圆点)
PPBadgeView 1.前言 最近项目的一个需求是在UIView, UITabBarItem, UIBarButtonItem 这三种类型的控件上添加消息提醒小圆点(Badge),一开始找了一个星 ...
- MFC中动态创建控件及添加消息响应的方法实例
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...
- Window user32子动态库控件封装和消息分发浅析
转自看雪:http://bbs.pediy.com/thread-43588.htm 众所周知:WIN32子动态库user32.dll 封装了系统定义的全局标准控件类和WNDPROCESS,然后共享给 ...
- Win32窗体控件方法与消息
在Windows中,每个窗体的子控件也称之为窗体,创建一个控件的方法是CreateWindow 控件公共方法 如GetWindowText,EnableWindow等方法,几乎每个控件都拥有这些特性, ...
- 子控件的鼠标消息怎么传递给父控件?
需求是在父widget上摆一个子widget后,当click子widget时:不进入到子widget的相关事件处理函数中,而是进入到父widget的对应事件处理函数中.比如进入到mousePressE ...
- C# 使用ToolTip控件实现气泡消息提示
C# 使用ToolTip控件实现气泡提示 前言: 今天我们学习一个新的控件ToolTip控件,这个控件使用频率特别高,博主就想着写一篇文章来教大家一起用这个控件,这个控件的效果是我们的鼠标停留在那个位 ...
- 在用户控件中弹出消息框的方法
以下语句可以弹出消息框, 如有不妥,请指正! ScriptManager.RegisterStartupScript(this, GetType(), "js", "al ...
- 转MFC消息映射梳理
http://blog.csdn.net/phunxm/article/details/5640766 一.CWnd消息处理 一切从窗口(HWND)的创建说起,在MFC中,CWnd::CreateEx ...
- CRichEditCtrl 多格式编辑控件的使用
下面链接可以下载全文: https://download.csdn.net/download/h3974/42496015 一.多格式编辑控件 Rich Edit编辑控件可以为文本设置字符和段落格式, ...
最新文章
- 【java】将自己写的类生成说明文档的方法
- 洛谷P1433 吃奶酪【dfs】【剪枝】
- linux平台性能监控系统,Linux系统性能监控
- mysql图片路径varchar大小_Mysqlvarchar大小长度问题_MySQL
- 别把客户当傻子,延期交货得这么谈!
- php mysql随机记录,php – 从MySQL中选择可变数量的随机记录
- SendMessage 循环按1 到6 F1到F8_2
- IOS - IPhone或IPAD,如何恢复出厂操作系统?
- 浅析linux下的条件变量
- 语言兔子繁衍问题讲解_颍湄脞録兔子不搁那窝里
- Expression Blend中文教程 - 开篇
- C++中数字和字符串的转换
- 如何进行大数据分析与处理
- 首份《敏捷回顾年度报告》发布
- dnf自动刷图python_dnf卡盟_【python接口自动化】- openpyxl读取excel数据
- android视频添加特效,抖音蝴蝶翅膀特效怎么弄的 安卓手机上给视频加蝴蝶特效的方法...
- 【渗透技巧】pop3协议渗透
- 【原创】php ssh2 远程秘钥登录华三防火墙F5030
- 正则表达式在线测试工具
- eclipse的正确使用方式