对于ListCtrl 的以 HDN_ 打头的消息映射函数都不会执行的问题 listctrl
2009-12-11 23:13
问题:
我在一个对话框里有一个 LISTCTRL (其ID为IDC_LIST1)并增加了以下消息映射:
ON_NOTIFY(HDN_ITEMCHANGING, IDC_LIST1, OnItemchangingList1)
ON_NOTIFY(HDN_ITEMCLICK, IDC_LIST1, OnItemclickList1)
ON_NOTIFY(HDN_ITEMCHANGED, IDC_LIST1, OnItemchangedList1)
ON_NOTIFY(HDN_TRACK, IDC_LIST1, OnTrackList1)
并且 IDC_LIST1 具有 LVS_REPORT 风格。
但是程序执行过程中,对应的消息处理函数一个也不会执行,不管我对 LISTCTRL 中的 HEADCTRL 如果操作也没有一个消息处理函数被执行。
回答:
1、把ON_NOTIFY(HDN_ITEMCHANGING, IDC_LIST1, OnItemchangingList1)改为
ON_NOTIFY(HDN_ITEMCHANGING, 0, OnItemchangingList1)
试试...
理由见此:http://www.codeproject.com/KB/list/headerctrl.aspx
摘:
Handling Notification Messages
Handling CHeaderCtrl messages in a CListCtrl strains ClassWizard's magic powers. The problem is that ClassWizard considers the CHeaderCtrl embedded in a CListCtrl to be of the same "message depth" as any other Common Control (CButton or CEdit Control, for instance). In practice however, the CHeaderCtrl is actually a child of the CListCtrl in which it resides. While the CListCtrl's immediate parent is the CDialog in which it is instantiated, the CHeaderCtrl's immediate parent is the CListCtrl. This is also suggested by the following two points:
Unlike other Common Controls on a CDialog, the CHeaderCtrl in the CListCtrl is not given an explicit resource ID;
The existence of the CListCtrl::GetHeaderCtrl(...) method
This problem arises when you use ClassWizard to create CHeaderCtrl handlers in a CDialog derived class. To create a CHeaderCtrl message handler, you first right click the CListCtrl object in the Resource Editor and select ClassWizard from the popup menu. ClassWizard then enumerates all the messages for this CListCtrl, including those sent by the CHeaderCtrl window. These messages are handled through the ON_NOTIFY macro construction. The list looks something like this:
Attempting to implement a message handler for HDN_<X> messages using Class Wizard will then generate an incorrect Message Map entry. For instance, creating a message handler for the HDN_ENDDRAG message will create an entry such as: ON_NOTIFY(HDN_ENDDRAG, IDC_LIST_CTRL, OnEnddragListCtrl). Unfortunately, the IDC_LIST_CTRL is not responsible for notifying the parent of a HDN_ENDDRAG message. It is the embedded CHeaderCtrl which sends the message, so the ON_NOTIFY macro should use the ID of the CHeaderCtrl. Using Spy++, we can determine that the ID of the CHeaderCtrl is 0, so the ON_NOTIFY entry needs to be manually edited to the following: ON_NOTIFY(HDN_ENDDRAG, 0, OnEnddragListCtrl). This roundabout way connects the WM_NOTIFY messages of the CHeaderCtrl to the "second-level" parent of the CHeaderCtrl, which is often where message processing is handled.
回答2、
对于继承的类从ClassWizard添加HDN_ITEMCLICK消息响应,默认是ON_NOTIFY_REFLECT(HDN_ITEMCLICK, OnItemclick)
结果响应不上...改为
ON_NOTIFY(HDN_ITEMCLICK,0, OnItemclick)
后就响应了
更多阅读
个人才艺表演,基本上什么都不会的人有什么好的建议啊? 才艺表演有哪些
2008-11-21 00:04提问者:小雪下在冬天里 | 悬赏分:10 | 浏览次数:16463次公司业务竞赛其中一项个人才艺表演,可是我没有什么特长,不会唱歌不会跳舞不会弹琴不会画画,也说不出单口相声,不要叫我诗朗诵,也没有条件去学魔术什么的,性格内向,一上
内心独白经典 你应该爱的是一个不管怎样都不会放弃你的 内心独白经典
1. 人活着就是累所以叫人类。2. 有时候明明知道答案,却还是偏要问出那个为什么。3. 你应该爱的是一个不管怎样都不会放弃你的人.4. 我也开始相信,这个世界没有谁
关于、《祖国不会忘记我》合唱的指挥请教_ 祖国不会忘记我合唱谱
关于、《祖国不会忘记我》合唱的指挥请教两首曲子《祖国不会忘记我》《要学那泰山顶上一棵松》。我们的合唱队最大优点是能喊、声音大。但细节并不能处理得很好:例如、在“茫茫的人海里,我是哪一个,在奔腾的浪花里,我是哪一朵”声音不能
英语学不会吗——一个失败者的经验 有英语学不会的人么
中国陷入英语热至少有30年。上千上万的人投入大量精力学英语,但是往往毫无结果:他们照样不能在实际生活中用英语推进自己的事业。甚至有位英语专业出身的编辑私下对我抱怨:大学所学的语言技能工作时用不上,几年就荒废了。早知如此,当初
最好的生活就是什么都不做,也觉得心安 shell if 什么都不做
博主有话:做自己,了解自己,爱自己,接受自己,你才会更完美。最好的生活就是什么都不做,也觉得心安(文/吴苏媚)只要没有欲望,就拥有了一切。一旦心生欲望,就一无所有。曾经听过一个故事。有人对禅师谈起乞丐,语含不屑。禅师说,谁又不是乞丐呢,区