gpt4 book ai didi

c - Win32 API : process WM_* in tab control's wndproc instead of parent's

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:17 26 4
gpt4 key购买 nike

目前我有一个选项卡控件附加到我的程序的主窗口。

但是,当我切换选项卡时,WM_NOTIFY 消息被发送到选项卡控件的父级,而不是选项卡控件本身。

有没有办法让选项卡控件的 WndProc 代替父级接收和处理这些消息?

我正在使用原始的 win32 C API。没有 MFC 或任何类型的库

最佳答案

你有两个选择。

<强>1。子类化

您可以 subclass the tab control所以你可以首先在那里处理消息,然后在你的父窗口中有一些代码,比如

#define msgNOTIFY (WM_APP + 0x40)
// ...
case WM_NOTIFY:
return SendMessageW(nm->hwndFrom, msgNOTIFY, wParam, lParam);

这会将 WM_NOTIFY 弹回。 WM_COMMAND 也一样。为了安全起见,我为这个重定向的 WM_NOTIFY/WM_COMMAND 使用了一个单独的消息 ID;您可能不必(我不确定)。 If your controls move between windows, you'll also have to do this from all windows.

<强>2。使用中间人

与其将选项卡控件直接放置在您的窗口上,不如将其放置在您放置在窗口上的另一个控件(最好是您自己创建的控件,除了调整大小以适合 child 之外什么都不做)内,并在那里处理消息.这具有避免上面链接的重新设置问题的优点,但是 costs a window handle ,所以我通常不建议这样做。不过,它确实有效。如果您对标签页执行此操作,切换页面就像隐藏一个控件并显示另一个控件一样简单! (事实上​​,这就是属性表对其子对话框所做的。)

关于c - Win32 API : process WM_* in tab control's wndproc instead of parent's,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29442905/

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