gpt4 book ai didi

winapi - 如何在 Win32 中为分组框控件着色?

转载 作者:行者123 更新时间:2023-12-02 00:09:49 26 4
gpt4 key购买 nike

我正在尝试设置组框控件的文本颜色和背景。我正在使用对话框和 Win32。为了说明我的问题,我创建了一个项目,其中包含重现问题所需的最少代码。

如果我们拿一个对话框并放置某种位图作为背景,我们可以很容易地看到组框控件的真实颜色。默认情况下,没有任何覆盖,它看起来像这样:

http://localhostr.com/file/ItBy6DF/no%20override.png

我将尝试使用以下代码将文本颜色设置为白色并将文本背景设置为透明:

case WM_CTLCOLORSTATIC: {
HDC hDC = ( HDC )wParam;
SetTextColor( hDC, RGB( 255, 255, 255 ) );
SetBkMode( hDC, TRANSPARENT );
return ( INT_PTR )GetStockObject( HOLLOW_BRUSH );
}

我通过更改 list 来测试启用和不启用视觉样式的外观:

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

使用视觉样式时,对话框如下所示:

http://localhostr.com/file/hyJOhsj/theming.png

根据对话框的背景,背景会更改为 Not Acceptable 纯色。文本颜色也无法更改。禁用视觉样式后,对话框如下所示:

http://localhostr.com/file/8nVzn7t/no%20theming.png

文本颜色已更改且透明度已生效,但组框的矩形甚至显示了文本所在的位置。

我已上传项目here对于任何有兴趣使用它进行测试的人。

我在这个网站上读过其他类似的问题,这些问题似乎表明如果没有子类化或所有者绘制,这可能是不可能的。我不介意子类化,但我首先检查是否有更好的方法来做到这一点。如果唯一的方法是子类化,我会很高兴获得有关应覆盖哪些内容的信息(可能是 WM_PAINT)。我在网上找到了人们创建自己的组框控件的示例,但有些人似乎遇到了 z 顺序问题。因此,通过子类化,处理 WM_NCHITTEST 是否合适?

同样,如果我使用 SetWindowLong() 切换所有者绘制样式,然后对控件进行子类化以获取 WM_DRAWITEM 消息,有什么需要注意的吗?我应该如何处理视觉风格等?

最佳答案

您是否尝试为 WM_CTLCOLORSTATIC 返回 hBrBackground 而不是 GetStockObject(HOLLOW_BRUSH)?

关于winapi - 如何在 Win32 中为分组框控件着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6988236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com