CListControl的OnMouseMove和OnNcHitTest
實際案例如下:
?
將CListCtrl做成菜單樣式。需要處理當(dāng)鼠標移到ClistCtrl上的事件。
處理邏輯這樣:當(dāng)鼠標移動到CListCtrl區(qū)域時候,將CListCtrl上所有ITem置為非選中狀態(tài),然后調(diào)用HitTest得到行數(shù)再將所選行置為選中狀態(tài)。當(dāng)鼠標移出ClistCtrl區(qū)域時候,將原來選中狀態(tài)不變。
?
?
?
在實際做的過程中,在判斷鼠標是否移到CListCtrl客戶區(qū)域時候,誤用WM_NCHITTEST消息判斷,在OnNcHitTest里面處理選中邏輯。導(dǎo)致每次鼠標移出ClistCtrl會偶爾出現(xiàn)原來選中的行選中狀態(tài)會消失。PS:SetItemState(i, 0, -1) 取消選中狀態(tài)
?
?
后來在OnMouseMove處理,通過PtInRect判斷鼠標在客戶區(qū),當(dāng)在客戶區(qū)的時候再處理邏輯,效果實現(xiàn)。
?
?
原因是由于鼠標在移出ClistCtrl區(qū)域的時候,偶爾會接觸到CListCtrl的邊界,觸發(fā)WM_NCHITTEST,由于在OnNcHitTest的邏輯判斷是將所有行置為非選中狀態(tài),并且所選行為-1,所以出現(xiàn)上述現(xiàn)象就不足為奇了
總結(jié)
以上是生活随笔為你收集整理的CListControl的OnMouseMove和OnNcHitTest的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外设驱动库开发笔记8:GPIO模拟I2C
- 下一篇: STM32F412应用开发笔记之一:初识