Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 子窗口嵌套的缺点?_C++_Winapi - Fatal编程技术网

C++ 子窗口嵌套的缺点?

C++ 子窗口嵌套的缺点?,c++,winapi,C++,Winapi,只是为了好玩,我正在开发Mozilla XUL的本机Win32端口。XUL允许创建各种布局框(hbox、vbox、grid、deck…)的复杂嵌套结构。对于我的Windows实现,将它们实现为静态子窗口会很方便。因为这样我就可以使用独立于父框位置的x&y偏移来定位它们的子窗口 但是,这种方法可能会导致某些窗口具有大量嵌套的子窗口。我想知道这种情况是否会有不利之处。这里有人知道吗?这是一个粗略的看法: 应用程序和操作系统端窗口管理的内存开销 由于对外部库/操作系统的调用而降低了速度,这对wind

只是为了好玩,我正在开发Mozilla XUL的本机Win32端口。XUL允许创建各种布局框(hbox、vbox、grid、deck…)的复杂嵌套结构。对于我的Windows实现,将它们实现为静态子窗口会很方便。因为这样我就可以使用独立于父框位置的x&y偏移来定位它们的子窗口

但是,这种方法可能会导致某些窗口具有大量嵌套的子窗口。我想知道这种情况是否会有不利之处。这里有人知道吗?

这是一个粗略的看法:

  • 应用程序和操作系统端窗口管理的内存开销
  • 由于对外部库/操作系统的调用而降低了速度,这对windows来说比应用程序所需的要多
  • 复杂布局中的长窗口消息路径可能会带来相当大的开销

这可能取决于您是想要一个非常快速的实现,自己进行高效的缓冲绘图,还是希望它工作更可靠,投入更少的时间。

我一直在走这条路,我不建议您真正对windows进行深层次的分层。许多Windows助手函数(例如,
IsDialogMessage
)在“传统”布局中工作得更好。此外,窗户中的窗户是相对较重的物体,主要是出于历史原因。因此,如果有大量对象,可能会遇到限制、性能问题等

我所做的是将深度嵌套布局表示为与普通窗口并行的层次结构的规则C++对象树。对象层次结构的某些节点具有它们所表示的“真实”窗口的HWND。告诉层次结构进行布局,节点将结果应用于相应的窗口


例如,层次结构的根可以表示对话框窗口,叶节点表示子窗口。但是层次结构之间有几个非窗口对象层,它们知道布局。

这正是我要做的!例如,对于网格布局,我有一个名为VirtualGrid的类。它只知道可以绘制的矩形,不依赖于本机窗口。到目前为止,我唯一的例外是scrollbox。因为滚动一个静态窗口要比在某个区域内滚动一堆子窗口容易得多。