在OnDraw()中写如下代码:
CFont font;
font.CreateFont(35,0,0,0,400,false,false,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Times New Roman");
pDC->SelectObject(font);
pDC->TextOut(0,0,"aaa")
这样定义后,字体aaa就变大了,
请问如何恢复到默认的原来的字体
以及怎样恢复环境和释放GDI资源

解决方案 »

  1.   

    先把旧的object 保存起来。
      

  2.   

    CFont *oldFont,font;
    font.CreateFont(35,0,0,0,400,false,false,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Times New Roman");
    oldFont=pDC->SelectObject(&font);//&符号少了会发生错误
    pDC->TextOut(0,0,"aaa")
    ...
    pDC->SelectObject(oldFont);//少了这句font无法释放
      

  3.   

    一般来说,是将CREATEFONT内的参数用变量来表示,当变量改变后,调用invalidate()
      

  4.   

    100分?很浪费哦。hnyyy(前进) 都讲了,我就不讲了。
      

  5.   

    hnyyy(前进) 那个 *oldFont 要delete  ??
      

  6.   

    CFont font;
    font.CreateFont(35,0,0,
    0,400,false,false,0,
    ANSI_CHARSET,
    OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,
    DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,
    "Times New Roman");
    CFont *OldFont=pDC->SelectObject(&font);
    pDC->SelectObject(font);
    pDC->TextOut(0,0,"aaa");
    pDC->SelectObject(OldFont);
    pDC->TextOut(100,100,"Richuen");
    在OnDraw下不用释放。
      

  7.   

    CFont font;
    font.CreateFont(35,0,0,
    0,400,false,false,0,
    ANSI_CHARSET,
    OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,
    DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,
    "Times New Roman");
    CFont *pOldFont=pDC->SelectObject(&font);
    pDC->SelectObject(font);
    pDC->TextOut(0,0,"aaa");
    pDC->SelectObject(pOldFont);
    pDC->TextOut(100,100,"Richuen");注意:如果是通过GetWindowDC()所获取的GDI设备,需用ReleaseDC()释放,
    这里,因为OnDraw()中CDC* pDC为传入参数,不需要人工释放.
      

  8.   

    另一版,来自MCSD的教材。
    int nDC=pDC->SaveDC();
    CFont font;
    font.CreateFont(35,0,0,0,400,false,false,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Times New Roman");
    pDC->SelectObject(font);
    pDC->TextOut(0,0,"aaa");
    pDC->RestoreDC(nDC);
      

  9.   

    还有哪位愿意讲述,GDI资源的使用也恢复环境和释放资源
    int nSaveDC=pDC->SaveDC();
    CFont font;
    font.CreateFont(35,0,0,0,400,false,false,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Times New Roman");
    pDC->SelectObject(font);
    pDC->TextOut(0,0,"aaa");
    pDC->RestoreDC(nSaveDC);
    font.delete();
    但是老师说不合格;
    要我看windows API的书!!!
    请指教!!!!
    100分我愿意出!!
      

  10.   

    To  pigsir(小猪):
    你老师应该要你看MFC的CDC类参考书啊?上面用的都是MFC。
    是运行在OnDraw(CDC* pDC)下的。
      

  11.   

    资源的释放一定要用selectObject()将后来的环境,恢复
      

  12.   

    CFont font;
    font.CreateFont(35,0,0,
    0,400,false,false,0,
    ANSI_CHARSET,
    OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,
    DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,
    "Times New Roman");
    CFont *OldFont=pDC->SelectObject(&font);
    pDC->SelectObject(font);
    pDC->TextOut(0,0,"aaa");
    pDC->SelectObject(OldFont);
    pDC->TextOut(100,100,"Richuen");