这代码是我自己东拼西凑的,只知道运行正常,请问这种写法正确么?有什么问题、缺陷么?
比如是不是得保存旧对象,然后给他恢复?怎么改呢? HDC hMainDC = ::GetDC(hWnd);
HDC hMemoryDC = ::CreateCompatibleDC(hMainDC);
HDC hBitmapDC = ::CreateCompatibleDC(hMemoryDC); HBITMAP hMainSurface = ::CreateCompatibleBitmap(hMainDC, 800, 600);
HBITMAP hBitmap1 = (HBITMAP)LoadImageA(NULL, "test.bmp", IMAGE_BITMAP, 64, 64, LR_LOADFROMFILE);
HBITMAP hBitmap2 = (HBITMAP)LoadImageA(NULL, "test.bmp", IMAGE_BITMAP, 64, 64, LR_LOADFROMFILE); while (TRUE)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break; TranslateMessage(&msg);
DispatchMessage(&msg);
} // 绘制主画布
{
::SelectObject(hMemoryDC, hMainSurface);
::BitBlt(hMainDC, 0, 0, 800, 600, hMemoryDC, 0, 0, SRCCOPY);
} // 绘制hBitmap1
{
::SelectObject(hBitmapDC, hBitmap1);
::BitBlt(hMemoryDC, 100, 100, 64, 64, hBitmapDC, 0, 0, SRCCOPY);
} // 绘制hBitmap2
{
::SelectObject(hBitmapDC, hBitmap2);
::BitBlt(hMemoryDC, 200, 200, 64, 64, hBitmapDC, 0, 0, SRCCOPY);
} Sleep(60);
} ::DeleteObject(hBitmap2);
::DeleteObject(hBitmap1);
::DeleteObject(hMainSurface);
::DeleteDC(hBitmapDC);
::DeleteDC(hMemoryDC);
::ReleaseDC(hWnd, hMainDC);
比如是不是得保存旧对象,然后给他恢复?怎么改呢? HDC hMainDC = ::GetDC(hWnd);
HDC hMemoryDC = ::CreateCompatibleDC(hMainDC);
HDC hBitmapDC = ::CreateCompatibleDC(hMemoryDC); HBITMAP hMainSurface = ::CreateCompatibleBitmap(hMainDC, 800, 600);
HBITMAP hBitmap1 = (HBITMAP)LoadImageA(NULL, "test.bmp", IMAGE_BITMAP, 64, 64, LR_LOADFROMFILE);
HBITMAP hBitmap2 = (HBITMAP)LoadImageA(NULL, "test.bmp", IMAGE_BITMAP, 64, 64, LR_LOADFROMFILE); while (TRUE)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break; TranslateMessage(&msg);
DispatchMessage(&msg);
} // 绘制主画布
{
::SelectObject(hMemoryDC, hMainSurface);
::BitBlt(hMainDC, 0, 0, 800, 600, hMemoryDC, 0, 0, SRCCOPY);
} // 绘制hBitmap1
{
::SelectObject(hBitmapDC, hBitmap1);
::BitBlt(hMemoryDC, 100, 100, 64, 64, hBitmapDC, 0, 0, SRCCOPY);
} // 绘制hBitmap2
{
::SelectObject(hBitmapDC, hBitmap2);
::BitBlt(hMemoryDC, 200, 200, 64, 64, hBitmapDC, 0, 0, SRCCOPY);
} Sleep(60);
} ::DeleteObject(hBitmap2);
::DeleteObject(hBitmap1);
::DeleteObject(hMainSurface);
::DeleteDC(hBitmapDC);
::DeleteDC(hMemoryDC);
::ReleaseDC(hWnd, hMainDC);
解决方案 »
- 如何判断自己当前的操作系统是WIN7还是VISTA?
- menu.Detach() 是怎么回事?
- 关于vs2008编译器问???
- edit 控件里的\\斜杠显示成了人民币那个符号怎么回事
- ********每天散20分,第10个人进来后结贴,为的是细水长流**************
- 如何使用ActiveX控件?
- Com组件注册时报 “没有找到dllregisterserver输入点”错误,这可能是工程中什么错误造成的?怎么改正?
- 语音识别技术
- 菜鸟问题,请问 VC 中有没有像 Delphi 中的 packed record 数据类型
- 欢迎加入阿尔法游戏工作室!
- 紧急求救,内存泄露
- 怎么得到菜单当前选中项
这个不是问题,。
GDI方面有什么问题么?
我只想知道我贴出的代码是否有什么疏漏之处,比如我提到的,是否应该保存旧object,画完再恢复旧的object?
还有 SelectObject 后的对象是无法立即释放的