void CGraphicView::OnFont() 
{
// TODO: Add your command handler code here
CFontDialog dlg;
if(IDOK==dlg.DoModal())
{
if(m_font.m_hObject)
{
     m_font.DeleteObject();
}
m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);
m_fontname=dlg.m_cf.lpLogFont->lfFaceName;
//MessageBox(m_fontname);
//CClientDC dc(this);
//OnDraw(&dc);//注释的语句就可以正确运行
Invalidate();//如果用这个就不能,测试发现没有触发OnDraw函数!!!!!!!
}
}
void CGraphicView::OnDraw(CDC* pDC)
{
CGraphicDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CFont *oldfont=pDC->SelectObject(&m_font);
//MessageBox(m_fontname);
    pDC->TextOut(0,0,m_fontname);
pDC->SelectObject(oldfont);
}
当我在Onfont函数里面用Invalidate函数的时候,我的OnDraw函数我用MessageBox测试发现没有被调用,我要打印的字没有被打印出来,但是我通过显示的调用就可以打印出来.请高手帮我看看是什么问题
??????

解决方案 »

  1.   

    CGraphicView基类是什么?应该可以的。
      

  2.   

    void CGraphicView::OnFont()  

    // TODO: Add your command handler code here 
    CFontDialog dlg; 
    if(IDOK==dlg.DoModal()) 

    if(m_font.m_hObject) 

         m_font.DeleteObject(); 

    m_font.CreateFontIndirect(dlg.m_cf.lpLogFont); 
    m_fontname=dlg.m_cf.lpLogFont->lfFaceName; 
    //MessageBox(m_fontname); 
    //CClientDC dc(this); 
    //OnDraw(&dc);//注释的语句就可以正确运行 
    Invalidate();//如果用这个就不能,测试发现没有触发OnDraw函数!!!!!!! 


    void CGraphicView::OnDraw(CDC* pDC) 

    CGraphicDoc* pDoc = GetDocument(); 
    ASSERT_VALID(pDoc); 
    // TODO: add draw code for native data here 
    CFont *oldfont=pDC->SelectObject(&m_font); 
    //MessageBox(m_fontname); 
        pDC->TextOut(0,0,m_fontname); 
    pDC->SelectObject(oldfont); 

    当我在Onfont函数里面用Invalidate函数的时候,我的OnDraw函数我用MessageBox测试发现没有被调用,我要打印的字没有被打印出来,但是我通过显示的调用就可以打印出来.请高手帮我看看是什么问题 
    ?????? class CGraphicView : public CView
    我想不明白呢。
      

  3.   

    正常情况下应该可以,不正常情况就是你是否修改了其他代码,比如CGraphicView::OnPaint()。