无法将CBitmap bitblt对话

时间:2013-12-17 08:35:10

标签: c++ mfc

感谢您阅读本文。

我需要绘制由位图信息头和字节数组创建的CBitmap实例。因为我希望他们能够在将来实时操作它。无法使用LoadImage或访问我的硬盘驱动器的此类API。仅限内存操作。

这是我尝试过的。

void CBMPLoaderDlg::drawBitmapFromPath(CString path)
{
    CFile file;
    BITMAPFILEHEADER bfh;
    BITMAPINFOHEADER bih;
    BYTE* bits = NULL;

    CBitmap bm;
    CDC *clientDC;
    CDC memDC;

    try
    {
        if(! file.Open(path, CFile::modeRead))
            throw "File not found";

        if(file.Read(&bfh, sizeof(BITMAPFILEHEADER)) < sizeof(BITMAPFILEHEADER))
            throw "Not bmp file";
        if(file.Read(&bih, sizeof(BITMAPINFOHEADER)) < sizeof(BITMAPINFOHEADER))
            throw "Not bmp file";
        bits = new BYTE[bih.biSizeImage];
        if(file.Read(bits, bih.biSizeImage) < bih.biSizeImage)
            throw "Not bmp file";

        if(! bm.CreateBitmap(bih.biWidth, bih.biHeight, bih.biPlanes, bih.biBitCount, bits))
            throw "Could not create bitmap";
        clientDC = this->GetDC();
        memDC.CreateCompatibleDC(clientDC);
        memDC.SelectObject(bm);

        clientDC->BitBlt(0, 0, bih.biWidth, bih.biHeight, &memDC, 0, 0, SRCCOPY);
    }
    catch(char *e)
    {
        TRACE("%s\n", e);
    }
}

标头和字节数组加载正常。 CBitmap也很好。问题是,Bitblt返回TRUE但对话框没有变化。是的,只有在调用OnPain()时才会执行Bitblt。我试过了,结果没有变化。我这样就发布了这个帖子。

我弄错了吗?请帮助一点点。

0 个答案:

没有答案