ClistCtr HDN_BEGINTRACK这个WM_NOTIFY消息
来源:互联网 发布:windows网络抓包工具 编辑:程序博客网 时间:2024/06/08 09:46
我尝试在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) //消息是调整窗口的List控件头的宽度等等
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消息就必须自己做类似上面的处理……
- ClistCtr HDN_BEGINTRACK这个WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_COMMAND,WM_NOTIFY等消息
- WM_COMMAND,WM_NOTIFY等消息
- 如何发送WM_NOTIFY消息
- 自定义WM_NOTIFY消息
- WM_COMMAND,WM_NOTIFY等消息
- WM_Notify与消息反射
- WM_NOTIFY消息的讲解
- 控件的WM_NOTIFY消息映射
- TN061:ON_NOTIFY及WM_NOTIFY消息
- WM_NOTIFY消息流程实例分析
- OpenAL学习笔记(一)---播放音频(*.wav)
- [go语言]控制语句
- Android Camera CameraHal.cpp 分析
- 韩顺平 PHP视频教程 Ajax技术第05讲-返回XML如何处理
- <转>Linux查看进程的所有子进程和线程
- ClistCtr HDN_BEGINTRACK这个WM_NOTIFY消息
- 术语表
- [go语言]函数
- Android的binder机制分析
- <转>用户线程和内核线程
- cocos2d-x学习之CCDirector
- 虚拟机离线补丁实现
- Android 学习笔记(1) -- relative_layout
- Android OMAP4 Ducati 和 OpenMax IL介绍