void CAPITest_EXEDlg::OnBtnFont() 
{
CWnd* h=GetDlgItem(IDC_STATIC1);
CFont* pFont=h->GetFont();
LOGFONT lf;
pFont->GetLogFont(&lf);
lf.lfWeight=FW_BOLD;
pFont->CreateFontIndirect(&lf);//此处发生断言中断,好像是m_hObject为NULL
h->SetFont(pFont);
pFont->DeleteObject();
}
这是为什么?

解决方案 »

  1.   

    应该是是m_hObject不为NULL的断言错误吧?
    先DeleteObject再CreateFontIndirect呢
      

  2.   

    CWnd* h=GetDlgItem(IDC_STATIC1);
    CFont* pFont=h->GetFont();
    LOGFONT lf;
    pFont->GetLogFont(&lf);
    lf.lfWeight=FW_BOLD;
    pFont->DeleteObject();
    pFont->CreateFontIndirect(&lf);
    h->SetFont(pFont);
    pFont->DeleteObject();
      

  3.   

    static CFont Font;
    Font.CreateFontIndirect(&lf);
    h->SetFont(&Font);
      

  4.   

    学习
    感觉羽战士的正确。横秋的应该也不会错。
    但是
    横秋:Font为什么要定义成static。
      

  5.   

    寒~偶测试过没问题才贴的代码啊。
    XP + VC6SP6,我的环境。横秋的代码没有获得当前的字体属性,而是用static来储存以前的字体信息。
      

  6.   

    羽战士的正确环境:2K + VC7
      

  7.   

    羽战士的正确环境:2K + VC7