如何改变CheckBox或RadioBox的文字颜色?

ahzhuo 2006-07-05 05:58:25
使用响应 WM_CTLCOLORSTATIC 消息,然后 SetTextColor() 的方法可以改变传统外观控件的颜色,但是一旦改为 XP 外观的话(使用添加 manifest 资源的方式),文字颜色就没有变化了,又没有解决办法?我不希望采用完全自绘的方式,因为要做到跟 XP 内部实现的效果一样,要花好大功夫,而且容易引入潜在的 bug。
...全文
2064 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
apacheii 2007-01-31
  • 打赏
  • 举报
回复
翻到这个帖子了。。。我最近解决了这个问题
首先要动态载入uxtheme.dll及获得几个函数的入口地址:
OpenThemeData
DrawThemeBackground
然后在
WM_CTLCOLORSTATIC消息处理中创建一个内存DC,在DC上画出背景,再选出画刷,返回这个画刷就可以了
ahzhuo 2006-07-12
  • 打赏
  • 举报
回复
算了,无解,结贴!
siren_ 2006-07-10
  • 打赏
  • 举报
回复
up
ahzhuo 2006-07-09
  • 打赏
  • 举报
回复
UP
ahzhuo 2006-07-07
  • 打赏
  • 举报
回复
真的没有办法了?
livedeal 2006-07-06
  • 打赏
  • 举报
回复
留底
ahzhuo 2006-07-06
  • 打赏
  • 举报
回复
To palmax(南宫煌):

其实我并不是要做全面的 XP 外观,我只需要达到这样的效果:我只修改控件的文字颜色,不管该控件是传统风格还是基于 XP 的 manifest。

有没有办法?
palmax 2006-07-06
  • 打赏
  • 举报
回复
To 楼主:
我的意思就是先用DrawFrameControl自己先画出控件,然后在自己去画xp风格,画的方法可以参考一下CButtonST类(google搜一下)

另外我要说一句,使用manifest是治标不治本的方法,因为此方法呈现xp风格的前提是系统中有uxtheme.dll,并且当前系统主题不是“windows经典”,否则还是没有xp风格的,正是因为manifest对系统的依赖比较大,因为建议自己绘制xp风格,摆脱对系统的依赖
ahzhuo 2006-07-06
  • 打赏
  • 举报
回复
晕~~~跑题了。

不过这也看出在应用了 XP 风格之后,各种控件的行为都可能发生一些与以前传统风格不同的变化,从而导致了有些以前可以使用的改变控件外观的方法行不通了,例如:XP 风格下的 Static 文本控件用响应 WM_CTLCOLORSTATIC 消息来改变文字颜色和背景仍然可行,但是对于 CheckBox 和 RadioButton 控件这个方法就失效了,我真的不想使用完全自绘的方式来做呀,哪位大虾能帮我解决一下这个问题呀?高分奉送!
livedeal 2006-07-06
  • 打赏
  • 举报
回复
我只加了m_up.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON3));这么一句就不行了~~~Static text设成modal frame也不会改变的,要真的自己画的话可就麻烦啊~
ahzhuo 2006-07-06
  • 打赏
  • 举报
回复
如果你用了那个文件后有些控件没有变成 XP 风格的话,那就意味着 XP 本身不支持了,你只有自己去画了,可能你说的“图标按钮”本身就是自画的,XP 当然管不着啦。
livedeal 2006-07-06
  • 打赏
  • 举报
回复
我是试了你的那个xxx.exe.manifest 啊,问你要是碰到图标按钮的话要怎么做呢~????它好像就没有XP的风格了~
ahzhuo 2006-07-06
  • 打赏
  • 举报
回复
楼上的,你试的是 palmax(南宫煌) 的方法还是 striking(硬撑者) 的方法?能不能说清楚一点?
livedeal 2006-07-06
  • 打赏
  • 举报
回复
你说的这个我也试了一下,很好用啊,比以前漂亮多了,不过我有一个按钮,Styles我用了是图标的,这样的话就没有XP的风格了,这个你知道怎么办吗~?
linsi 2006-07-05
  • 打赏
  • 举报
回复
striking,您好,
你说的方法就是最普通的自绘方法呀。我觉得在绘制PushButton,还有CheckBox 和Radio的时候还是有不同的。
我一直对 Radio 按钮的自绘弄不太明白,因为多个Radio进行绘制的时候 Group 这个不太好设置,当一个Radio点击时,另外的按钮不能发生变化。。。。

不知道哪里有这方面的例子可以参考一下。


ahzhuo 2006-07-05
  • 打赏
  • 举报
回复
palmax(南宫煌):

你说的方法我试验了一下,不行啊,它画出来的是传统风格的样式。

