to panda_w(好想睡啊!):LVN_ITEMCHANGED 消息不是我要的,太频繁触发了
我现在是想:只在 Checkbox 被点击时才做某些操作如果用 WM_LBUTTONDOWN ,再加上取鼠标位置下面的是不是那个 Checkbox,
不过如果 Windows设置改变了,可能会有偏差,还有谁有更好的办法?

解决方案 »

  1.   

    用 WM_LBUTTONDOWN ,然后还有个 HitTest 函数呢
      

  2.   

    回复人: kylinux(无知者无畏) (2001-4-4 2:05:00)  得0分 
    panda_w的方法好!比如可以如下:
    (mylistdlg.h)afx_msg void OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult);(mylistdlg.cpp)ON_NOTIFY(LVN_ITEMCHANGED, IDC_MY_LIST, OnItemchangedList)void Cmylistdlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    *pResult = 0;if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
    return; // No change        // Old check box state
    BOOL bPrevState = (BOOL)(((pNMListView->uOldState & 
    LVIS_STATEIMAGEMASK)>>12)-1);          if (bPrevState < 0) // On startup there's no previous state 
    bPrevState = 0; // so assign as false (unchecked)// New check box state
    BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);          if (bChecked < 0) // On non-checkbox notifications assume false
    bChecked = 0; if (bPrevState == bChecked) // No change in check box
    return;// Now bChecked holds the new check box state
            // ... do your process
    }