2009-09-27 32 views
2

只是爲了好玩,我正在開發Mozilla XUL的原生Win32端口。 XUL允許創建各種佈局框(hbox,vbox,grid,deck ...)的複雜嵌套結構。對於我的Windows實現,將它們實現爲STATIC子窗口會很方便。因爲那樣我就可以使用獨立於父框位置的x_y_offset來定位他們的子窗口。嵌套子窗口的缺點?

但是,這種方法可能會導致某些窗口有很多嵌套的子窗口。我想知道這種情況是否會有任何不利之處。這裏有人知道嗎?

回答

2

我一直在走這條路,我不建議你真正做出深層次的窗口。許多Windows輔助函數(例如,IsDialogMessage)可以更好地處理「傳統」佈局。另外,Windows中的窗口是相對較重的對象,主要是出於歷史原因。因此,如果你有大量的對象,你可能會遇到侷限性,性能問題等。

我所做的反而是將深嵌套的佈局表示爲常規C++對象的樹,它們平行於更平坦的層次結構實際的窗戶。對象層次結構的某些節點具有它們所代表的「真實」窗口的HWND。您告訴層次結構佈局,並且節點將結果應用於相應的窗口。

例如,層次結構的根可能代表一個對話窗口,而葉節點代表子窗口。但是,層次結構在佈局之間有幾層非窗口對象。

+0

這就是我正在做的!例如,對於網格佈局,我有一個名爲VirtualGrid的類。它只知道它可以繪製的矩形,並不依賴於本地窗口。我到目前爲止唯一的例外是滾動框。因爲在一定區域內滾動一個靜態窗口比一堆子窗口更容易。 – StackedCrooked 2009-09-29 18:40:47

0

粗略拿到這個:

  • 內存開銷了在窗口管理應用程序和操作系統的側
  • 由於比需要做哪些方式更適用於Windows調用外部庫/ OS減速爲您的應用
  • 可能在相當複雜的佈局一些開銷透過長窗消息路徑

這可能取決於無論您希望有一個非常快的implementati並自己做高效的緩衝繪圖,或者希望它能更可靠地工作,投入的時間更少。