加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 01:38:45 所属栏目:Windows 来源:网络整理
导读:我在 Windows Vista中的C中使用VS2005创建了一个带有createwindow()api的窗口 我的要求是在该窗口上绘制一个图像(任何格式). 我在这个应用程序中没有使用任何MFC. 请帮我一些代码片段. 不完全确定你的问题是什么:在窗体上画一个位图,或者你想知道如何使用各
我在 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,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,bitmap.bmWidth,bitmap.bmHeight,hdcMem,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或第三方工具,如FreeImage或LeadTools

希望这有帮助,问候

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读