0

我的目标是在内存中创建一个位图并将其句柄用作 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完成我的任务吗?

4

1 回答 1

2

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

于 2013-01-03T21:39:30.333 回答