gpt4 book ai didi

c++ - MFC:CWnd::SendMessage() 只向其类发送消息,还是其他类可以捕获它?

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:15 24 4
gpt4 key购买 nike

假设我有一个名为 ListCtrl 的列表组件类,它派生自 CWnd。

假设我还有一个派生自 CDialog 的名为 DialogA 的对话框类。

DialogA 使用 ListCtrl 将其映射到列表组件。例如,

void DialogA::DoDataExchange(CDataExchange* pDX) 
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_CONTROL, listCtrl);
}

在哪里

ListCtrl listCtrl;

那么如果 ListCtrl 调用 SendMessage(),DialogA 可以处理吗?

如果不是,我如何让 DialogA 处理 ListCtrl 所做的事情。

最终,我希望 DialogA 在单击“复制”的 ListCtrl 右键单击​​菜单选项时使用它自己的“复制”功能,并阻止执行 ListCtrl 的复制功能。

最佳答案

CWnd::SendMessage 将向由该 CWnd 派生类包装的窗口发送消息。因此,如果您从 ListCtrl(它是对话框的子窗口)中使用 SendMessage,对话框将不会看到它。 p>

您要么需要对话窗口的原始 HWND,要么使用全局 SendMessage,例如:

::SendMessage(hWnd, WM_WHATEVER, 0, 0); // note the "::" scoping operator

或者您可以使用列表控件的父窗口(假设对话框是其父窗口):

GetParent()->SendMessage(WM_WHATEVER, 0, 0);

在最后一种情况下,确保 GetParent() 不返回 NULL 会更可靠,所以也许:

CWnd *pParent = GetParent();
if (pParent != NULL)
pParent->SendMessage(WM_WHATEVER, 0, 0);
else
// error handling

关于c++ - MFC:CWnd::SendMessage() 只向其类发送消息,还是其他类可以捕获它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787976/

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