且有一个 Button , 具有 BS_OWNERDRAW 风格言 .请问概如何改变它的字体风格 .....

解决方案 »

  1.   

    1.用AppWizard生成对话框文档,在对话框头文件中声明CFont对象: 
    //Declare font object in class declaration (SampleDialog.h file ).
    private:
    CFont m_font;2.在Cpp文件的OnInitDialog中添加如下代码: 
    BOOL CSampleDialog::OnInitDialog ( )
    {
    ...
    // Create an 8-point Arial font
    CDC *pDC;
    pDC = GetDC();
    //m_font.Detach();
    m_font.CreateFont(MulDiv(8, -pDC->GetDeviceCaps(LOGPIXELSY), 72),
    0, 0, 0, FW_BLACK, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS,
    CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS, _T("Arial"));
    //Set font for push button .
    GetDlgItem(IDC_BUTTON1)->SetFont(&m_font);
    ...
    }  
      

  2.   

    若在其他函数——例如OnOK()、OnDraw()——中实现上述代码,则应调用Detach()函数,否则第二次创建字体时时会发生异常。
      

  3.   

    我现在是想在 DLL 里更改具有  BS_OWNERDRAW 属性的 Button ...该怎么办 ..?
      

  4.   

    有什么不一样的吗?我不知道你的Dll和你的Exe怎么调用,大不了从CButton里派生出一个类而已。只要知道是SetFont(&m_font);就没问题吧?
      

  5.   

    我可以得到 此 Button 的 Handle .....  但是当 Button具有 BS_OWNERDRAW 属性时 , 用  SetFont(&font),函数可以执行但, 根本改变不了此 Button 的 字体
      

  6.   

    我在程序中用CreateWindow创建一些按钮,但这些按钮上的字体和窗体上其他按钮的字体不同,应该如何修改这些用代码创建的按钮字体呢?
      

  7.   

    static CFont m_font;
    LOGFONT lf;memset(&lf, 0, sizeof(LOGFONT));
    lf.lfHeight = 30;
    strcpy(lf.lfFaceName, "System");
    m_font.CreateFontIndirect(&lf);
    GetDlgItem(IDC_BUTTON1)->SetFont(&m_font);
      

  8.   

    还是没有用 . 好象SetFont 对 BS_OWNERDRAW 的 button 不起作用
      

  9.   

    你先确认font的生存周期,是否足够长呢?不能是刚设置完,该变量就被销毁啊。你可以把它定义为类的成员变量或者全局变量。
      

  10.   

    是这样?让我想想。调用Item也不行吗?我想想我想想。
      

  11.   

    You can't set the font when you create the window. Have a look at
    Knowledge Base article  Q85518 "Correct Use of the SetFont() Function
    in MFC". That illustrates the technique.
      

  12.   

    各位,帮忙想想办法啊 ....  在 DLL 中,得到了此 Button (BS_OWNERDRAW) 的 Handle,现在就要改变它有字体 ,(直接SetFont没有反应) .... 该怎么做啊 ....
      

  13.   

    Owner Draw的还要改变字体?不懂!!!自已在DrawItem时画不就完了吗?
      

  14.   

    更改 PB 里面的控件字体 ..  用 spy++ 看到它的属性是BS_OWNERDRAW ,但是我现在要在 DLL 里把它改变掉 .....
      

  15.   

    那个控件本身就是OWNERDRAW的,它使用的字体是在PB里自已画的,没有办法改变字体。如果你先将它的属性中的OWNERDRAW去掉,那么那个控件可能什么都显示不了了。
      

  16.   

    是不是改变字体后,没有调用dll中刷新界面的函数!
      

  17.   

    但关键是我要在上 DLL 里去修改 PB 里的控件啊