首页 > 代码库 > DeleteDC、ReleaseDC 、DeleteObject的使用

DeleteDC、ReleaseDC 、DeleteObject的使用

DeleteDC  

 

 

该函数删除指定的设备上下文环境(DC)。

原型:

BOOL DeleteDC(HDC hdc);

参数:

hdc:设备上下文环境的句柄。

返回值:

   成功,返回非零值;失败,返回零。调用GetLastError获取扩展错误信息。

说明:

   如果一个设备上下文环境的句柄是通过调用GetDC函数得到的,那么应用程序不能删除该设备上下文环境,它应该调用ReleaseDC函数来释放该设备上下文环境。

ReleaseDC   

函数释放设备上下文环境(DC)供其他应用程序使用。函数的效果与设备上下文环境类型有关。

原型:

int ReleaseDC(HWND hWnd, HDC hdc);

参数:

hWnd:指向要释放的设备上下文环境所在的窗口的句柄。

hDC:指向要释放的设备上下文环境的句柄。

返回值:

   返回值说明了设备上下文环境是否释放;如果释放成功,则返回值为1;如果没有释放成功,则返回值为0。

说明:

   每次调用GetWindowDCGetDC函数检索公用设备上下文环境之后,应用程序必须调用ReleaseDC函数来释放设备上下文环境。

   应用程序不能调用ReleaseDC函数来释放由CreateDC、CreateCopatibleDC 函数创建的设备上下文环境,只能使用DeleteDC函数。

 

DeleteObject

 

该函数删除一个逻辑笔、画笔、字体、位图、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也就失效了。

原型:

BOOL DeleteObject(HGDIOBJ hObject);

参数:

hObject:逻辑笔、画笔、字体、位图、区域或者调色板的句柄。

返回值

   成功,返回非零值;如果指定的句柄无效或者它已被选入设备上下文环境,则返回值为零。调用GetLastError获取扩展错误信息。

说明:

   当一个绘画对象(如笔或画笔)当前被选入一个设备上下文环境时不要删除该对象。当一个调色板画笔被删除时,与该画笔相关的位图并不被删除,该图必须单独地删除。

 

 

例子:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var hMemBackground = (IntPtr)0;
            var hBmpBackground = (IntPtr)0;
            var formHandle = (IntPtr)0;
 
  formHandle = GetDC(this.CallHandle);
                hMemBackground =CreateCompatibleDC(formHandle);
                hBmpBackground = Bitmap.GetHbitmap();//创建DUI位图对象         
              SelectObject(hMemBackground, hBmpBackground);
 
  
 
 if (hBmpBackground != (IntPtr)0)             
       EasyWayLEDDriver.DeleteObject(hBmpBackground);
 
                if (hMemBackground != (IntPtr)0)        
            EasyWayLEDDriver.DeleteDC(hMemBackground);
 
                if (formHandle != (IntPtr)0)               
     EasyWayLEDDriver.ReleaseDC(_thrLedParam.CallHandle, formHandle);