在内存中创建一个位图并使用它

时间:2013-01-03 19:54:07

标签: c winapi bitmap

我的目标是在内存中创建一个位图,并将其句柄用作BM_SETIMAGE消息的参数(设置按钮位图的消息)。

以下是我的代码:

........

        HDC hdc = GetDC(hwnd);
        HDC memDC = CreateCompatibleDC(hdc);
        HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, 100, 100);
        HBITMAP hOldBmp = (HBITMAP)SelectObject(memDC, hMemBmp);
        Rectangle(memDC, 0, 0, 100, 100);

        HBRUSH brush = CreateSolidBrush(RGB(0xff, 0xff, 0x00));

        RECT rc;
        rc.left   = 0; 
        rc.top    = 0;
        rc.right  = 100;
        rc.bottom = 100;
        FillRect(memDC, &rc, brush);

        SendMessage(GetDlgItem(hDlg, IDC_SET_START_PAGE_BG), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hMemBmp);

........

但它不起作用,我的按钮上只有黑色。

问题:

  1. FillRect(memDC, &rc, brush)是否会修改hMemBmp的内容?如果没有,SelectObject(memDC, hMemBmp)为这两个对象做了什么?

  2. 我应该使用CreateBitmap代替CreateCompatibleBitmap来完成我的任务吗?

1 个答案:

答案 0 :(得分:2)

在发送消息之前,应该将旧位图选择回内存DC。 According to MSDN一次只能在一个DC中选择一个位图。