【问题标题】:Do not allow right click selection on the list control items mfc?不允许在mfc列表控制项上右击选择?
【发布时间】:2015-11-16 14:34:14
【问题描述】:

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

我尝试在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;
        }
      }

更多信息请参考截图:

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

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

谁能帮我解决这个问题。

【问题讨论】:

    标签: visual-c++ mfc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      终于通过@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);  
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 2020-01-23
        • 1970-01-01
        相关资源
        最近更新 更多