为什么图像消失了
Why the image disappears?
我有以下代码…
case WM_PAINT:
{
hdc = BeginPaint(hwnd,&paintSt);
temphdc = hdc;
GetClientRect(hwnd,&aRect);
if(hBitmap!=NULL)
{
HDC memDC = CreateCompatibleDC(hdc);
if(memDC!=NULL)
{
BITMAP bmp;
GetObject(hBitmap,sizeof(bmp),&bmp);
SelectObject(memDC,hBitmap);
SetStretchBltMode(hdc,HALFTONE);
StretchBlt(hdc,0,0,aRect.right,aRect.bottom,
memDC,0,0,bmp.bmWidth,bmp.bmHeight,
SRCCOPY);
DeleteObject(&bmp);
ReleaseDC(hwnd,memDC);
}
}
// the code for painting
EndPaint(hwnd,&paintSt);
}
break;
hBitmap
是一个全局变量,它在代码....的某个地方被赋值图像显示,但消失每当我最小化窗口....
有人能解释一下吗?
提前致谢
你的清理代码是完全错误的,你漏句柄很严重。应该很容易在TaskMgr.exe,进程选项卡中看到。查看+选择列并勾选GDI对象。当GDI对象句柄数达到10,000时,此代码停止工作。是的,当你调整窗口大小时可能会发生,因为会有一系列的绘画请求。
不要删除BITMAP,它只是一个结构体。恢复在删除memDC之前从SelectObject()获得的旧位图句柄。不要使用ReleaseDC, DeleteDC是必需的。要注意这些函数的返回值,它们会告诉你什么时候出错了,但如果你从不使用断言进行检查,那就行不通了。
使用这些显式的清理规则,GDI编程是痛苦的。考虑一个类库来处理这种苦差事,它们永远不会出错。我猜hBitmap在最小化时改变为null。张贴代码,你是分配和引用hBitmap将有助于确定问题我认为。
相关文章:
- C++ :: 设置值函数在函数内设置,但后跟 Get 函数,设置值消失了
- 添加新纹理OpenGL时,模型消失了
- 当焦点丢失时,全屏GLFW窗口消失了
- 为什么当我写入文件时,结构在我的文件中消失了
- 我的地板平面的一部分消失了
- 最小化/最大化后,MFC窗口图形消失了
- 为什么我在使用矢量的 push_back() 函数后元素消失了
- 一秒钟后,OpenCV窗口消失了
- 字符串神秘地消失了,将字符串从C++带到对象C++
- Qpainter的情节消失了
- 为什么Visual Studio的控制台消失了?
- 为什么我的 cmd 消失了?我使用 cin.ignore(),但它没有效果!C++
- 尺寸手柄从MacOSX上的Qt 5.1的状态栏中消失了
- Qt Sqlite表列似乎消失了
- 为什么当我在OpenGL中启用照明时,我的颜色消失了?
- eclipse CDT 8.01 - 默认路径(libstdc,libstdc++)在"include"目录中完全消失了
- 当我将setPhysicsBody设置为sprite时,sprite消失了
- 苹果的 Using C++ with Objective-C 文章已经消失了......谁能给我一篇新文章,或者帮我找到旧文章?
- 当从c++传递缓冲区到NodeJS时,我的数据消失了
- 为什么图像消失了