我在做我的需求的时候要在MFC里两个CStatic框里显示两幅图片,函数如下// 显示图片hWnd 为窗口句柄
int CAlertClientDlg::ShowPic(HWND hWndSnapshot1,HWND hWndSnapshot2,char * ReceivedData)

    if (NULL==ReceivedData)
    {
        return 0;
    }
HDC hDCsnapshot1=::GetDC(hWndSnapshot1);
HDC hDCsnapshot2=::GetDC(hWndSnapshot2);
CWnd * pWndSnapshot1= parentPointer->FromHandle(hWndSnapshot1);
CDC * pDCSnapshot1 =pWndSnapshot1->GetDC();
CWnd * pWndSnapshot2= parentPointer->FromHandle(hWndSnapshot2);
CDC * pDCSnapshot2 =pWndSnapshot2->GetDC();
    
    IPicture *pIPictureSnapShot1;
    IStream *pStmSnapShot1;
    BOOL bResultSnapShot1;
IPicture *pIPictureSnapShot2;
IStream *pStmSnapShot2;
BOOL bResultSnapShot2; int structureSize =0;
int alertXMLlength = 0;
int snapShot1Size = 0;
int snapShot2Size = 0;
memcpy(&structureSize,ReceivedData+4,4);
memcpy(&snapShot1Size,ReceivedData+8,4);
memcpy(&snapShot2Size,ReceivedData+12,4);
memcpy(&alertXMLlength,ReceivedData+16,4);
AlertDetail * detail = (AlertDetail *)(ReceivedData+32);
    
    //图片1分配全局存储空间
    HGLOBAL hGlobalSnapShot1 = GlobalAlloc(GMEM_MOVEABLE, snapShot1Size);
    LPVOID pvDataSnapShot1 = NULL;
    if (hGlobalSnapShot1 == NULL)
        return E_FAIL;
//锁定分配内存块
    if ((pvDataSnapShot1 = GlobalLock(hGlobalSnapShot1)) == NULL)
        return E_FAIL;
    memcpy(pvDataSnapShot1,ReceivedData+32+structureSize,snapShot1Size);
    GlobalUnlock(hGlobalSnapShot1);
//参数设置为TRUE,则hGlobalSnapShot1最终会自动释放
    CreateStreamOnHGlobal(hGlobalSnapShot1, TRUE, &pStmSnapShot1);
    //装入图形文件
    bResultSnapShot1=OleLoadPicture(pStmSnapShot1,snapShot1Size,TRUE,IID_IPicture,(LPVOID*)&pIPictureSnapShot1);
    if(FAILED(bResultSnapShot1))
        return E_FAIL;
//图片的真实宽度, 单位为英寸
    OLE_XSIZE_HIMETRIC hmWidthSnapShot1;
//图片的真实高度, 单位为英寸
    OLE_YSIZE_HIMETRIC hmHeightSnapShot1;
    pIPictureSnapShot1->get_Width(&hmWidthSnapShot1);
    pIPictureSnapShot1->get_Height(&hmHeightSnapShot1);
    //转换hmWidth和hmHeight为pixels距离,1英寸=25.4毫米
    int nWidthSnapShot1 = MulDiv(hmWidthSnapShot1,GetDeviceCaps(hDCsnapshot1,LOGPIXELSX),2540);
    int nHeightSnapShot1 = MulDiv(hmHeightSnapShot1,GetDeviceCaps(hDCsnapshot1,LOGPIXELSY),2540);
    //将图形输出到屏幕上
    bResultSnapShot1=pIPictureSnapShot1->Render(hDCsnapshot1,0,0,nWidthSnapShot1,nHeightSnapShot1,
        0,hmHeightSnapShot1,hmWidthSnapShot1,-hmHeightSnapShot1,NULL);
    pIPictureSnapShot1->Release();
pStmSnapShot1->Release();
double snapShot1X,snapShot1Y,snapShot1Width,snapShot1Height;
snapShot1X = atof(detail->targetSlices.slice1.boundBox.point.x);
snapShot1Y = atof(detail->targetSlices.slice1.boundBox.point.y);
snapShot1Width = atof(detail->targetSlices.slice1.boundBox.rect.width);
snapShot1Height = atof(detail->targetSlices.slice1.boundBox.rect.height);
CPen snapShot1pen;
COLORREF snapShot1Color=RGB(255,255,0);
snapShot1pen.CreatePen(1,3,snapShot1Color);
CPen *snapShot1Oldpen = pDCSnapshot1->SelectObject(&snapShot1pen);
CPoint snapShot1leftTop(nWidthSnapShot1*snapShot1X,nHeightSnapShot1*snapShot1Y);
CPoint snapShot1rightTop(snapShot1leftTop.x+nWidthSnapShot1*snapShot1Width,snapShot1leftTop.y);
CPoint snapShot1rightBottom(snapShot1rightTop.x,snapShot1rightTop.y+nHeightSnapShot1*snapShot1Height);
CPoint snapShot1leftBottom(snapShot1leftTop.x,snapShot1leftTop.y+nHeightSnapShot1*snapShot1Height);
pDCSnapshot1->MoveTo(snapShot1leftTop);
pDCSnapshot1->LineTo(snapShot1rightTop);
pDCSnapshot1->LineTo(snapShot1rightBottom);
pDCSnapshot1->LineTo(snapShot1leftBottom);
pDCSnapshot1->LineTo(snapShot1leftTop);
    pDCSnapshot1->SelectObject(snapShot1Oldpen);
