为什么图像消失了

Why the image disappears?

本文关键字:消失了 图像 为什么      更新时间:2023-10-16

我有以下代码…

    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将有助于确定问题我认为。