striking(硬撑者):

正是你的这种方法在 XP 风格下行不通,我才来这里提问的,不信你也试验一下,在程序的 exe 目录下创建一个名为 xxx.exe.manifest 文件,其中 xxx 是跟 exe 文件相同的文件名,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity

name="XP style manifest"

processorArchitecture="x86"

version="1.0.0.0"

type="win32"/>

<dependency>

<dependentAssembly>

<assemblyIdentity

type="win32"

name="Microsoft.Windows.Common-Controls"

version="6.0.0.0"

processorArchitecture="x86"

publicKeyToken="6595b64144ccf1df"

language="*"

/>

</dependentAssembly>

</dependency>

</assembly>
striking 2006-07-05
  • 打赏
  • 举报
回复
响应WM_CTLCOLOR的消息. 消息函数为

HBRUSH CYourView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

switch(nCtlColor)
{
case CTLCOLOR_STATIC:
pDC->SetTextColor( RGB(255,0,0) );
pDC->SetBkColor( RGB(0,255,0) );
case CTLCOLOR_BTN://checkbox 也是button. radio 也是
pDC->SetTextColor( RGB(255,0,0) );
pDC->SetBkColor( RGB(0,255,0) );
case CTLCOLOR_DLG:
return m_Brush;
}

return m_Brush;
}
linsi 2006-07-05
  • 打赏
  • 举报
回复
palmax,可以讲得详细一点吧?我也很想知道如何用 DrawFrameControl 来进行自绘CheckBox和RadioButton。
linsi 2006-07-05
  • 打赏
  • 举报
回复
palmax,可以讲得详细一点吧?我也很想知道如何用 DrawFrameControl 来进行自绘CheckBox。
palmax 2006-07-05
  • 打赏
  • 举报
