界面上很多static控件,一个一个的SetFont太麻烦响应了WM_CTLCOLOR消息,处理函数代码如下:HBRUSH CattentionDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  Change any attributes of the DC here // TODO:  Return a different brush if the default is not desired
if (CTLCOLOR_STATIC == nCtlColor)
{
pWnd->SetFont(&m_font);
}
return hbr;
}结果是,只有第一个static的字体设置成功,但是这个控件上的内容一直在闪动,cpu占用很高,怎么回事?

解决方案 »

  1.   

    一个一个的subclass和一个一个的setfont有啥区别?
      

  2.   

    不应该在OnCtlColor里调设置字体,应该在OnInitDialog里头来设置字体.
      

  3.   

    重载一个CSTATIC类,然后处理显示,将字体封装到中间去。提供设置字体接口。
      

  4.   

    在WM_CTCOLORSTATIC里面设置试下 可以设置控件背景色 字体 颜色
      

  5.   

    这样设置,每次重绘都会调用设置应该在OnInitDialog里头来设置字体.
      

  6.   

    我在网上搜了一下,有用这种方式来设置字体的。
    正常情况下OnCtlColor不会被调用很多次吧,就算是一直被调用,为什么只有第一个控件设置字体成功了呢?
      

  7.   


    //CFont Varible
      CFont m_fArial;
      //Create Arial Font
      m_fArial.CreateFont(14,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,
                  DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, 
                  CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Arial");
      //Get Pointer of ListCtrl
      CListCtrl *m_pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
      //Set Font if (m_pList)
      m_pList->GetHeaderCtrl()->SetFont(&m_fArial);
    瞅瞅这个,说不定可以帮到你,
    俺也认为应该在OnInit里设置,
      

  8.   

    http://zhidao.baidu.com/question/59085618.html
      

  9.   

    这个是对窗体进行设置字体,我已经试验过了,没有问题。
    CFont Font; 
    Font.CreateFont(  20,  0,  0,  0,  FW_NORMAL,  FALSE,  FALSE,  0, 
                     DEFAULT_CHARSET,  OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,  DEFAULT_QUALITY,DEFAULT_PITCH|FF_MODERN,_T("Tahoma"));
    GetDlgItem(IDC_BKEDIT1)->SetFont(&Font); 
      

  10.   

    枚举窗口中所有的STATIC 设置字体
      

  11.   

    SetFont会重绘窗口,重绘又发送WM_CTLCOLOR消息,在那循环了吧。觉得是这样,加个断点试试就知道了