【发布时间】:2021-11-13 00:31:43
【问题描述】:
因此,想要将图标放在按钮文本的右侧而不是左侧的简单壮举导致不得不使用所有者绘制按钮(但有人 here 说如果使用视觉主题,自定义绘制实际上是可用的) .好的,很好,但现在我发现当 Windows 标准按钮不处于所有者绘制模式时,您无法真正复制 Windows 标准按钮的功能。
对于正常启用的按钮,我可以通过检查视觉样式是否可用,然后使用 DrawThemeBackground() / DrawThemeText() 或 DrawFrameControl() / DrawText() 来获得正确的外观。然而,即使没有按下 alt 键也会显示热键下划线字符,默认按钮在按下 alt 之前不会显示它。
对于禁用按钮,我无法复制按钮上图标的禁用外观。我在DrawIconEx() 上尝试了DrawState(),但这看起来像是旧的Windows 3.1 类型的灰色图形,而不是视觉风格变暗的图形。我看到有一个图像列表的DrawThemeIcon(),我想我可以尝试一下(我必须测试非视觉样式模式以查看DrawState() 在不使用视觉样式时是否匹配)。
另外,当您将鼠标悬停在按钮上时,状态不会改变,我知道如果使用所有者绘制,这不会发生,也许它仍然可以使用自定义绘制?
所以两个主要问题是:
1 - 按钮/所有者绘制是否有内置功能,仅在按下 alt 时才处理带下划线的热键?
更新到问题 1: 我在 DrawText() 中找到了 DT_HIDEPREFIX,并且使用自定义绘图有 CDIS_SHOWKEYBOARDCUES 标志。但是,对于 Owner Draw,我不确定某处是否有标志?
2 - 如何为禁用的按钮绘制图标以匹配默认按钮的功能?
TIA!!
【问题讨论】: