在窗口标题栏添加自定义功能的按钮

Windows自带的画图工具,窗口标题栏有 “保存”/“撤销”/“重做” 等按钮,并且在不同的主题下都有与之匹配的视觉效果。

Firefox也类似,标题栏利用度相当高,不同主题下的显示效果也不错。
(Win7目前可用的最高版本为v115.9.1esr,下载地址:https://ftp.mozilla.org/pub/firefox/releases/ )

如何在Winform中实现窗口标题栏自定义按钮,并且契合不同的操作系统以及不同主题?

找了一圈,有效的结果不多。

Win7 Basic/经典主题,在WM_NCPAINT消息中GDI画图,参考:
https://stackoverflow.com/questions/2841180/how-to-add-an-extra-button-to-the-windows-title-bar

Win7 Aero主题,使用DWM方案,参考:
https://social.msdn.microsoft.com/Forums/en-US/349d5d86-3b59-4116-9c5b-f5240f1bed4d/how-to-add-a-control-to-the-non-client-area-of-a-custom-form?forum=winforms
https://learn.microsoft.com/en-us/windows/win32/dwm/customframe
https://learn.microsoft.com/en-us/windows/win32/api/dwmapi/nf-dwmapi-dwmextendframeintoclientarea

对于Win10/11,有其他技术实现:
https://learn.microsoft.com/en-us/windows/apps/develop/title-bar?tabs=wasdk

对于Win7/XP,以下方案通过创建另一个窗口实现,视觉效果一般,代码比较旧,故不太推荐,仅供参考:
https://thecodeking.co.uk/project/avtivebuttons/
https://github.com/TheCodeKing/ActiveButtons.Net

 

posted @ 2023-02-27 18:53  皮特胖胖  阅读(194)  评论(0编辑  收藏  举报