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