- 浏览: 14974 次
最新评论
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);
}
发表评论
-
[原创]Google App Engine使用简介
2012-01-20 02:06 1030[原创]Google App Engine使用 ... -
异常处理
2012-01-20 02:06 701异常处理 2010年07月23日 下面的代码举例说明了一 ... -
Android:Debug certificate expired on DATE 解决方法
2012-01-20 02:06 896Android:Debug certificate expir ... -
使应用程序只能运行一个实例
2012-01-20 02:06 867使应用程序只能运行一个实例 2010年07月16日 这里 ... -
诺基亚手机里的秘密
2012-01-19 09:56 584诺基亚手机里的秘密 2011年05月18日 诺基亚手机* ... -
Windows XP系统文件一一诠释(1)[最新整理](转BY wang6610----BBS.WUYOU.COM)
2012-01-19 09:56 781Windows XP系统文件一一诠 ... -
5230
2012-01-19 09:56 5585230 2010年12月31日 一、购机后的头两件 ... -
sdsadsadas
2012-01-19 09:56 556sdsadsadas 2010年11月22日 XV67 ... -
5230
2012-01-19 09:56 6205230 2010年10月03日 1、屏幕保护:一定要买 ... -
FlashBuilder4.5 下载 及破解方法
2012-01-17 02:27 717FlashBuilder4.5 下载 及破解方法 2011年 ... -
ROOT【个人学习,慎用】
2012-01-17 02:27 633ROOT【个人学习,慎用】 ... -
(转) iPhone UI 开发的几点建议
2012-01-17 02:27 530(转) iPhone UI 开发的几点 ... -
MFC自定义消息
2012-01-17 02:26 625MFC自定义消息 2011年11月28日 MFC自定义消 ... -
workplan
2012-01-15 22:12 404workplan 2011年04月18日 ... -
.net自定义控件小结进阶篇
2012-01-15 22:12 853.net自定义控件小结进阶篇 2010年12月14日 ... -
WPF中的控件
2012-01-15 22:12 1205WPF中的控件 2011年05月17日 1.Button ... -
【C#】在VS2005中C#实现鼠标悬停提示
2012-01-15 22:12 1474【C#】在VS2005中C#实现鼠标悬停提示 2010年01 ... -
flex ComboBox显示的字太长,用......代替
2012-01-15 22:12 1057flex ComboBox显示的字太长,用......代替 ...
相关推荐
易语言彩色日记源码,彩色日记,彩色的字,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