在mfc的dll中的 OnPaint(),全部代码如下:
void c::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
DoDrawText(&dc,&rect);
}
void c::DoDrawText(CDC *pDC, LPRECT pRect)
{
Graphics graph(pDC->m_hDC);
CString str1=L"同志们好";
USES_CONVERSION;
const WCHAR *str=T2W((LPCTSTR)str1);
///
Font font(L"华文新魏", 100);
/获取文字的宽度和高度
RectF bountRect;
graph.MeasureString(str,wcslen(str),&font,PointF(10.0f, 10.0f),&bountRect);
float wid=bountRect.Width;
float hei=bountRect.Height;
CString strWid,strHei;
strWid.Format("%f",wid);
strHei.Format("%f",hei);
MessageBox(strWid);
MessageBox(strHei);
///
Color cols[] = {Color::Red, Color::Olive, Color::Yellow, Color::Green, Color::Aqua, Color::Blue, Color::Purple, Color::Fuchsia};
REAL bps[] = {0.0f, 0.15f, 0.3f, 0.45f, 0.6f, 0.75f, 0.875f, 1.0f};
LinearGradientBrush brush(Point(10, 10), Point(810, 10), Color::Black, Color::White); // gradient倾斜的
brush.SetInterpolationColors(cols, bps, 8); // interpolation插补
// graph.DrawString((const WCHAR*)(LPCTSTR)str,str1.GetLength(), &font, PointF(10.0f, 10.0f), &brush);
//下面进行把绘制的文字保存成图片
int imx=(int)wid;
int imy=(int)hei;
Bitmap mImg(imx,imy);
Graphics *g=Graphics::FromImage(&mImg);
g->SetPageUnit(UnitPixel);
g->DrawString((const WCHAR*)(LPCTSTR)str,str1.GetLength(), &font, PointF(0.0f, 0.0f), &brush);
CLSID pngClisid;
GetEncoderClsid(L"image/png",&pngClisid);
mImg.Save(L"N.png",&pngClisid,NULL);
}
int c::GetEncoderClsid(const WCHAR *format, CLSID *pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}