关于GDI+在win7 下绘制文字正常 在xp下绘制文字无法显示问题,请教大神,在线等!!!
本帖最后由 loveanybody 于 2013-12-26 11:17:22 编辑 文字绘制如下:
void CLoginDialog::DrawUI()
{
HDC hDC=::GetDC(m_hWnd);
HDC hMemDC=::CreateCompatibleDC(hDC);
BITMAPINFO bitmapinfo;
bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biBitCount = 32;
bitmapinfo.bmiHeader.biHeight = m_pSrcImage->GetHeight();
bitmapinfo.bmiHeader.biWidth = m_pSrcImage->GetWidth();
bitmapinfo.bmiHeader.biPlanes = 1;
bitmapinfo.bmiHeader.biCompression=BI_RGB;
bitmapinfo.bmiHeader.biXPelsPerMeter=0;
bitmapinfo.bmiHeader.biYPelsPerMeter=0;
bitmapinfo.bmiHeader.biClrUsed=0;
bitmapinfo.bmiHeader.biClrImportant=0;
bitmapinfo.bmiHeader.biSizeImage = bitmapinfo.bmiHeader.biWidth * bitmapinfo.bmiHeader.biHeight * bitmapinfo.bmiHeader.biBitCount / 8;
HBITMAP hBitmap=::CreateDIBSection (hMemDC,&bitmapinfo, 0,NULL, 0, 0);
HBITMAP hOldBitmap = (HBITMAP)::SelectObject (hMemDC,hBitmap);
//画出各个界面元素----------------------
Graphics g(hMemDC);
g.DrawImage(m_pSrcImage,RectF(0,0,m_pSrcImage->GetWidth(),m_pSrcImage->GetHeight()),0,0,m_pSrcImage->GetWidth(),m_pSrcImage->GetHeight(),UnitPixel,NULL,NULL,NULL);
FontFamily* fontFamily = new FontFamily(L"微软雅黑");//选择一种字体
Gdiplus::SolidBrush* company_brush = new Gdiplus::SolidBrush(Color(255,24,120,197));
Gdiplus::Font* company_font = new Gdiplus::Font(fontFamily,11,FontStyleRegular,UnitPoint);
g.DrawString(L"Hello Word!",-1,company_font,PointF(335,346),company_brush);
delete fontFamily;
delete company_brush;
delete company_font;
//设置透明窗口-------------------------------------------------
CPoint DestPt(0,0);
CSize psize(m_pSrcImage->GetWidth(),m_pSrcImage->GetHeight());
BLENDFUNCTION blendFunc32bpp;
blendFunc32bpp.AlphaFormat = AC_SRC_ALPHA;
blendFunc32bpp.BlendFlags = 0;
blendFunc32bpp.BlendOp = AC_SRC_OVER;
blendFunc32bpp.SourceConstantAlpha = 255;
::UpdateLayeredWindow(m_hWnd,hDC,NULL,&psize,hMemDC,&DestPt,0,&blendFunc32bpp,ULW_ALPHA);
//释放资源-------------------------------------------------
::SelectObject (hMemDC,hOldBitmap);
::DeleteObject(hBitmap);
::DeleteDC(hMemDC);
::ReleaseDC(m_hWnd,hDC);
}
[解决办法]
如果xp下不能单步,那么输出一点日志来看看,到底是哪步函数调用失败了
[解决办法]
试试把 win7 的 gdiplus.dll 拷贝到 xp 下, 重新 regsrv32 gdiplus.dll 看看