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