2009-08-07 63 views
2

我知道這可以在系統級別進行控制,但是我想覆蓋系統設置,並且只有我的應用程序具有某種外觀。我假設必須有一個Windows API函數來控制這個,因爲我已經看到了另一個Windows應用程序。如何控制Windows窗體上的邊框厚度和顏色?

(這是沒有必要深究原因,爲什麼我不應該這樣做)

+2

好東西,你把聲明在那裏,不然你就已經得到了10點的答案告訴你不要做這個(因爲你無疑會知道)。這很容易成爲stackoverflow中最煩人的方面。 – MusiGenesis 2009-08-07 13:10:23

回答

2

如果你想爲你的應用程序的自定義外觀,我只想讓我的形式無國界和處理都要親力親爲,無論是通過繪製在Paint事件的窗體上,或者在Resize事件中移動控件(面板等)。您必須處理諸如拖動,調整大小,關閉/最小化等操作,但這些都不是特別困難。

這是my answer到一個類似的問題,它顯示了自己做的基本知識(它是爲Windows Mobile,但它也可以在常規窗口中工作)。

+0

問這個問題後,我開始走下這條路。我希望有更好的辦法。如果我自己畫東西,我是否仍然可以讓窗口通過發出開始調整大小的消息或其他東西來調整大小?不,我不能複製當窗口被調整大小時(當窗口設置爲「拖動時顯示窗口內容」被取消激活時)看到的虛線效果。 – Fantius 2009-08-07 14:02:04

+0

好點 - 我不知道這一點。我剛剛檢出了iTunes(在Windows中完全是所有者繪製的,就像你想要做的那樣),並且它在拖動時顯示了一條虛線輪廓,但有趣的是,它與正常點不一樣的虛線邊界Windows窗口,這意味着他們也在自己處理大綱。 – MusiGenesis 2009-08-07 14:24:01

+1

我認爲這個提綱會比較容易實現。在mousedown事件中,您將彈出帶有透明背景和虛線邊框的第二個無邊界窗體,並移動該窗體直到mouseup事件,然後將您的真實窗體移動到新位置。 – MusiGenesis 2009-08-07 14:26:32

2

應用程序窗口的這些外部元素統稱爲窗口「chrome」,並確實由操作系統呈現。在Windows API級別使用各種標誌來控制每個窗口實例的某些方面(例如控制框,邊框,最小/最大按鈕等的存在),但可調整大小的窗口的邊框寬度由系統設置以確保一致性,並且不能通過窗口來配置窗口。

在許多情況下,您可以通過與Windows API進行交互來獲得對未由.NET公開的窗口的某些方面的控制權,並且閱讀windows API文檔以確定哪些方面可行低等級。我建議閱讀CreateWindowEx的文檔作爲起點。

http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx

.NET允許您更改FormBorderStyle屬性沒有邊框,單像素寬度的邊框,並調整大小(厚邊框)中進行選擇。如果您想要自定義某些內容,則必須將.NET邊框樣式設置爲無,然後承擔自己渲染窗口鑲邊的責任。這需要呈現自己的標題欄,最小/最大按鈕和窗口邊框。這不是一件輕鬆的事情,但許多應用程序都這麼做。如果你真正想要的是控制邊界寬度,那麼要走很長的路。

本文介紹如何在WPF中接近這個任務,也可能有用。

Window Chrome In WPF

+0

+1,但這是一個相對較輕的事業。通常不值得,但一點也不難。 – MusiGenesis 2009-08-07 19:51:36