为什么CListCtrl的LVS_EX_TRACKSELECT没法去除,必须在NM_HOVER响应函数最后*pResult=TRUE才行

时间:2021-04-08 03:09:44
我建立一个对话框工程,添加一个CListCtrl控件,生成了一个继承类CListCtrlX
1. 发现这个控件有个特点,就是当OnMouseMove()函数里面调用了TrackMouseEvent()激活鼠标跟踪的时候,它会有hot selection特性,也就是鼠标放在某个元素上一定时间后,鼠标所指的元素就会被选择。
2. 这是个非常恼人的特性,我尝试去掉,在CListCtrlX的构造函数,Create(Ex)函数,OnCreate函数,PreSubclassWindow函数里面都去调用了SetExtendedStyle尝试去掉LVS_EX_TRACKSELECT风格,结果发现都不行。
3. 最后我在ON_NOTIFY_REFLECT(NM_HOVER,OnNMHover)里面,在OnNMHover函数的最后面把
*pResult=0
改成
*pResult=TRUE

这样才防止了TrackMouseEvent时候的,产生TRACK SELECT特性。

可是这到底是为什么呢,我希望的是某个地方去掉用SetExtendedStyle就可以了啊? 谢谢!

5 个解决方案

#1


该回复于2011-04-22 16:05:47被版主删除

#2


控件的这种pResult最后将作为窗口过程的返回值,每个消息的返回值意义不同,WM_MOUSEHOVER这个消息里这样说的 
If an application processes this message, it should return zero
你研究看看?

#3


引用 2 楼 howtop2p 的回复:
控件的这种pResult最后将作为窗口过程的返回值,每个消息的返回值意义不同,WM_MOUSEHOVER这个消息里这样说的 
If an application processes this message, it should return zero
你研究看看?


好像没有回答我的问题啊... ...

#4


这个问题上次好像看到过了,是不是你发的?

#5


引用 3 楼 presult163 的回复:
引用 2 楼 howtop2p 的回复:

控件的这种pResult最后将作为窗口过程的返回值,每个消息的返回值意义不同,WM_MOUSEHOVER这个消息里这样说的
If an application processes this message, it should return zero
你研究看看?


好像没有回答我的问题啊... ...

看错了,原来是NM_HOVER,我的意思是,既然你修改了lpResult的值就行了,那就看看通知消息返回值的意义,这个lpResult就是作为返回值
NM_HOVER
返回值意思
Unless otherwise specified, return zero to allow the control to process the hover normally, or nonzero to prevent the hover from being processed. 

#1


该回复于2011-04-22 16:05:47被版主删除

#2


控件的这种pResult最后将作为窗口过程的返回值,每个消息的返回值意义不同,WM_MOUSEHOVER这个消息里这样说的 
If an application processes this message, it should return zero
你研究看看?

#3


引用 2 楼 howtop2p 的回复:
控件的这种pResult最后将作为窗口过程的返回值,每个消息的返回值意义不同,WM_MOUSEHOVER这个消息里这样说的 
If an application processes this message, it should return zero
你研究看看?


好像没有回答我的问题啊... ...

#4


这个问题上次好像看到过了,是不是你发的?

#5


引用 3 楼 presult163 的回复:
引用 2 楼 howtop2p 的回复:

控件的这种pResult最后将作为窗口过程的返回值,每个消息的返回值意义不同,WM_MOUSEHOVER这个消息里这样说的
If an application processes this message, it should return zero
你研究看看?


好像没有回答我的问题啊... ...

看错了,原来是NM_HOVER,我的意思是,既然你修改了lpResult的值就行了,那就看看通知消息返回值的意义,这个lpResult就是作为返回值
NM_HOVER
返回值意思
Unless otherwise specified, return zero to allow the control to process the hover normally, or nonzero to prevent the hover from being processed.