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);

DeleteDC、ReleaseDC 、DeleteObject的使用

时间: 2024-10-03 23:10:10

DeleteDC、ReleaseDC 、DeleteObject的使用的相关文章

DeleteDC ReleaseDC DeleteObject之间的区别

DeleteDC 该函数删除指定的设备上下文环境(DC). 原型: BOOL DeleteDC(HDC hdc): 参数: hdc:设备上下文环境的句柄. 返回值: 成功,返回非零值:失败,返回零.调用GetLastError获取扩展错误信息. 说明: 如果一个设备上下文环境的句柄是通过调用GetDC函数得到的,那么应用程序不能删除该设备上下文环境,它应该调用ReleaseDC函数来释放该设备上下文环境. ReleaseDC 函数释放设备上下文环境(DC)供其他应用程序使用.函数的效果与设备上下

TWinControl.DefaultHandler里的CallWindowProc还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处,而且还很有用)

我忽然发现:TButton既没有处理WM_PAINT,又没有Paint()或者PaintWindow(),那么它是什么时候被绘制的? Form1上放2个TButton,然后设置代码: procedure TForm1.Button1Click(Sender: TObject); begin button2.Repaint; end; procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage('good'); end; 在F

GDI双缓冲绘图

一.简介 在进行复杂图形绘制时,若直接在屏幕DC上进行绘制,则会出现明显的闪烁.闪烁产生的原因是当绘制的图形较为 复杂时,图形绘制过程中就被刷新到屏幕上,导致结果断断续续地显示出来.双缓冲绘图的原理是在另开辟一块内存用于绘制,当所有绘制工作完成后将内存数据一 次性拷贝到屏幕上. 双缓冲绘图步骤: 创建兼容DC(CreateCompatibleDC) 创建兼容位图(CreateCompatibleBitmap) 将兼容位图选入兼容DC(SelectObject) 在兼容DC中进行绘制工作 将兼容D

WM_PAINT中应该用BeginPaint与EndPaint这两个api,它们的功能正是使无效区域恢复(所以WM_PAINT里即使什么都不做,也必须写上BeginPaint与EndPaint)——Delphi里WM_PAINT消息的三个走向都做到了这一点

程序本来是想实现鼠标单击改变背景颜色.可是,程序运行时,为什么没有任何消息触发,背景颜色就一直不断的改变了?WM_PAINT怎么被触发的 #include <windows.h> #include <stdlib.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; void DrawRectangle (HWND) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANC

转载几篇别人写的皮肤类控件的技术文章

原连接:http://blog.sina.com.cn/s/blog_4c3538470100ezhu.html 实现控件的透明背景 很多情况下,我们需要控件 的背景是透明的,就是要求直接看到控件父窗口的背景颜色.背景位图,比如标签控件.单选Radio控件.复选Check控件,通常都要求在父窗口的背景上 进行绘制.然而要求控件的画布透明,这个技术在GDI的文档中没有看到Microsoft作任何说明,当然还是有别的办法. 其一: 如果程序支持桌面主题服务的话,则可调用主题服务的API来实现背景.我

TForm的自绘过程

新建一个空窗体项目,然后运行,此时首先运行: procedure TApplication.Run; begin FRunning := True; try AddExitProc(DoneApplication); if FMainForm <> nil then begin case CmdShow of SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized; SW_SHOWMAXIMIZED: MainForm.WindowS

实现系统滚动条换肤功能

http://blog.sina.com.cn/s/blog_4c3538470100gews.html 1 实现系统滚动条换肤功能 对于Windows系统中各种控件换肤功能,要数滚动条的换肤最难实现了,尤其是控件自带的系统滚动条,如Edit.ListBox.ListView.TreeView等自带的系统滚动条,要想实现其自定义的皮肤功能,用常规办法似乎都无法实现. 对于常规的皮肤定制一般都是通过定制WM_PAINT.WM_ERASEBKGND.WM_CTLCOLORxxx.NM_CUSTOMD

GDI编程

一.GDI相关概念 1.GDI(Graphics Device Interface):图形设备接口,是一个应用程序与输出设备之间的中介.它提供了一套函数库,这些函数在不同的输出设备上输出图形和文字.一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道. 2.DC (Device Context):设备描述表(设备上下文),是一种Windows数据结构,包括了如线的宽度和颜色.刷子的样式和颜色.字体.剪裁区域等信息.用于表达显示器.打印机等设备.

实现控件的透明背景

很多情况下,我们需要控件的背景是透明的,就是要求直接看到控件父窗口的背景颜色.背景位图,比如标签控件.单选Radio控件.复选Check控件,通常都要求在父窗口的背景上进行绘制.然而要求控件的画布透明,这个技术在GDI的文档中没有看到Microsoft作任何说明,当然还是有别的办法. 其一:如果程序支持桌面主题服务的话,则可调用主题服务的API来实现背景.我们先看看这个API: HRESULT DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT 

Delphi操作XML的几个博客

http://www.cnblogs.com/acuier  整整十几篇,省得我自己研究,学一下就可以了. 测试颜色: // 找到了WM_PAINT消息处理,既然找到了,那么对WM_PAINT消息也算有个交代了,于是上面所有的WndProc全部正常结束. // 除非TWinControl.WMPaint里面再继续执行复杂的调用,否则Button1.Update就算执行结束了. procedure TWinControl.WMPaint(var Message: TWMPaint); var DC