2011-03-30 129 views
3

有沒有任何方法可將自定義視覺樣式(.msstyle)應用於Windows窗體應用程序,而無需更改整個系統的主題?基本上我們希望我們的應用程序保持相同的主題,而不管在控制面板中設置了什麼。請不要告訴我你是否認爲這是一個好主意。我想知道是否有任何方法可以做到這一點,不涉及專有庫,如一系列本機API調用。謝謝!將自定義視覺樣式(.msstyle)應用於單個Winforms應用程序

+1

您是否解決了您的問題?我也需要這個 – 2016-12-26 13:08:59

+0

@ThiagoSuchorski我留下了一個答案,爲什麼這可能不是一個好主意。我希望它能給你一些指導。 – 2017-02-23 19:04:58

回答

0

SetWindowTheme函數看起來像您正在尋找的解決方案。您必須執行P/Invoke才能使用它。

+0

我發現SetWindowTheme,但我不認爲它做我想要的。這個功能似乎只允許我爲樣式目的改變窗口的類。就我所知,我不認爲它實際上允許我指定一個完全不同的.msstyles文件的路徑。 – luksan 2011-03-31 15:32:00

+0

我可以強制它通過傳遞一個空字符串到窗口類的函數中,而不是使用樣式(AKA Windows Classic),但這不是我想要的。 – luksan 2011-03-31 15:34:27

+0

我接受這個答案,即使它沒有回答我的問題,因爲我嘗試了不接受這裏答案的人。事實上,這個要求非常荒謬,我很確定它只能通過非常複雜的windows API調用攔截來完成,基本上是重新實現樣式庫處理代碼。 – luksan 2011-09-21 17:32:48

0

這可悲的是需要大量的鉤子,而不僅僅是簡單的P/Invoke。

使用託管代碼重寫/創建新控件可能會更快更好。否則,您需要在本機DLL的幫助下掛接主叫,並且非常小心您的操作。

事實上,我不知道如何正確地實施它,恐怕。那麼我會給出更有幫助的答案。整個過程看起來過於複雜,通過查看Style Soft所謂的「VisualStyler」的一個現在被廢棄的工具的代碼(該公司似乎從2014年開始死掉),這很好地支持了所有這些。

另外,如果你真的決定使用uxtheme,你會被Windows主題引擎提供的內容所限制,只限於它的視覺樣式文件格式和hickup(你現在是否還有一個好的編輯器?)。

我希望微軟在爲XP創建主題引擎時可能會做得很好,允許應用程序開發人員將它用於自己的應用程序標識。但是,在主題/ Windows產品標識方面,他們似乎從來沒有這樣做過(另一個例子是DWM沒有公開任何3D轉換功能,但通過濫用這些東西來防止應用程序做出瘋狂的事情可能是一個好主意)。

選項?

  • 在託管代碼中創建自己的控件,自己處理繪圖。
  • 購買適用於Win32應用程序的產品。
  • 開始進入WPF,它提供了現代和理智的方式來創建應用程序主題。
相關問題