在基于对话框的应用程序,为了实现透明按钮,建了一个新类,从CButton继承。但是它的字体比较大,想改变字体,但用SetFont函数不起作用。这个问题改怎么解决,谢谢各位了。在线等待

解决方案 »

  1.   

    CButton*   btn1=(CButton*)GetDlgItem(IDC_btn1);
    CClientDC   dc   (btn1);
    CFont   m_font;
    m_font.CreateFont(MulDiv   (8,   -dc.GetDeviceCaps   (LOGPIXELSY),
    72),0,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET,
    OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
    VARIABLE_PITCH   |   FF_SWISS,_T   ("Arial"));
    btn1->SetFont(&m_font,TRUE);
      

  2.   

    SetFont 是起作用的,你在画标题文字的时候发WM_GETFONT消息取得当前字体,然后选进DC里再画按钮标题即可
      

  3.   


    CFont  m_font; //这个变量不要用局部变量
      

  4.   

    CFont定义成全局变量或static 变量。
      

  5.   

    CButton*  btn1=(CButton*)GetDlgItem(IDC_btn1); 
    CClientDC  dc  (btn1); 
    CFont  m_font; 
    m_font.CreateFont(MulDiv  (8,  -dc.GetDeviceCaps  (LOGPIXELSY), 
    72),0,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET, 
    OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY, 
    VARIABLE_PITCH  |  FF_SWISS,_T  ("Arial")); 
    btn1->SetFont(&m_font,TRUE);.........................................................
    你说的方法我试了,还是不行。我是这样做的:
    CTransParentButton m_btn1
    这个是我从CButton继承来的
    后来我在InitDialog中:
        CFont *f = new CFont; 
       f->CreateFont(12, 0, 0, 0, FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET, OUT_DEFAULT_PRECIS,          
    CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,   DEFAULT_PITCH | FF_SWISS, _T("宋体"));       m_btn1.SetFont(f,TRUE);
        m_btn1.SetIcon(IDI_ICON_EXIT,IDI_ICON_EXIT);
        m_btn1.SetIconYPos(1);
        m_btn1.SetAlign(AL_TOP);
        m_btn1.SetWindowText("设置");
    但是,字体没有变化
      

  6.   

    根据上面的代码,如果我用:
    CButton btn;
    btn.SetFont(f);
    这个按钮的字体就会有改变
      

  7.   

    问题解决了
    在CButton的派生类中设置字体就ok了