19,468
社区成员
发帖
与我相关
我的任务
分享
//功能: 创建一位图,位图上已写好了文字
//参数: hdc显示设备上下文; pszText要写的文字; iWidth, iHeiht位图的宽,高
//返回: 创建好的位图句柄
HBITMAP CTestDlg2Dlg::NewBitmap(HDC hdc, char *pszText, int iWidth, int iHeight)
{
if (pszText == NULL)
return NULL;
HBITMAP hBmp = ::CreateCompatibleBitmap(hdc, iWidth, iHeight);//创建要返回的位图句柄
HDC hMemDC = ::CreateCompatibleDC(hdc);//创建与显示设备相关的内存设备上下文
SelectObject(hMemDC, hBmp);
//在位图上写字
SetBkMode(hMemDC, TRANSPARENT);
RECT rc = {0, 0, iWidth, iHeight};
HBRUSH hb = ::CreateSolidBrush(RGB(255, 255, 255));
FillRect(hMemDC, &rc, hb);
::DrawText(hMemDC, pszText, -1, &rc, DT_VCENTER | DT_SINGLELINE);
//释放资源
::DeleteDC(hMemDC);
::DeleteObject(hb);
return hBmp; //返回创建好的位图
}
//下面是一个Button,测试
void CTestDlg2Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
HDC hdc = ::GetDC(m_hWnd);
int iWidth = 100, iHeight = 50;
HBITMAP hBmp = NewBitmap(hdc, "Hello World", iWidth, iHeight);
HDC hMemDC = ::CreateCompatibleDC(hdc);
SelectObject(hMemDC, hBmp);
BitBlt(hdc, 0, 0, iWidth, iHeight, hMemDC, 0, 0, SRCCOPY);
::DeleteDC(hMemDC);
}