先在内存中创建一"画布",在这块"画布"上写字,然后返回这块这块"画布",就得到写好文字的图片了
-
C/C++ code
-
// 功能: 创建一位图,位图上已写好了文字 // 参数: 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); }