不允许在列表控制项mfc上进行右键单击选择?

时间:2015-11-16 14:34:14

标签: visual-c++ mfc

当我尝试使用右键单击选择项目时,我不想允许选择列表控件项目,如果左键单击该项目,则应显示选择。

我尝试在NM_RCLICK事件中处理它以防止右键单击选择,如下所示:

 void CTestDlg::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
        {
        LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

        if((pNMItemActivate->uChanged & LVIF_STATE) && 
           (pNMItemActivate->uNewState & LVNI_SELECTED))
        {
            *pResult = 1;
        }
        else
        {
            *pResult = 0;
        }
      }

请参阅屏幕截图以获取更多信息:

enter image description here

如果我右键单击该项目,则不应出现蓝色突出显示,因为该突出显示应仅用于左键单击。

但如果是右击,我仍然可以选择该项目。

有谁可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:5)

您正在处理右键单击事件的通知;在此时阻止任何事情为时已晚,因为选择已更改且之前的选择已丢失。

你应该处理WM_RBUTTONDOWN / UP消息并在那里做任何你想做的事情,而不是将它传递给默认的窗口过程。

答案 1 :(得分:1)

最后用@Vlad Feinstein提出的建议解决了这个问题,我尝试如下处理WM_RBUTTONDOWN

BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)  
    {    
        long  lFocus = ::GetDlgCtrlID(pMsg->hwnd);
        if(IDC_LIST1 == lFocus)
        {
            if (pMsg->message == WM_RBUTTONDOWN)
            {
                return true; 
            }
        }

        return CDialog::PreTranslateMessage(pMsg);  
    }