窗口 – 如何在窗口上绘制图像?

我在Windows Vista中的C中使用VS2005创建了一个带有createwindow()api的窗口

我的要求是在该窗口上绘制一个图像(任何格式).
我在这个应用程序中没有使用任何MFC.

请帮我一些代码片段.

最佳答案
不完全确定你的问题是什么:在窗体上画一个位图,或者你想知道如何使用各种图像格式,或者两者兼而有之.无论如何,下面是一个例子,您可以如何加载位图并在表单上绘制它:

HBITMAP hBitmap = NULL;

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;

    switch (message)
    {
<...>

    case WM_CREATE:
        hBitmap = (HBITMAP)LoadImage(hInst, L"c:\\test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        break;
    case WM_PAINT:
        PAINTSTRUCT     ps;
        HDC             hdc;
        BITMAP          bitmap;
        HDC             hdcMem;
        HGDIOBJ         oldBitmap;

        hdc = BeginPaint(hWnd, &ps);

        hdcMem = CreateCompatibleDC(hdc);
        oldBitmap = SelectObject(hdcMem, hBitmap);

        GetObject(hBitmap, sizeof(bitmap), &bitmap);
        BitBlt(hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);

        SelectObject(hdcMem, oldBitmap);
        DeleteDC(hdcMem);

        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        DeleteObject(hBitmap);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

LoadImage加载图标,光标,动画光标或位图.详情here

对于使用各种图像格式,您可以使用Windows映像组件(参见IWICBitmapDecoder)或代码从这里Loading JPEG and GIF pictures或第三方工具,如FreeImageLeadTools

希望这有帮助,问候

转载注明原文:窗口 – 如何在窗口上绘制图像? - 代码日志