用windows api编程的时候,每次绘制窗口都要HDC Hdc=GetDC(Hhwnd);如果用一个全局变量HDC来保存这个GetDC的结果,是不是就不用每次都要重新生成这个HDC了?
这样做的话会有什么风险吗? 难道在windows的运行过程中,一个HWND对应的HDC可能会改变?还请高人指点!

解决方案 »

  1.   

    DC里有很多属性,比如那些区域是有效的那些区域是无效的,窗口变化了DC也会变了,
      

  2.   

    这就要去查看MSDN中关于GetDC函数的说明了.
      

  3.   

    有不少情况HDC不是一成不变的,比如一个wndless的ATL控件。
    http://blog.csdn.net/xuddk727/article/details/10435201
    所以取全局HDC不是好做法。
      

  4.   

    HDC不但要绘制你画的东西,还要绘制窗口,系统按钮等东西,这些都是会变的。
    你如果只取一次,那么系统自动绘制的东西就没法再改变了
      

  5.   

    其实你每次 GetDC 得到的 HDC,都是一个临时性的设备场景
    你在这个场景上画好了东西之后,在你 ReleaseDC 时系统才会把这个 HDC 上的内容复制或剪接到真正的窗口场景上的
      

  6.   

    一般,设备缓存区属于系统所有,你要要的时候找系统借,用完之后归还,但是,如果你的窗口类使用了CS_CLASSDC, CS_OWNDC, or CS_PARENTDC 则可以建立类专有的缓存区