当我创建一个组合框时,我打算将它用作容器来包含其他一些窗口。所以我认为其他窗口应该是组合框的子窗口。但是,当我使用Spy ++来检查Windows中的某些窗口时,我发现几乎没有人这样做,即使Windows的窗口也没有这样做;组框及其内容窗口处于同一级别;他们共享一个父窗口。
在Visual C ++的对话框编辑器中,我找不到将一个控件的父级设置为另一个控件的方法。 (如果有办法,请告诉我。)也许这就是为什么我找不到很多组框作为父窗口的原因,因为它们位于一个在Visual C ++的对话框编辑器中构建的对话框中。
我认为如果组框是其内容窗口的父级是更好的,因为它在逻辑上更正确,如果我更改组框的位置,则内容随之移动。这样做太麻烦还是有其他原因不这样做?
答案 0 :(得分:3)
不这样做的主要原因是它会破坏正常的对话键盘处理(例如按Tab键移动控件)。
在查找下一个控件以获得焦点时,对话框管理器不会递归到任意控件。它具有处理子对话框的代码(具有DS_CONTROL
样式集的对话框),但是将忽略作为其他控件的子对象的控件。
此外,从WM_COMMAND
这样的子控件发送的消息不会返回到对话框过程,除非您对组框进行子类化并手动转发它们。
组框被设计为放置在其他控件周围 - 它是透明的,不会渲染它们,也不会吞下鼠标。没有理由不将它作为它所围绕的控件的兄弟。