snapShot1pen.DeleteObject();
snapShot1Oldpen->DeleteObject();
int releaseSnapshot1DC = ::ReleaseDC(hWndSnapshot1,hDCsnapshot1);

    if (releaseSnapshot1DC !=1)
    {
 printLog("图片框1资源没有释放");
    }
//图片2分配全局存储空间
HGLOBAL hGlobalSnapShot2 = GlobalAlloc(GMEM_MOVEABLE, snapShot2Size);
LPVOID pvDataSnapShot2 = NULL;
if (hGlobalSnapShot2 == NULL)
return E_FAIL;
//锁定分配内存块
if ((pvDataSnapShot2 = GlobalLock(hGlobalSnapShot2)) == NULL)
return E_FAIL;
memcpy(pvDataSnapShot2,ReceivedData+32+structureSize+snapShot1Size,snapShot2Size);
GlobalUnlock(hGlobalSnapShot2);
CreateStreamOnHGlobal(hGlobalSnapShot2, TRUE, &pStmSnapShot2);
//装入图形文件
bResultSnapShot2=OleLoadPicture(pStmSnapShot2,snapShot2Size,TRUE,IID_IPicture,(LPVOID*)&pIPictureSnapShot2);
if(FAILED(bResultSnapShot2))
return E_FAIL;
//图片的真实宽度, 单位为英寸
OLE_XSIZE_HIMETRIC hmWidthSnapShot2;
//图片的真实高度, 单位为英寸
OLE_YSIZE_HIMETRIC hmHeightSnapShot2;
pIPictureSnapShot2->get_Width(&hmWidthSnapShot2);
pIPictureSnapShot2->get_Height(&hmHeightSnapShot2);
//转换hmWidth和hmHeight为pixels距离,1英寸=25.4毫米
int nWidthSnapShot2 = MulDiv(hmWidthSnapShot2,GetDeviceCaps(hDCsnapshot2,LOGPIXELSX),2540);
int nHeightSnapShot2 = MulDiv(hmHeightSnapShot2,GetDeviceCaps(hDCsnapshot2,LOGPIXELSY),2540);
//将图形输出到屏幕上
bResultSnapShot2=pIPictureSnapShot2->Render(hDCsnapshot2,0,0,nWidthSnapShot2,nHeightSnapShot2,
0,hmHeightSnapShot2,hmWidthSnapShot2,-hmHeightSnapShot2,NULL);
pIPictureSnapShot2->Release();
pStmSnapShot2->Release();
double snapShot2X,snapShot2Y,snapShot2Width,snapShot2Height;
snapShot2X = atof(detail->targetSlices.slice2.boundBox.point.x);
snapShot2Y = atof(detail->targetSlices.slice2.boundBox.point.y);
snapShot2Width = atof(detail->targetSlices.slice2.boundBox.rect.width);
snapShot2Height = atof(detail->targetSlices.slice2.boundBox.rect.height);
CPen snapShot2pen;
COLORREF snapShot2Color=RGB(255,255,0);
snapShot2pen.CreatePen(PS_SOLID,1,snapShot2Color);
CPen *snapShot2Oldpen = pDCSnapshot2->SelectObject(&snapShot2pen);
CPoint snapShot2leftTop(nWidthSnapShot2*snapShot2X,nHeightSnapShot2*snapShot2Y);
CPoint snapShot2rightTop(snapShot2leftTop.x+nWidthSnapShot2*snapShot2Width,snapShot2leftTop.y);
CPoint snapShot2rightBottom(snapShot2rightTop.x,snapShot2rightTop.y+nHeightSnapShot2*snapShot2Height);
CPoint snapShot2leftBottom(snapShot2leftTop.x,snapShot2leftTop.y+nHeightSnapShot2*snapShot2Height);
pDCSnapshot2->MoveTo(snapShot2leftTop);
pDCSnapshot2->LineTo(snapShot2rightTop);
pDCSnapshot2->LineTo(snapShot2rightBottom);
pDCSnapshot2->LineTo(snapShot2leftBottom);
pDCSnapshot2->LineTo(snapShot2leftTop);
pDCSnapshot2->SelectObject(snapShot2Oldpen);
snapShot2pen.DeleteObject();
snapShot2Oldpen->DeleteObject();
int releaseSnapshot2DC =::ReleaseDC(hWndSnapshot2,hDCsnapshot2);
if (releaseSnapshot2DC !=1)
{
printLog("图片框1资源没有释放");
}
    if (SUCCEEDED(bResultSnapShot1)&&SUCCEEDED(bResultSnapShot2))
    {
        return S_OK;
    }
    else
    {
        return E_FAIL;
    }
}
我注释掉这个函数时没事,用上后一会程序没反应了,看GDI对象数上千的也在不停增长,因为我也在不停的刷屏,自己也释放了些对象可是还是没有解决?那位大哥给看下?