mfc-MFC中static text字体颜色和大小的设置问题

问题描述

MFC中static text字体颜色和大小的设置问题

我通过WM_CTLCOLOR消息调用OnCtlColor函数
if (pWnd->GetDlgCtrlID() == IDC_STATIC)
{
pDC->SetTextColor(RGB(0, 100, 0));
}
确实是成功修改了static text字体的颜色,
但是每次一旦OnPaint函数被调用后,颜色就消失了,
不知道怎么解决,求大神解答一下!!!
还有就是通过这种方法我无法改变group box标题栏的字体的大小,只能改变颜色,
大神一并帮我解答了吧,谢谢了

解决方案

https://msdn.microsoft.com/ja-jp/library/0wwk06hc.aspx

和上面的sample比较一下你的代码,没少啥吗?

最后设置brush那行可以注掉,返回默认的brush。

解决方案二:

完整代码贴一下吧。注意用csdn的代码tag哈,否则格式很乱。

解决方案三:

把你修改颜色的代码放到OnPaint函数中

解决方案四:

我用wizard生成的dialog代码,增加下面函数后就好用了。

如果你的OnCtlColor函数没有什么不同,是否修改了其他函数呢?

HBRUSH CmfcDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if(pWnd->GetDlgCtrlID() == IDC_STATIC_1)
    {
        pDC->SetTextColor(RGB(255,0,0));
    }

    return hbr;
}

解决方案五:

失效是因为界面重绘了,原来设置的红色代码不在重绘范围内,所以就失效了,可以把设置颜色部分放到OnPaint中

解决方案六:

抱歉,回复晚了! 我是在OnPaint函数里添加了如下代码,但是没有任何作用,怎么破

