2010-03-16 50 views
3

我正在製作一個簡單的表單構建器,它承載「活」的.NET對象,併爲指南(網格),對象選擇等執行自己的繪圖。事情進展順利,但正如您在下面看到的,自定義繪畫不是完全最佳,因爲它總是在託管控件後面繪製。如何在.NET中繪製託管控件的「頂部」?

Selection Sample http://img405.imageshack.us/img405/8572/selectsample01.png

如何修改我的畫邏輯畫「上面」的所有託管的控制?

如果圖像是在您的SO查看它在這裏可以查看丟失: http://img405.imageshack.us/img405/8572/selectsample01.png

回答

1

這不是Z順序問題。問題是你不能在另一個窗口的客戶矩形內繪製。您的案例中的「文本」窗口。類似於「窗體」的窗口已打開WS_CLIPCHILDREN樣式標誌。

我不完全確定Windows窗體設計器如何設法圍繞控件繪製選擇手柄。但是當我用Spy ++看設計師時,我看到了兩個不可見的窗口,它們是設計區域的大小。它們被命名爲「OverlayControl」和「AdornerWindow」。我的猜測是,設計師實際上是在其中一個窗口上繪製手柄(OverlayControl),並且窗口背景是透明的。

我在this thread中使用了類似的技巧,您可能可以利用代碼。你也真的應該看看這個magazine article.

+0

+1這看起來很有希望。 (明天需要花費幾個小時來完成這些概念。)我擔心它可能會出現某種重疊的想法,但是自MFC MFC開始我就沒有處理過它。希望有一個更簡單的.NET解決方案,但這些鏈接是偉大的線索!非常感謝nobugz!順便說一下,使用覆蓋層也解決了一些其他與設計師有關的問題。 – 2010-03-17 01:58:38

0

從它出現的託管控制仍然集中,這意味着它應該在前面畫的屏幕截圖。

從託管控件中移除焦點並確保z順序設置正確。

如果您控制z順序,那麼確保您按照z順序進行繪畫。

如果你沒有z順序,那麼你需要實現一個。

+0

我試着改變焦點,但不管我如何設置它,我的繪圖仍然出現在其他控件的後面。這些控件託管在我繪製的面板中,所以我不確定我可以使用z順序做什麼。 – 2010-03-16 18:33:23

相關問題