回复
自己写基类,重载DrawItem,用DrawFrameControl自己画,DrawFrameControl的第二个参数分别设置DFCS_BUTTONCHECK和DFCS_BUTTONRADIO就是checkbox和radiobutton了,文字也用DC去画,不仅可以设置颜色,字体也可以设置
大家用惯了BSskin和VCLskin,但是这个跟专业! 支持的开发语言 Borland Delphi 4/5/6 Borland Delphi 7 Borland Delphi 8 Borland Delphi 2005 Borland Delphi 2006 CodeGear Delphi 2007 支持的操作系统 Windows Vista Wndows 2000/XP/2003 Windows NT4.0 Windows Me Windows 98/98SE Windows 95 版本信息 当前版本:3.0 文件大小:24.9MB 更新日期:2006-12-6 下载次数:22670 软件概述 Skin++ For Delphi目前全面支持Delphi4、Delphi5、Delphi6、Delphi7、Delphi8、Delphi2005、Delphi2006。 迄今为止,Delphi支持4种类型的应用程序: 1、VCL Forms Application – Delphi for Win32 (该类型在Delphi4/5/6/7/2005/2006所有版本包含); 2、VCL Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含); 3、Windows Forms Application – C# Builder (该类型在Delphi2005/2006中包含); 4、Windows Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含)。 Skin++对以上4种Delphi程序类型做了全面的支持。 试用版本描述与运行截图 1.在本安装盘中,包含了Delphi的各个版本(D6,D7,D8,D2005,D2006)Skin++测试例子; 2.关于如何使用Skin++,请参考文档《Skin++ For Delphi [All Edition]使用帮助》; 3.要查询Skin++所有的接口,请参考文档《Skin++接口描述》; 4.本安装盘提供一套试用皮肤PixOS.ssk,正式版用户将获得网站上更多更精美的皮肤。并可获得定期更新; 5.Skin++正式版中提供强大的皮肤设计工具Skin++Builder。 该工具完成皮肤所有的设计工作,并可以全自动导入Windows主题、第三方主题; Skin++Builder使用详情请参考《Skin++Builder Help》; 6.案例说明: 我们以Delphi2006 VCL Win32的测试例子为例,描述其组成。 打开\Delphi 2006\VCL Forms Application - Delphi For Win32\目录中的MDIAPP.exe 该例子是一个MDI类型的程序。主窗口部分演示Skin++在MDI方面处理的各个细节。 如:主菜单条、主弹出菜单、系统菜单、工具条、状态条、MDI客户区、MDI子窗口、MDI子窗口最大化后等各个部分的换肤细节。 Skin++ 3.0 可以对皮肤进行动态的色调设置 这个功能可以使您的程序可以瞬间拥有N套色调的皮肤。 更改色调样例1: 我们分以下几个页面对Delphi的全部控件进行了演示: Buttons、Static、Controls with ScrollBar(带滚动条的控件)、Splitter、TabControls、TrackBar & Progress、Misc Controls、Dialog、DataControls 6.1 Buttons 该部分我们演示了Skin++对Delphi的各种类型的按钮进行的换肤支持, 包括BitBtn按钮、SpeedButton、Tbutton、CheckBoxRadioBox 在该部分,还演示了对按钮进行多风格的换肤效果,“Style 2”按钮和其他按钮不同,呈现了其特有样式。 这种效果一般用在网络电话、多媒体软件、网络聊天等需要同时支持多种按钮风格的地方。 每个按钮具有其固定的5中状态:正常、按下、高量、禁用、默认。在该窗体中演示了每种按钮的5中状态。 并且在Skin++ 3.0 中,支持Focus的效果。通过Tab或方向键可以看到焦点在每个按钮上移动。 6.2 Static 该部分演示了Skin++ 对Label、GroupBox、右键菜单、Panel、FlowPanel、GridPanel等控件的支持。 值得一提的是,Skin++对Label的支持是彻底,并且不像其他的换肤软件需要在窗体上放置一个
一共2个部分,分别下载。 用过BSskin或者VCLskin的哥们 支持的开发语言 Borland Delphi 4/5/6 Borland Delphi 7 Borland Delphi 8 Borland Delphi 2005 Borland Delphi 2006 CodeGear Delphi 2007 支持的操作系统 Windows Vista Wndows 2000/XP/2003 Windows NT4.0 Windows Me Windows 98/98SE Windows 95 版本信息 当前版本:3.0 文件大小:24.9MB 更新日期:2006-12-6 下载次数:22670 软件概述 Skin++ For Delphi目前全面支持Delphi4、Delphi5、Delphi6、Delphi7、Delphi8、Delphi2005、Delphi2006。 迄今为止,Delphi支持4种类型的应用程序: 1、VCL Forms Application – Delphi for Win32 (该类型在Delphi4/5/6/7/2005/2006所有版本包含); 2、VCL Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含); 3、Windows Forms Application – C# Builder (该类型在Delphi2005/2006中包含); 4、Windows Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含)。 Skin++对以上4种Delphi程序类型做了全面的支持。 试用版本描述与运行截图 1.在本安装盘中,包含了Delphi的各个版本(D6,D7,D8,D2005,D2006)Skin++测试例子; 2.关于如何使用Skin++,请参考文档《Skin++ For Delphi [All Edition]使用帮助》; 3.要查询Skin++所有的接口,请参考文档《Skin++接口描述》; 4.本安装盘提供一套试用皮肤PixOS.ssk,正式版用户将获得网站上更多更精美的皮肤。并可获得定期更新; 5.Skin++正式版中提供强大的皮肤设计工具Skin++Builder。 该工具完成皮肤所有的设计工作,并可以全自动导入Windows主题、第三方主题; Skin++Builder使用详情请参考《Skin++Builder Help》; 6.案例说明: 我们以Delphi2006 VCL Win32的测试例子为例,描述其组成。 打开\Delphi 2006\VCL Forms Application - Delphi For Win32\目录中的MDIAPP.exe 该例子是一个MDI类型的程序。主窗口部分演示Skin++在MDI方面处理的各个细节。 如:主菜单条、主弹出菜单、系统菜单、工具条、状态条、MDI客户区、MDI子窗口、MDI子窗口最大化后等各个部分的换肤细节。 Skin++ 3.0 可以对皮肤进行动态的色调设置 这个功能可以使您的程序可以瞬间拥有N套色调的皮肤。 更改色调样例1: 我们分以下几个页面对Delphi的全部控件进行了演示: Buttons、Static、Controls with ScrollBar(带滚动条的控件)、Splitter、TabControls、TrackBar & Progress、Misc Controls、Dialog、DataControls 6.1 Buttons 该部分我们演示了Skin++对Delphi的各种类型的按钮进行的换肤支持, 包括BitBtn按钮、SpeedButton、Tbutton、CheckBoxRadioBox 在该部分,还演示了对按钮进行多风格的换肤效果,“Style 2”按钮和其他按钮不同,呈现了其特有样式。 这种效果一般用在网络电话、多媒体软件、网络聊天等需要同时支持多种按钮风格的地方。 每个按钮具有其固定的5中状态:正常、按下、高量、禁用、默认。在该窗体中演示了每种按钮的5中状态。 并且在Skin++ 3.0 中,支持Focus的效果。通过Tab或方向键可以看到焦点在每个按钮上移动。 6.2 Static 该部分演示了Skin++ 对Label、GroupBox、右键菜单、Panel、FlowPanel、GridPanel等控件的支持。 值得一提的是,Skin++对Label的支持是彻底,并且不像其他的换肤软件需要在窗体

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