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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!