Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么图像会消失?_C++_Winapi_Visual C++ - Fatal编程技术网

C++ 为什么图像会消失?

C++ 为什么图像会消失?,c++,winapi,visual-c++,C++,Winapi,Visual C++,我有以下代码 case WM_PAINT: { hdc = BeginPaint(hwnd,&paintSt); temphdc = hdc; GetClientRect(hwnd,&aRect); if(hBitmap!=NULL) { HDC memDC = CreateCompatibleDC(hdc);

我有以下代码

    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
是一个全局变量,分配在代码中的某个位置。。。。图像显示,但在最小化窗口时消失

有人能解释一下吗


提前感谢,

我猜hBitmap在最小化时不知何故正在更改为null。
在分配和引用hBitmap的位置发布代码将有助于识别问题。

您的清理代码完全错误,您严重泄漏了句柄。应在TaskMgr.exe的“进程”选项卡中随时可见。查看+选择列并勾选GDI对象。当GDI对象句柄计数达到10000时,此代码停止工作。是的,当您调整窗口大小时,可能会发生这种情况,因为会有一连串的绘制请求

不要删除位图,它与struct一样。在删除memDC之前,还原从SelectObject()返回的旧位图句柄。不要使用ReleaseDC,DeleteDC是必需的。请注意这些函数的返回值,它们会在您出错时告诉您,但如果您从未使用断言进行检查,这些函数将无法工作


使用这些显式清理规则进行GDI编程很痛苦。考虑一个类库来处理这种苦役,他们永远不会出错。 谢谢,伙计,我是WIN32的新手。到目前为止,我所学到的就是这些论坛的所有内容,通过提问,无论人们建议我写什么。。。将按照您的建议改进我的代码。。我对WIN32库不太熟悉。。。努力理解it的基本概念。。我想我需要更加努力工作。。。。Nyways感谢所有建议。下面链接的最后一行说我们应该使用DeleteObject()删除位图。。。。。。。需要您的评论…是的,您使用DeleteObject删除HBITMAP。注意,H,明白了。。。。谢谢你,伙计。。。。我做了一些修改,代码终于可以工作了…代码终于可以工作了。。。意外调用了InvalidateStuble()。谢谢你抽出时间。。