使用CreatCompatibleDC之后,系统默认是建立一个大小为零的DC。此时使用TextOut,所有绘图都写到DC外面去了。因此在使用TextOut之前应先用SelectObject选择一个一定大小的位图。

解决方案 »

  1.   

    1.FlyingHero有关DC的说法正确!
    2.字体不一定要在显示时创建,因为字体的创建过程比较花费时间,如果你的文字有多种字体要同时显示,可以建立一张字体的表,把创建完的字体保存起来,同时如果有不同分段的文字用到相同字体的话也可以减少重复创建相同字体,只要在表中增加该字体的使用计数!
    在显示的时候,通过选择不同的字体输出文字,这样在显示的过程中减少了CreateFont(CreateFontIndirect)和DeleteObject()的调用,速度上会改进很多!
      

  2.   

    我的需要是将显示的字符串先进行一定的图形处理,在放到屏幕上
    这样做是不是一定要事先在内存DC里加载一个视图大小的Bitmap?
      

  3.   

    创建内存DC有个限制,那就是创建后的DC只支持raster operations即光栅操作,比如传送位图什么的,想把DC的内置字体传过去是不行的。嘿嘿既然只是创建字体何必这样费事啊?直接在你的DC中选进选出就可以了吧。
    CFont* pOldFont = pDC->SelectObject(pFont);
    ......//do your TEXT operations
    pDC->SelectObject(pOldFont);至于创建新CFont对象可以参照它的几个构照函数填充相应参数就行了,当然CFont::CreateIndirect(LOGFONT *plf);看起来最简洁,只有一个参数。
      

  4.   

    to joke100 我不是单纯要创建一个字体,比方说我要对显示在屏幕上的字添加某些特效,如阴影,
    AntiAlias等,只有另外创建一个DC来进行离屏操作