简单的问题。如何更改关闭,最小化,最大化按钮的图标。我可以在Winforms和WPF中执行此操作吗?
答案 0 :(得分:7)
处理WM_NCPAINT消息时,将绘制窗口上的这些图标,标题和边框。因此,您接管绘制此方法的方法是处理此消息。
但是您无法访问有关图标的状态信息(即,您应该在其中按状态绘制哪个按钮,因为用户当前正在点击它)。你甚至不知道鼠标处理代码到底认为这些图标的确切位置。
因此,为了接管非客户端绘制,您还需要接管非客户端鼠标处理,整个问题只会滚雪球,直到您编写了数千行代码并且您的窗口仍然当用户试图拖动它时,表现不正常
这是在非托管代码中,在托管代码(C#/ .Net)中,这甚至更难,因为您还必须进行互操作以获取您需要使用的某些API。
所以答案是:是的,但它在WinForms和WPF中比在C ++中更难,而那些尝试过它的人现在都很秃头。
答案 1 :(得分:5)
真正的答案是你不应该这样做。用户希望所有应用程序都能正常工作。让他们尝试弄清楚你使用什么漂亮的新图标意味着最小化可能会让他们不高兴。
答案 2 :(得分:4)
这样做并不难,但需要做很多工作 - 你必须自己更换窗框并自己处理所有内容,默认窗口框架中有很多功能你必须重写 - 你还需要在启用Aero的情况下为Vista / 7编写不同的代码。
在WPF中,您可以使用http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx
中的各种技巧在WinForms中,您使用相同的基本技术,但我不知道哪个页面总结了上述链接等所有细节。
答案 3 :(得分:2)
在wpf中,您可以为您的Window设置WindowStyle="None"
,然后为其设置自定义TitleBar,使用最小化,最大化和关闭按钮。我之前做过这个。您需要执行一些事件处理以执行最小化,最大化,关闭,拖动等。
答案 4 :(得分:0)
如果你想控制这些按钮的外观,你必须创建自己的按钮。这是使用Windows功能编写Windows应用程序的一个价值(它们具有标准外观)。
答案 5 :(得分:0)
是的,您必须创建自己的窗口样式。例如,请参阅FluidKit,GlassWindows。
答案 6 :(得分:0)
将基本主题从/ usr / share / icons /复制到文档。 打开index.theme并编辑以下内容。 [图标主题]名称=基本
收件人
[图标主题]名称= elementaryNewTheme
将文件夹更改为相同的名称。
获取要替换的图标,然后替换“ elementaryNewTheme”文件夹中的图标。 (您可以使用万神殿文件的搜索选项来简化此操作)
与管理员一起打开万神殿(在码头上右键单击->以管理员身份打开新窗口)
现在将“ elementaryNewTheme”从/ home / yourUserName / Documents /复制到/ usr / share / icons /
使用基本调整将图标包更改为“ elementaryNewTheme”
应该可以解决问题。