```void CMingTaiReadIDDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // 使图标在工作区矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
}
else
{

    if(flag_caitu == 0)
    {
        CDialog::UpdateWindow();
        ShowImage(mFrontPage,IDC_FRONT_PIC);
        ShowImage(mBackPage,IDC_BACK_PIC);

        pwnd=GetDlgItem(IDC_STATIC1);
        pDC = pwnd->GetDC();
        pDC->SetTextColor(RGB(0, 0, 180));

        pwnd=GetDlgItem(IDC_STATIC2);
        pDC = pwnd->GetDC();
        pDC->SetTextColor(RGB(0, 0, 180));

        pwnd=GetDlgItem(IDC_STATIC3);
        pDC = pwnd->GetDC();
        pDC->SetTextColor(RGB(0, 0, 180));

        pwnd=GetDlgItem(IDC_STATIC4);
        pDC = pwnd->GetDC();
        pDC->SetTextColor(RGB(0, 0, 180));

        pwnd=GetDlgItem(IDC_STATIC);
        pDC = pwnd->GetDC();
        pDC->SetTextColor(RGB(0, 0, 180));
        /*
        if (pwnd->GetDlgCtrlID() == IDC_STATIC1 || pwnd->GetDlgCtrlID() == IDC_STATIC2 || pwnd->GetDlgCtrlID() == IDC_STATIC3
        || pwnd->GetDlgCtrlID() == IDC_STATIC4 || pwnd->GetDlgCtrlID() == IDC_STATIC5)
        {
            pDC = pwnd->GetDC();
            pDC->SetTextColor(RGB(0, 0, 180));//文字为红色
        }

        if (pwnd->GetDlgCtrlID() == IDC_STATIC)
        {
            pDC = pwnd->GetDC();
            pDC->SetTextColor(RGB(0, 100, 0));//文字为红色
        }
        */
        g_strMessage += "执行到OnPaintrn";
        GetDlgItem(IDC_EDIT_INFO)->SetWindowText(g_strMessage);
    }
    //UpdateData(false); 

    CDialogEx::OnPaint();
}

}


解决方案七:

不怎么会用插入代码啊

 void CMingTaiReadIDDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用于绘制的设备上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使图标在工作区矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {

        if(flag_caitu == 0)
        {
            CDialog::UpdateWindow();
            ShowImage(mFrontPage,IDC_FRONT_PIC);
            ShowImage(mBackPage,IDC_BACK_PIC);

            pwnd=GetDlgItem(IDC_STATIC1);
            pDC = pwnd->GetDC();
            pDC->SetTextColor(RGB(0, 0, 180));

            pwnd=GetDlgItem(IDC_STATIC2);
            pDC = pwnd->GetDC();
            pDC->SetTextColor(RGB(0, 0, 180));

            pwnd=GetDlgItem(IDC_STATIC3);
            pDC = pwnd->GetDC();
            pDC->SetTextColor(RGB(0, 0, 180));

            pwnd=GetDlgItem(IDC_STATIC4);
            pDC = pwnd->GetDC();
            pDC->SetTextColor(RGB(0, 0, 180));

            pwnd=GetDlgItem(IDC_STATIC);
            pDC = pwnd->GetDC();
            pDC->SetTextColor(RGB(0, 0, 180));

            g_strMessage += "执行到OnPaintrn";
            GetDlgItem(IDC_EDIT_INFO)->SetWindowText(g_strMessage);
        }
        CDialogEx::OnPaint();
    }
}

时间: 2024-09-29 06:29:37

mfc-MFC中static text字体颜色和大小的设置问题的相关文章

使vb6.0 textbox中选中的字体颜色改变,不是用richtextbox

问题描述 使vb6.0 textbox中选中的字体颜色改变,不是用richtextbox 只要能解决就行,随便什么方法,.....(麻烦一点也行) 虚心求教,小弟想知道具体怎么实现,有代码最好.谢谢! 解决方案 textbox不行,还是得用richtextbox 解决方案二: 需要重绘文本.重绘文本需要子类化窗口,但是VB6调试这种窗口回调函数只要遇到错误就导致IDE崩溃.所以不建议你搞. 解决方案三: 当然,难度也不算非常大,你要肯出个千把块钱,发布到威客网站上,会有一些VB爱好者帮你写出一堆

哪位高手可以解释下visual studio中C#中的不同字体颜色代表什么意思

问题描述 哪位高手可以详细解释下visualstudio中C#中的不同字体颜色代表什么意思?如果方便的话,请顺便解释下那些不同的图标代表什么意思,谢谢!BTW,如果发错帖子了,请斑竹帮助删除,谢谢! 解决方案 解决方案二:同问...解决方案三:是编辑器里面的字体颜色吗?常见的就是蓝色表示关键字,绿色表示自定义类型吧,可以看Tools->Options,里面的Environment->FontsandColors里面的设置啊.解决方案四:该回复于2008-04-10 10:28:21被版主删除解

如何在项目中内嵌字体,并且可以调用设置文本框的字体

问题描述 如图,希望能有实例代码. 解决方案 解决方案二:将字体文件放入资源,在目标计算机释放,调用解决方案三:我不想释放字体,直接在程序内部调用,又如何实现解决方案四:其实我是想这样的DimprojectNameAsString=Assembly.GetExecutingAssembly().GetName().Name.ToString()'获取程序名称DimstAsString=projectName+".Resources.FZZHYFW.TTF"'projectName+&q

ios修改textField的placeholder的字体颜色、大小

textField.placeholder = @"username is in here!"; [textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; [textField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:@"_placeholderLabel.font"]; 这

如何在Word 2013文档中设置字体颜色

在Word2013文档中,用户可以根据实际需要为Word文档中的字符设置字体颜色,操作步骤如下所述: 第1步,打开Word2013文档窗口,选中需要改变字体颜色的文本块. 第2步,在"开始"功能区的"字体"分组中,单击"字体颜色"下拉三角按钮,如图2013080121所示. 图2013080121 单击"字体颜色"下拉三角按钮 第3步,打开字体颜色面板,其中"自动"包括黑和白两种颜色,并由背景颜色决定使用哪

怎样在Word2013文档中设置字体颜色

  第1步,打开Word2013文档窗口,选中需要改变字体颜色的文本块. 第2步,在"开始"功能区的"字体"分组中,单击"字体颜色"下拉三角按钮. 第3步,打开字体颜色面板,其中"自动"包括黑和白两种颜色,并由背景颜色决定使用哪一种字体颜色;"主题颜色"为每一种常用颜色提供了多种渐变色;"标准色"包括10种标准颜色.用户可以单击颜色面板中的任意一种颜色来设置字体颜色.如果颜色面板中的颜色

CLsitBox问题,单独设置某行的字体颜色

问题描述 CLsitBox问题,单独设置某行的字体颜色 CListBox 如何单独设置某行的字体颜色,跪求好心人帮忙!!!!!!! 解决方案 http://blog.sina.com.cn/s/blog_6392417a0100gifg.html 重绘条目 解决方案二: http://download.csdn.net/download/cctv6909/2857020http://zhidao.baidu.com/link?url=iOxbCTDTEkthuI3xWHrCUnjaH6wIGf4

MFC 对话框程序中的staticbar的颜色的改变

问题描述 MFC 对话框程序中的staticbar的颜色的改变 请问在MFC对话框程序底部的staticbar中的字体的颜色是否能设置成其它颜色?如何进行设置? 解决方案 http://download.csdn.net/detail/zzz450001/2616444

vc++-VC++ MFC Static Text 赋值

问题描述 VC++ MFC Static Text 赋值 有一个自定义的方法 void OnEnter(long long nConfID, long long nTimeUTC, const char *szConfXml, int nResult) { if(nResult) { MessageBox(NULL, "会议创建失败","提示:", MB_OK ); return; } else { MessageBox(NULL, "会议创建成功&quo