当我尝试使用右键单击选择项目时,我不想允许选择列表控件项目,如果左键单击该项目,则应显示选择。
我尝试在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;
}
}
请参阅屏幕截图以获取更多信息:
如果我右键单击该项目,则不应出现蓝色突出显示,因为该突出显示应仅用于左键单击。
但如果是右击,我仍然可以选择该项目。
有谁可以帮我解决这个问题。
答案 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);
}