ReleaseDC和DeleteDC的区别
来源:互联网 发布:java 服务端mqtt推送 编辑:程序博客网 时间:2024/05/01 23:21
簡單的說,GetDC和ReleaseDC的調用配對,CreateDC和DeleteDC的調用配對。
GetDC是從窗口獲取現有的DC,而CreateDC是創建DC,所以ReleaseDC和DeleteDC的作用一個是釋放,一個是銷毀。
ReleaseDC和DeleteDC的区别 (转)
在编SDK小游戏时发现的图片在背景上移动时,可能出现闪烁,这时双缓冲就是基本方法之一。
但发现一个480 * 580的小窗口中,都是移动了185次后,图片不动了,百思不得解,试想为内存泄漏
原来是ReleaseDC和DeleteDC在做怪,对于create的dc应该予以deletedc,而对于getdc的应予以releasedc
附上图片移动源码:
#include "windows.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
void showpic();
HWND hwnd;
int xp,yp;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=(HCURSOR)LoadCursor(NULL,IDC_ARROW);
wndcls.hIcon=(HICON)LoadIcon(NULL,IDI_WINLOGO);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WndProc;
wndcls.lpszClassName="bao";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);
hwnd=CreateWindow("bao","xxx",WS_OVERLAPPEDWINDOW | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,480,580, NULL,NULL,hInstance,NULL);
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wparam, LPARAM lparam)
{
HDC hdc=GetDC(hWnd);
switch(uMsg)
{
case WM_KEYDOWN:
if (wparam==VK_LEFT)
{
xp-=100;
if (xp"0) xp=0;
}
if (wparam==VK_UP)
{
yp-=100;
if (yp"0) yp=0;
}
if (wparam==VK_RIGHT)
{
xp+=100;
if (xp"440) xp=440;
}
if (wparam==VK_DOWN)
{
yp+=100;
if (yp"500) yp=500;
}
showpic();
break;
case WM_DESTROY:
PostQuitMessage(0);
}
return DefWindowProc(hWnd,uMsg,wparam,lparam);
}
void showpic()
{
HDC hdc=GetDC(hwnd);
HDC hmemdc=CreateCompatibleDC(hdc);
HBITMAP hbc=CreateCompatibleBitmap(hdc,480,580);
SelectObject(hmemdc,hbc);
BitBlt(hdc,0,0,480,580,hmemdc,0,0,SRCCOPY);
DeleteObject(hbc);
DeleteDC(hmemdc);
//换成ReleaseDC(hwnd,hmemdc);将出现内存泄漏,将导致图片停止移动
ReleaseDC(hwnd,hdc);
}
- ReleaseDC和DeleteDC的区别
- ReleaseDC和DeleteDC的区别
- ReleaseDC和DeleteDC的区别
- releaseDC和deleteDC的区别
- ReleaseDC和DeleteDC的区别
- ReleaseDC 和DeleteDC的用法区别
- DeleteDC() ReleaseDC()和DeleteObject()之间的区别
- DeleteDC 与 ReleaseDC的区别
- DeleteDC ReleaseDC DeleteObject之间的区别
- deletedc和releasedc
- ReleaseDC、DeleteDC(买二送一DeleteObject)简单解析
- BeginPaint EndPaint 与GetDC ReleaseDC的区别
- BeginPaint EndPaint 与GetDC ReleaseDC的区别
- GetDC和ReleaseDC
- 内存泄漏,当您使用的 GetDC 方法和 ReleaseDC 方法 CWnd 类版本
- SelectObject,DeleteObject,DeleteDC的一些注释
- 行规——::GetDC()和::ReleaseDC()配对
- GetDC() ReleaseDC()引起的内存泄漏
- 加入transaction.addToBackStack(null); 之后,仍直接退出问题解决。
- nginx 访问路径配置
- 图的周游
- WinHttp方法通过HTTP协议向服务器发送请求,返回结果
- Java tree递归
- ReleaseDC和DeleteDC的区别
- JAVA——this语句
- activity间的传值
- 正则表达式基础
- Android Activity 图形化生成简读 <3>
- 毕业工作五年的总结和感悟(中)
- 谈谈你怎么理解产品经理
- maven环境搭建--maven学习之路(一)
- C/C++求对数