CMyDlg::OnOK()
{
   changeColorOfBtn(IDCALCEL);
}请高手实现函数changeColorOfBtn(int IDName),参数是按钮或者静态文本框的ID。xiexie!

解决方案 »

  1.   

    定义一个CFont类型的成员变量,然后在对话框的OnInitDialog函数中,用CreateFont创建CFont对象。需要修改哪个控件字体时,直接用该控件对象的SetFont函数就可以了。
      

  2.   

    CFont font;//这里font为对话框成员变量。
    VERIFY(font.CreateFont(                            //本函数在OnInitDialog中
       36,                        // nHeight
       0,                         // nWidth
       0,                         // nEscapement
       0,                         // nOrientation
       FW_NORMAL,                 // nWeight
       FALSE,                     // bItalic
       FALSE,                     // bUnderline
       0,                         // cStrikeOut
       ANSI_CHARSET,              // nCharSet
       OUT_DEFAULT_PRECIS,        // nOutPrecision
       CLIP_DEFAULT_PRECIS,       // nClipPrecision
       DEFAULT_QUALITY,           // nQuality
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
       "Arial"));                 // lpszFacenamevoid changeColorOfBtn(int nID)
    {
        CWnd *pWnd = GetDlgItem(nID);
        pWnd->SetFont(&font);
    }
      

  3.   

    谢谢happyparrot(快乐鹦鹉),您的代码很有用.不过,有两点疑问,还请解答:1.我想除了字号之外,其他的风格什么都不要改变.这该如何做呢?
    我们是不是应该首先取得"确定"按钮的原来的字体设置,然后只改变字号就可以了?
    听人说,要用CreateFontIndirect,但是,我还不太会用.
    2.为什么要在对话框的OnInitDialog函数中,用CreateFont创建CFont对象呢?
      我们在函数void changeColorOfBtn(int nID)内部创建CFont对象可不可以?
      

  4.   

    1.可以先调用GetFont函数,得到LOGFONT结构指针,然后只修改该结构中的lfHeight = 36
    如:
    CFont *pFont = GetDlgItem(IDCANCEL)->GetFont();
    LOGFONT lf;
    pFont->GetLogFont(&lf);
    lf.lfHeight = 36;        
    CFont m_NewFont;
    m_NewFont.CreateFontIndirect(&lf);  2.在changeColorOfBtn中创建font也是可以的。但是你要确定该函数只会被调用一次。font对象是不能创建两次的。所以如果这个字体是固定的,因该在初始化函数中就创建比较好。当然,如果font的字体大小是动态的,比如changeColorOfBtn函数中把字体大小作为参数,那么应该在changeColorOfBtn中创建字体,创建字体前,必须先将成员变量font先调用DeleteObject释放掉,否则会出错。
      

  5.   

    在函数内部的话,可以用HFont但不能用CFont,理由是函数执行完后,局部变量CFont会自动释放,就不存在了。
      

  6.   

    谢谢,我下面的代码为什么不行呢?void CMyDlg::changeColorOfBtn(int nID)
    {
    CFont font;           //这里font为局部变量

    int size = 10;
    for (int i=0;i<5;i++)
    {
    font.CreateFont(      
       size=size+2,               // nHeight
       0,                         // nWidth
       0,                         // nEscapement
       0,                         // nOrientation
       FW_NORMAL,                 // nWeight
       TRUE,                      // bItalic
       TRUE,                      // bUnderline
       0,                         // cStrikeOut
       ANSI_CHARSET,              // nCharSet
       OUT_DEFAULT_PRECIS,        // nOutPrecision
       CLIP_DEFAULT_PRECIS,       // nClipPrecision
       DEFAULT_QUALITY,           // nQuality
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
       "Arial");                  // lpszFacename
        
    CWnd *pWnd = GetDlgItem(IDOK);
    pWnd->SetFont(&font);
    font.DeleteObject();
    }
    }
      

  7.   

    把上面函数中的
    CFont font;
    换成
    static CFont font; 
    仍然是不行的.
      

  8.   

    CFont font;           //这里font为局部变量
    再说一边,要是成员变量。
      

  9.   

    好,完全成功.感谢"happyparrot(快乐鹦鹉)",请笑纳50分.