CFont cfont1;cfont1.CreateFont(30,0,0,0,FW_NORMAL, FALSE,FALSE,0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS, "Arial");          
    CWnd*  pWnd = GetDlgItem(IDC_STATIC1); 
    pWnd->SetFont(&cfont1);
为什么 CFont cfont1;定义成全局对象就可以正确显示,定义到BOOL CMyDlg::OnInitDialog()函数内部,作为局部变量,就没办法正确显示呢?

解决方案 »

  1.   

    原因可能是窗口每次刷新的时候都重新设置了字体,而你的字体设置为临时变量,它的作用域只在OnInitDialog,以后窗口再刷新的时候,这个字体的设置已经不再有效啦。全局变量则不一样。
    另外,你可以把CFont cfont1;cfont1.CreateFont(30,0,0,0,FW_NORMAL, FALSE,FALSE,0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS, "Arial");   
      CWnd* pWnd = GetDlgItem(IDC_STATIC1);  
      pWnd->SetFont(&cfont1);拷贝到OnPaint中CDialog::OnPaint();上面,应该也能实现你要的功能
      

  2.   

    将CFont cfont1;放到你的DlgXX.h里面,自然没事了.
      

  3.   

    别忘了在~Dlgxx();析构中加     releaseObject (cfont1) 
        //可能写的不对,你自己调整
      

  4.   

    囧,Sorry,看错了,是不是你OnPaint里做了什么操作?
      

  5.   

    最好定义成你的CMyDlg类的成员变量....
      

  6.   

    ~CMyDlg析构的时候
    if ( m_font.GetSafeHandle() )
    {
    m_font.DeleteObject();
    }
    应该OK的
      

  7.   

    你既然知道是局部变量,那就应该知道局部变量的作用域。 你是否知道局部变量的作用域只在离他最近的一对大括号里?如果不知道,那我现在告诉你。
    void main()
    {
      {
          int a =1234;
      }
      cout<<a; //这是错误的,因为a已经不存在了
    }