ReleaseDC和DeleteDC的区别 (转)
- 博客分类:
- 技术杂绘
ReleaseDC和DeleteDC的区别 (转)
2011年12月01日
在编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);
}
发表评论
-
DRAG & DROP
2012-01-20 02:06 963DRAG & DROP 2011年03月08日 ... -
VC++动态链接库(DLL)编程深入浅出(三)(上)
2012-01-20 02:05 723VC++动态链接库(DLL)编程 ... -
win7安装wince6.0中遇到的问题 CDeviceSDKInstallShim Add/Remove failed. HR=0x8007005
2012-01-20 02:05 1034win7安装wince6.0中遇到的 ... -
Visual C#中操作WMI的类库简介
2012-01-20 02:05 1189Visual C#中操作WMI的类库 ... -
在DirectX 全屏独占 方式下显示对话框和任意窗口
2012-01-20 02:05 1494在DirectX 全屏独占 方式 ... -
电脑天书(九)
2012-01-19 09:56 511电脑天书(九) 2011年04月 ... -
VISTA系统常识技巧集锦
2012-01-19 09:56 524VISTA系统常识技巧集锦 ... -
MAX三百问(珍藏版)上
2012-01-19 09:56 450MAX三百问(珍藏版)上 2011年06月13日 安装篇 ... -
“开始--运行”之命令集锦
2012-01-19 09:56 472“开始--运行”之命令集锦 2011年01月28日 记住 ... -
计算机一级考试选择题1
2012-01-19 09:55 1293计算机一级考试选择题1 ... -
FlashBuilder4.5 下载 及破解方法
2012-01-17 02:26 685FlashBuilder4.5 下载 及破解方法 2011年 ... -
ROOT【个人学习,慎用】
2012-01-17 02:26 541ROOT【个人学习,慎用】 ... -
(转) iPhone UI 开发的几点建议
2012-01-17 02:26 478(转) iPhone UI 开发的几点 ... -
Android开发之--adb shell 命令大全
2012-01-17 02:26 549Android开发之--adb shell 命令大全 201 ... -
LAMNP 编译安装参数(一)---Apache 安装编译参数
2012-01-15 22:07 878LAMNP 编译安装参数(一)---Apache 安装编译参数 ... -
惠普 康柏 510 笔记本电脑
2012-01-15 22:07 652惠普 康柏 510 笔记本电脑 2011年12月17日 ... -
俺的电脑配置
2012-01-15 22:07 624俺的电脑配置 2011年12月21日 电脑型号 微星 ...
相关推荐
易语言彩色日记源码,彩色日记,彩色的字,TextOutA,SetTextColor,SetBkMode,GetWindowDC,ReleaseDC,DeleteDC,SetWindowTextA
易语言多彩文字源码,多彩文字,彩色的字,TextOutA,SetTextColor,SetBkMode,GetWindowDC,ReleaseDC,DeleteDC,SetWindowTextA
取字体宽度,取字体高度,GetTextExtentPoint,GetDC,CreateCompatibleDC,CreateFont,MulDiv,GetDeviceCaps,SelectObject,CloseHandle,ReleaseDC,DeleteDC,DeleteObject
易语言手动绘制进度条源码,手动绘制进度条,绘制进度条,BitBlt,CreateCompatibleDC,GetDC,SelectObject,ReleaseDC,DeleteDC,InvalidateRect,UpdateWindow
易语言API取字体宽度源码,取字体宽度,取字体高度,GetTextExtentPoint,GetDC,CreateCompatibleDC,CreateFont,MulDiv,GetDeviceCaps,SelectObject,CloseHandle,ReleaseDC,DeleteDC,DeleteObject
易语言进度条按钮源码,进度条按钮,getdc,CreateCompatibleDC,CreateCompatibleBitmapEx,SelectObject,CreatePen,MoveTo,LineTo,DeleteObject,ReleaseDC,BitBlt,deletedc
易语言判断HDC源码,判断HDC,CreateCompatibleDC,DeleteDC,GetDC,GetObjectType,ReleaseDC,WindowFromDC
易语言给你的窗口创建一个虚线选择框源码,ReleaseDC,SelectObject,GetDC,DeleteObject,DrawFocusRect,GetDCEx,SetCapture,ReleaseCapture,CreateCompatibleDC,CreateCompatibleBitmap,BitBlt,DeleteDC,SetWindowLong...
易语言分层截图源码,分层截图,快照_Layered,GetDesktopWindow,GetWindowDC,CreateCompatibleDC,CreateCompatibleBitmap,SelectObject,BitBlt,DeleteObject,DeleteDC,ReleaseDC,GetWindowRect
Delphi7.0与Windows编程示例,检测程序是否运行,捕获全屏图像并抓图(截屏)、修改计算机名称,要... ReleaseDC(BHandle,SourceDC) ; //释放设备环境 注:通过本例子改变计算机在网络中的名字,重新启动后才生效。
画出图片到DC,载入,取宽度,取高度,取句柄,DeleteDC,DeleteObject,GetDC,ReleaseDC,SelectObject,TransparentBlt,CreateCompatibleDC,GlobalAlloc,GlobalLock,GlobalUnlock,GlobalFree,OleLoadPicture,RtlMoveMemory,...
易语言进度条模块源码,进度条模块,创建,设置进度,销毁,SetPixel,CreateCompatibleBitmap,CreateCompatibleDC,GetDC,DeleteDC,DeleteObject,SelectObject,SetBkMode,StretchBlt,GetWindowRect,ReleaseDC