Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何正确释放GDI资源?_C_Winapi_Gdi - Fatal编程技术网

C 如何正确释放GDI资源?

C 如何正确释放GDI资源?,c,winapi,gdi,C,Winapi,Gdi,我试图理解如何正确地释放GDI资源,在阅读了许多GDI教程后,我认为这是如何做到的: 假设我创建了一个内存DC,并在其中创建和选择了许多GDI对象(HPEN,HBRUSH,HBITMAP,等等)。现在,为了释放GDI资源,我将执行以下操作: 将所有旧GDI对象选择到内存DC中(因此 选择所有新创建的GDI对象) 删除新创建的GDI对象 删除内存DC 请注意,第二步和第三步可以按相反顺序执行。即删除GDI对象的内存DC 如果我使用的是一个普通的DC(我使用GetDC()或BeginPaint())

我试图理解如何正确地释放GDI资源,在阅读了许多GDI教程后,我认为这是如何做到的:

假设我创建了一个内存DC,并在其中创建和选择了许多GDI对象(
HPEN
HBRUSH
HBITMAP
,等等)。现在,为了释放GDI资源,我将执行以下操作:

  • 将所有旧GDI对象选择到内存DC中(因此 选择所有新创建的GDI对象)
  • 删除新创建的GDI对象
  • 删除内存DC
  • 请注意,第二步和第三步可以按相反顺序执行。即删除GDI对象的内存DC

    如果我使用的是一个普通的DC(我使用
    GetDC()
    BeginPaint()
    ),我会用释放DC来代替删除DC

    我做对了吗,还是我遗漏了什么

  • 将所有旧GDI对象选择到内存DC中(因此 选择所有新创建的GDI对象)
  • 删除新创建的GDI对象
  • 删除内存DC
  • 请注意,第二步和第三步可以按相反顺序执行。即删除GDI对象的内存DC

    我做对了吗

    是的

    如果我使用的是一个普通的DC(我使用
    GetDC()
    BeginPaint()
    ),我会用释放DC来代替删除DC

    那么,
    GetDC
    将与
    ReleaseDC
    匹配,
    BeginPaint
    将与
    EndPaint
    匹配。对于
    GetDC
    ,请注意以下内容:

    使用公共DC绘制后,必须调用ReleaseDC函数来释放DC。类和专用DC不必发布