作为参考,我正在使用本文中概述的窗口超类方法。如果我想处理WM_NOTIFY
来自超类中的基本控件的消息(即用于自定义绘图),则会出现特定问题,我要么需要将它们从父窗口反映回来,要么将我自己的窗口设置为父窗口(在 CREATESTRUCT 内部传递WM_(NC)CREATE
给基班级)。如果我有一个超类,则此方法可以正常工作。如果我超类我的超类,那么我会遇到问题。现在 3 个 WindowProcs 在同一个 HWND 中运行,当我反映WM_NOTIFY
消息(或将它们从上面的父技巧发送给我自己)它们总是转到最外层(最派生的)WindowProc。我无法判断它们是针对内部超类的消息(基本消息应该发送到第一个超类)还是针对外部超类的消息(来自内部超类的消息针对外部超类)。这些消息无法区分,因为它们都来自具有相同控制 ID 的同一个 HWND。有没有办法在不创建新窗口来封装每个继承级别的情况下解决这个问题?
对不起,文字墙。这是一个很难解释的概念。这是一个图表。
单个超类:
SuperA::WindowProc() -> Base::WindowProc()---\ ^--------WM_NOTIFY(基础)--------/
超类的超类:
SuperB::WindowProc() -> SuperA::WindowProc() -> Base::WindowProc()---\ ^--------WM_NOTIFY(基础)--------+------------------------/ ^--------WM_NOTIFY(A)-----------/
第二种情况下的WM_NOTIFY
消息都来自相同的 HWND 和控制 ID,因此我无法区分用于 SuperA(来自 Base)的消息和用于 SuperB(来自 SuperA)的消息。有任何想法吗?