gpt4 book ai didi

c - 子类化控件时如何处理控件的通知?比如EN_CHANGE?

转载 作者:行者123 更新时间:2023-12-02 07:05:49 26 4
gpt4 key购买 nike

一个通知由一个控件发送给它的父级。当我使用 SetWindowSubclass 子类化控件时,如何处理通知?我不想在父窗口进程中处理它们。在子类 proc 中有什么我可以做的吗?

如果我将一个Edit控件子类化,如何处理子类中的EN_CHANGE通知?

更新

这是子类proc:

LRESULT CALLBACK MyEditWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
switch (uMsg)
{
default:
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
}

我用

SetWindowSubclass(GetDlgItem(hWnd, ID_MYEDIT), MyEditWindowProc, 0, 0);

对 Edit 控件进行子类化。

但是我应该处理哪条消息?当然不是 WM_NOTIFY 因为它是由父级处理的。

最佳答案

If I subclass a Edit control, how to handle EN_CHANGE notification in the subclass?

简短的回答:你不能。如果将编辑子类化,则只能看到发送给它的消息;您无法收听或拦截 它已经发送的消息(尽管您可以添加额外的传出消息)。

但是,如果您确实需要这样做,另一种技术可能是创建一个中间窗口,包装编辑,以便原始父对话框将您的包装器作为子对话框,而您的wrapper 将编辑作为子项。现在,您的包装器可以拦截和过滤任何方向的消息。

它必须小心手动转发所有相关消息,并处理调整大小和其他内务处理问题;您可以通过子类化获得一堆“免费”的东西,但是在包装时必须明确处理它。此外,由于鼠标/键盘输入仍将转到内部控件;如果您需要对此进行监听,那么子类化将是必要的除了包装。

关于c - 子类化控件时如何处理控件的通知?比如EN_CHANGE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151994/

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