首页
论坛
课程
招聘
[求助]MFC里设置静态文本的文字颜色没反应?
2009-5-18 09:42 6671

[求助]MFC里设置静态文本的文字颜色没反应?

2009-5-18 09:42
6671
CDC *pDC = m_StaticWarn->GetDC();
    pDC->SetTextColor(RGB(255, 0, 0));
    m_StaticWarn->RedrawWindow();

按照找到的资料说,这样应该能把静态文本控件m_StaticWarn的文字颜色变红,但是我试验多次都是仍然黑色。

另一种说法是在WM_CTLCOLOR里用,也测试过,仍然没变化。。。

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

        GetDlgItem(IDC_STATIC_WARN)->GetDC()->SetTextColor(RGB(255,0,0));
       
        Invalidate();

        return hbr;
}

何解?

[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 115
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
NETTF小金 活跃值 2 2009-5-18 16:53
2
0
问了做木马的安全界大牛,解决了。需要配合刷子用。CreateSolidBrush

HBRUSH CWrlsmgr_MFCDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
        if (pWnd->GetDlgCtrlID() == IDC_STATIC_WARN)
        {
                pDC->SetBkMode(TRANSPARENT);
                pDC->SetTextColor(RGB(255,0,0));
                return CreateSolidBrush(RGB(255,255,255));
        }

雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-5-18 16:59
3
0
呵呵。支持一下小金!

相信对其他朋友也有帮助!
雪    币: 79
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
林郎君 活跃值 2009-5-19 16:11
4
0
原因是redrawWindow时,又恢复黑色设置!!!

如果是静态控件,可以设一个静态控件扩展类,直接根据消息创建重载扩展类的OnPaint()消息函数,
在OnPaint()里随意操作字符串 //包括旋转字符串,这要配合定时器

要用textout()成员函数哦

注: CDC类里应该有TextOut成员,静态控件类有没有TextOut成员/就忘记了

//把CStatic基类的OnPaint()直接重载是不行的,万一程序中/界面集合中有多个静态控件就会混乱了........

//事实上,CStatic类的OnPaint()继承自CWnd,CWnd::OnPaint()被改写,CWnd的好多子类都将混乱,将只调用用户的OnPaint(),
//相信这也是编译器不允许的!!!(同一个实例里),除非CStatic有自己的OnPaint()成员,覆盖掉父类的OnPaint成员,我没试过
//如果不是这样,黑客只需要编写自己的OnPaint覆盖掉基类的CWnd::OnPaint()就会有不错的效果了
雪    币: 79
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
林郎君 活跃值 2009-5-19 17:25
5
0
另外,基类的绘图消息要屏蔽掉,要用到WM_NCPAINT消息

重载一个空操作即可:

void CXXXXDLG::OnNcPaint(){}
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
雪的思念 活跃值 2009-5-25 01:07
6
0
弱弱的问一下,MFC开发出来的程序可以在手机平台运行???(我是菜鸟哦)
雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-5-25 08:36
7
0
VS2005/2008运行后可以选择开发“智能设备程序”,可以用WM平台的MFC开发。

微软为了吸引更多的开发者,PC平台可以使用的MFC,API等等很多内容都移植到WM平台上来了。

所以有PC平台开发经验的用户要转到WM平台很容易。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bgcelite 活跃值 2009-6-8 19:39
8
0
多谢你们帮助我解决了一个问题,哈哈
游客
登录 | 注册 方可回帖
返回