gpt4 book ai didi

c++ - 使用 ON_WM_RBUTTONDOWN 升级 MFC CListBox 控件,以便对话框可以直接处理消息

转载 作者:行者123 更新时间:2023-12-04 01:04:03 27 4
gpt4 key购买 nike

我想知道为 CListBox 控件提供的消息 Controller 集有多有限。我已经在包含此控件的 CDialog 的消息映射中使用了 ON_LBN_SELCHANGE

我也想使用 ON_WM_RBUTTONDOWN,所以我派生了一个 class CMyListBox : public CListBox,所以现在我可以在类中映射该消息,但我会喜欢以与 ON_LBN_SELCHANGE 相同的方式将其映射到对话框。

我的问题是是否可以将该消息重新发送到父对话框,以便我可以从 CDialog 消息映射中处理它,最好的方法是什么(send_message、post_message 或有没有更好的通知机制)?

最佳答案

我想我也会向您展示这种方法作为一种替代方法,它可以节省派生您自己的 CListBox 类的需要。

  1. 选择您的对话类。
  2. 在“属性” Pane 中选择“消息”图标。
  3. 找到 WM_CONTEXTMENU在列表中并通过下拉菜单添加处理程序。

Add Handler

这个处理程序的描述是这样的:

Notifies a window that the user desires a context menu to appear. The user may have clicked the right mouse button (right-clicked) in the window, pressed Shift+F10 or pressed the applications key (context menu key) available on some keyboards.

wParam - A handle to the window in which the user right-clicked the mouse. This can be a child window of the window receiving the message. For more information about processing this message, see the Remarks section.

您需要取消注释要在生成的处理程序中使用的参数。例如:

void CMFCApplication4Dlg::OnContextMenu(CWnd* pWnd, CPoint /*point*/)
{
if (pWnd->GetSafeHwnd() == m_lbList.GetSafeHwnd())
{
AfxMessageBox(_T("User right-clicked on the listbox control"));
}
}

结果:

enter image description here

当然,像您所做的那样派生您自己的类并处理鼠标按钮和使用通知系统并没有错。我并不是说这种方法更好。我只是将它展示为检测对话框上控件右键单击的替代方法。


注意:还有其他answers这里是关于使用这种方法的,但我发现的那些没有显示屏幕截图。

关于c++ - 使用 ON_WM_RBUTTONDOWN 升级 MFC CListBox 控件,以便对话框可以直接处理消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67090888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com