关于MFC一个字体颜色问题
我在窗口加了一个statictext控件内容大概是"注意:....."我只需要把这个字弄成红色请问该如何处理?控件ID为IDC_STATIC7请解答详细步骤,不然有可能不...
我在窗口加了一个static text控件 内容大概是"注意:....."
我只需要把这个字弄成红色 请问该如何处理?
控件ID为IDC_STATIC7
请解答详细步骤,不然有可能不懂..谢谢了 展开
我只需要把这个字弄成红色 请问该如何处理?
控件ID为IDC_STATIC7
请解答详细步骤,不然有可能不懂..谢谢了 展开
5个回答
展开全部
yvhpfiipfi网友非常有耐心!
但二楼的回答是错的。
控制字体颜色的的确是DC,因此如果通过CDC的函数SetTextColor能够有效改变字体的颜色,逻辑上似乎是正确的。但实际上按照二楼的代码工作,运行后是无效的。
原因是,不管控件也好,窗口也好,真正绘图的代码是在WM_PAINT消息的窗口过程中执行。在外部,通过代码获取static控件的DC,然后无论怎样操控该DC,当static收到WM_PAINT消息后,static的窗口过程,都会重新设置DC的颜色,是static控件永远具有自己默认的颜色设置。因此,在外部改变static控件的DC属性是徒劳的。
解决方法可以像yvhpfiipfi网友所说的那样,但该技术是相当陈旧的,这个是MFC早期的技术,并且在以后的发展中显示出了这种技术的一些缺点,具体原因可以参考这个链接:
http://msdn.microsoft.com/zh-cn/library/eeah46xd.aspx
因此,实际上MSDN提倡我们使用消息反射机制来处理控件自身的一些特性。即,通过C++类派生机制,继承控件默认的一些属性和行为,在此基础上改造父类,改造的一种技术是称为“消息反射”,如果从static控件派生子类,并在VS的类视图模式中,在属性页中选择“消息”选项卡,可以发现有一些以“=”开始的消息,这些消息就是消息反射!
我在之前有过一篇帖子的回答,里面有详细的代码和操作步骤,但那篇帖子是回答怎样当鼠标进入static控件动态改变控件的文本颜色和背景颜色的,其实,那个帖子的代码比这篇帖子的实现更为复杂,因此,楼主可以将那篇帖子的代码稍作改动就可以了,链接地址:
http://zhidao.baidu.com/question/146607672.html
但二楼的回答是错的。
控制字体颜色的的确是DC,因此如果通过CDC的函数SetTextColor能够有效改变字体的颜色,逻辑上似乎是正确的。但实际上按照二楼的代码工作,运行后是无效的。
原因是,不管控件也好,窗口也好,真正绘图的代码是在WM_PAINT消息的窗口过程中执行。在外部,通过代码获取static控件的DC,然后无论怎样操控该DC,当static收到WM_PAINT消息后,static的窗口过程,都会重新设置DC的颜色,是static控件永远具有自己默认的颜色设置。因此,在外部改变static控件的DC属性是徒劳的。
解决方法可以像yvhpfiipfi网友所说的那样,但该技术是相当陈旧的,这个是MFC早期的技术,并且在以后的发展中显示出了这种技术的一些缺点,具体原因可以参考这个链接:
http://msdn.microsoft.com/zh-cn/library/eeah46xd.aspx
因此,实际上MSDN提倡我们使用消息反射机制来处理控件自身的一些特性。即,通过C++类派生机制,继承控件默认的一些属性和行为,在此基础上改造父类,改造的一种技术是称为“消息反射”,如果从static控件派生子类,并在VS的类视图模式中,在属性页中选择“消息”选项卡,可以发现有一些以“=”开始的消息,这些消息就是消息反射!
我在之前有过一篇帖子的回答,里面有详细的代码和操作步骤,但那篇帖子是回答怎样当鼠标进入static控件动态改变控件的文本颜色和背景颜色的,其实,那个帖子的代码比这篇帖子的实现更为复杂,因此,楼主可以将那篇帖子的代码稍作改动就可以了,链接地址:
http://zhidao.baidu.com/question/146607672.html
展开全部
楼主你好!
请问你的是在基于对话框的界面上还是基于文档视图式的?
如果是后者,二楼朋友的是个方法,但有更简单的方法。如果是基于对话框的,就这样:
为这个对话框添加WM_CTLCOLOR消息,然后只需要添加这几行:
if(nCtlColor == CTLCOLOR_STATIC)
pDC->SetTextColor(RGB(255,0,0));
是不是很简单!
其中,CTLCOLOR_STATIC表示你要设置颜色和样式的控件的类型为静态文本控件,在这里,因为你是要设置静态控件,所以取这个值。
详细说明,请查看MSDN,在索引里输入OnCtlColor,也就是说,这个函数是你添加WM_CTLCOLOR消息以后为你加入的函数。
希望能为你带来帮助,谢谢!
请问你的是在基于对话框的界面上还是基于文档视图式的?
如果是后者,二楼朋友的是个方法,但有更简单的方法。如果是基于对话框的,就这样:
为这个对话框添加WM_CTLCOLOR消息,然后只需要添加这几行:
if(nCtlColor == CTLCOLOR_STATIC)
pDC->SetTextColor(RGB(255,0,0));
是不是很简单!
其中,CTLCOLOR_STATIC表示你要设置颜色和样式的控件的类型为静态文本控件,在这里,因为你是要设置静态控件,所以取这个值。
详细说明,请查看MSDN,在索引里输入OnCtlColor,也就是说,这个函数是你添加WM_CTLCOLOR消息以后为你加入的函数。
希望能为你带来帮助,谢谢!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
yvhpfiipfi和silvergingko这两位朋友回答非常仔细,不过,MFC编程,我们有时候是只要简单有效就行,一般不需要考虑新的技术。
当然,并不是讲新技术就要学习了,但是在某些问题上,实现步骤越简单,对我们维护代码的工作就越方便。
yvhpfiipfi这位朋友讲的方法,非常普遍,也很通用,我们都是采用的这种方法设置static text控件的颜色,以及让它是不是透明,等等。这也符合控件重绘的基本思路。
另个,二楼朋友的,也没给控件指定RGB值呀,怎么能设置颜色呢,奇怪了。
用yvhpfiipfi的方法吧,简单有效,理解起来容易,维护也方便。因为目前大多数VC编程的,都是用的这种方法。
当然,并不是讲新技术就要学习了,但是在某些问题上,实现步骤越简单,对我们维护代码的工作就越方便。
yvhpfiipfi这位朋友讲的方法,非常普遍,也很通用,我们都是采用的这种方法设置static text控件的颜色,以及让它是不是透明,等等。这也符合控件重绘的基本思路。
另个,二楼朋友的,也没给控件指定RGB值呀,怎么能设置颜色呢,奇怪了。
用yvhpfiipfi的方法吧,简单有效,理解起来容易,维护也方便。因为目前大多数VC编程的,都是用的这种方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-11-19
展开全部
CWnd *pWnd = GetDlgItem(IDC_STATIC7);
CDC *pDc = pWnd->GetDC();
pDc->SetTextColor();
pWnd->ReleaseDC(pDc);
CDC *pDc = pWnd->GetDC();
pDc->SetTextColor();
pWnd->ReleaseDC(pDc);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-11-19
展开全部
建议你用一个图片
或textout
否则很麻烦
或textout
否则很麻烦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询