2 hustluotao hustluotao 于 2016.03.11 11:24 提问

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

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

7个回答

liganglester
liganglester   2016.03.11 11:48

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

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

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

hustluotao
hustluotao 没有少啊,每次重新调用OnPaint函数后界面就被重新刷新了,然后字体就没有颜色了
2 年多之前 回复
liganglester
liganglester   2016.03.11 12:20

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

oyljerry
oyljerry   Ds   Rxr 2016.03.11 13:41

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

liganglester
liganglester   2016.03.11 14:12

我用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;
} 
lx624909677
lx624909677   Ds   Rxr 2016.03.11 14:15

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

hustluotao
hustluotao   2016.03.14 09:22

抱歉,回复晚了! 我是在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 += "执行到OnPaint\r\n";
        GetDlgItem(IDC_EDIT_INFO)->SetWindowText(g_strMessage);
    }
    //UpdateData(false); 


    CDialogEx::OnPaint();
}

}


hustluotao
hustluotao   2016.03.14 09:27

不怎么会用插入代码啊

 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 += "执行到OnPaint\r\n";
            GetDlgItem(IDC_EDIT_INFO)->SetWindowText(g_strMessage);
        }
        CDialogEx::OnPaint();
    }
}


Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MFC 改变static字体颜色、大小、背景颜色【自定义类】
新建一个MFC标准Dialog工程并生成一个CStatic的自定义类,我的类名为CColorStatic 定义必要变量 protected: COLORREF m_crText; // 字体颜色 COLORREF m_crBackColor; // 背景颜色 HBRUSH m_hBrush; // 画刷 LOGFONT m_lf; // 字体大小 CFo
MFC中设置static text控件的背景色、字体、字号和颜色
在实际的应用中,可以用WM_CTLCOLOR 消息改变mfc中控件的颜色,比如现在就来改变一个static text控件的 字体、字体大小、字体颜色和背景色。 例如对话框的类为CTestDlg. 1. 在对话框的类中添加两个变量. 方法:在classview选项卡中,选择CTestDlg,右键,add member variable. CBrush m_brush; CFont m_f
MFC改变static text颜色和内容及字体大小
1. 打开资源视图。 2. 双击打开STATIC所在的对话框。 3. 修改STATIC的ID属性,这里假设为IDC_STATICMessage。 4.为对话框添加类,假设为CMyDialog. 5. 选择对话框,在属性面板上点击消息,并选择WM_CTLCOLOR。 6.在对话框对应类的CPP中会新增下面的代码: HBRUSH DataSummaryDlg::On
mfc中设置statictext的字体和颜色
字体在控制事件中实现,颜色在OnCtlColor中实现。 界面上两个button,一个statictext。 设置statictext的value变量为m_csText; 其余变量为: BOOL m_bBlue; BOOL m_bRed; 在构造函数中初始化: CTextColorExampleDlg::CTextColorExampleDlg(CWnd* pParent
MFC改变static text颜色
1. 打开资源视图。2. 双击打开STATIC所在的对话框。3. 修改STATIC的ID属性,这里假设为IDC_TEXT1。4.为对话框添加类,假设为CMyDialog.5. 选择对话框,在属性面板上点击消息,并选择WM_CTLCOLOR。6.在对话框对应类的
Mfc子窗口修改Static Text控件的字体、大小、颜色
开门见山:创建子窗口的方法请参考我上一篇博客:http://blog.csdn.net/u014411348/article/details/53911682 主窗口修改Static Text控件网上已有很多大神给出了方法,小的就不再重复。 一、单纯改变字体大小、字体 1.请自行在窗口中添加一个Static Text控件并命名。在子窗口的类文件***.h文件下添加(如图1)C
VC MFC中修改STATIC的文本颜色和文本字体等
1. 打开资源视图。 2. 双击打开STATIC所在的对话框。 3. 修改STATIC的ID属性,这里假设为IDC_TEXT1。 4.为对话框添加类,假设为CMyDialog. 5. 选择对话框,在属性面板上点击消息,并选择WM_CTLCOLOR。 6.在对话框对应类的CPP中会新增下面的代码: HBRUSH DataSummaryDlg::OnCtlColor
MFC操作——设置静态文本 大小 字体格式 颜色
一、设置静态文本 大小 字体 颜色 1.首先,在对话框上添加一个Static控件,关联一个控制变量m_static(不是Value,是Control) 2.声明变量 private: CFont m_Font; 3.然后,在对话框初始化中添加下列代码即可 BOOL CTransstaDlg::OnInitDialog() { //设置Static字
对static控件字体大小及颜色的设置
可以直接创建对象,进行设置。非常方便 能满足平常需要
修改Static控件的字体颜色
首先在窗体上添加WM_CTLCOLOR消息,这时就会有一个OnCtlColor消息响应函数。下面是我的OnCtlColor函数里的代码HBRUSH CMyMailDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlCo