bool CMainDlg::DrawPicture(const int ip_array_subscript, const char *buf)
{
RECT rec;
rec = GetPictureCoordinate(ip_array_subscript);
//GlobalAlloc是一個Windows API函式。該函式從全域堆中分配一定數目的位元組數
//若函式呼叫成功,則回傳一個新分配的記憶體物件的句柄。
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 4096);
//鎖定記憶體中指定的記憶體塊,并回傳一個地址值,令其指向記憶體塊的起始處
void * pData = GlobalLock(hGlobal);
//記憶體拷貝
memcpy(pData, buf, 4096);
GlobalUnlock(hGlobal);
IStream * pStream = NULL;
//CreateStreamOnHGlobal函式從指定記憶體創建流物件。
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
{
CImage image;
if (SUCCEEDED(image.Load(pStream)))
{
RECT rect;
GetDlgItem(idc[ip_array_subscript])->GetWindowRect(&rect);
ScreenToClient(&rect);
if (rect.left!=rec.left &&rect.top!=rec.top)
{
GetDlgItem(idc[ip_array_subscript])->MoveWindow(rec.left, rec.top, rec.right - rec.left, rec.bottom - rec.top, TRUE);
}
CStatic *pic = (CStatic *)GetDlgItem(idc[ip_array_subscript]);
HBITMAP hold=pic->SetBitmap(image);
DeleteObject(hold);
}
pStream->Release();
image.ReleaseGDIPlus();
image.Destroy();
}
GlobalFree(hGlobal);
return 0;
}
uj5u.com熱心網友回復:
你的create方法里有做記憶體分配嗎uj5u.com熱心網友回復:
沒看出什么特別泄漏的地方,有沒有其他地方泄漏uj5u.com熱心網友回復:
檢查一下CreateStreamOnHGlobal(hGlobal, TRUE, &pStream)這個看看轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/102562.html
標籤:界面
