目前,我的程序主窗口附有一个标签控件。
但是,当我切换标签时,WM_NOTIFY
消息将发送到标签控件的父级,而不是标签控件本身。
有没有办法让标签控件的WndProc接收并处理这些消息而不是父节点?
我使用原始win32 C API。没有MFC或任何类型的库
答案 0 :(得分:2)
您有两种选择。
<强> 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。使用中间人
不要将标签控件直接放在你的窗口上,而是将它放在你放在窗口上的另一个控件(最好是你自己创建的一个控件(除了大小适合孩子)之外,然后在那里处理消息。这样做的好处是避免了上面链接的重新定位问题,但costs a window handle,所以我通常不建议这样做。但它确实有效。如果你为标签页执行此操作,切换页面就像隐藏一个控件并显示另一个控件一样简单! (事实上,这就是属性表对子对话框的作用。)