0

当我创建一个组框时,我打算将它用作包含其他一些窗口的容器。所以我认为其他窗口应该是组框的子窗口。但是当我使用 Spy++ 检查 Windows 中的一些窗口时,我发现几乎没有人这样做,甚至 Windows 的窗口也不这样做;分组框与其内容窗口在同一层级;它们共享同一个父窗口。

在 Visual C++ 的对话框编辑器中,我找不到将一个控件的父级设置为另一个控件的方法。(如果有办法,请告诉我。)也许这就是为什么我找不到很多作为父窗口的组框,因为它们位于 Visual C++ 对话框编辑器中构建的对话框中。

我认为如果组框是其内容窗口的父级会更好,因为它在逻辑上更正确,并且如果我更改组框的位置,内容也会随之移动。这样做是不是太麻烦了,还是有其他理由不这样做?

4

1 回答 1

3

不这样做的主要原因是它会破坏正常的对话框键盘处理(例如,按 Tab 键在控件中移动)。

对话框管理器在寻找下一个控件以给予焦点时不会递归到任意控件。它具有处理子对话框(具有DS_CONTROL样式集的对话框)的代码,但其他控件的子控件将被忽略。

此外,从子控件发送的消息WM_COMMAND不会返回到您的对话框过程,除非您对组框进行子类化并手动转发它们。

组框被设计为放置在其他控件周围 - 它是透明的并且不会呈现在它们之上,也不会吞下鼠标点击。没有理由不将它作为它周围的控件的兄弟。

于 2013-10-14T11:19:32.447 回答