HDC hdc = GetDC(0);
HDC hdcCompat = CreateCompatibleDC(hdc);
HBITMAP hb;
HGDIOBJ hbold;
BITMAPINFO bmi;
int *bmdata;
int w = 500;
int h = 200;
bmi.bmiHeader.biSize=sizeof(bmi.bmiHeader);
bmi.bmiHeader.biWidth=w;
bmi.bmiHeader.biHeight=-h;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=32;
bmi.bmiHeader.biCompression=BI_RGB;
bmi.bmiHeader.biSizeImage=0;
bmi.bmiHeader.biClrUsed=0;
bmi.bmiHeader.biClrImportant=0;
hb=CreateDIBSection(hdcCompat, &bmi, DIB_RGB_COLORS,
(void**)&bmdata, NULL, 0);
hbold=SelectObject(hdcCompat, hb);
RECT r;
r.top=0;
r.left=0;
r.right=w;
r.bottom=h;
SetBkColor(hdcCompat, RGB(255, 255, 255));
SetTextColor(hdcCompat, RGB(255, 0, 0));
SetBkMode(hdcCompat, OPAQUE);
// FillRect(hdc, &r, (HBRUSH)GetStockObject(WHITE_BRUSH));
HFONT hf;
LOGFONT lf;
lf.lfHeight = 200;
lf.lfWidth = 100;
lf.lfEscapement = 0;
lf.lfOrientation = 0;
lf.lfItalic = TRUE;
lf.lfUnderline = FALSE;
lf.lfStrikeOut = FALSE;
lf.lfCharSet = ANSI_CHARSET;
lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfQuality = ANTIALIASED_QUALITY;
lf.lfPitchAndFamily = FF_ROMAN;
lf.lfWeight= FW_NORMAL;
hf = CreateFontIndirect(&lf);
QString fam = "Tahoma";
memcpy(lf.lfFaceName, fam.utf16(), sizeof(wchar_t) * qMin(fam.length() + 1, 32));
SelectObject(hdcCompat, hf);
DrawText(hdcCompat, TEXT("8SS"), -1, &r, DT_LEFT);
BitBlt(hdc, 0, 0, w, h, hdcCompat , 0, 0, SRCCOPY);
WinCE 6.0系统下面。
用CreateDIBSection或者CreateCompatibleBitmap都是有锯齿的。
直接用DrawText(hdc, TEXT("8SS"), -1, &r, DT_LEFT); 写出的文本是没有锯齿的。
------解决思路----------------------
如果写到内存中也是调用 DrawText,那么也不应该出现锯齿才对。
如果出现问题,可能是因为颜色(透明)等的设置有问题。
因为你绘制到内存中,字体的笔画就与内存中的背景色融合在一起了。再将内存绘制到 DC 上时,就可能出现问题。
------解决思路----------------------
绘制到内存和屏幕效果一样,不一样就是设置不一样,比如字体等,wince一般配的lcd才16bit,显示颜色不多,所以效果上很多都别太强求了。
------解决思路----------------------
wince6平台的GDI字体渲染有问题,无法实现反锯齿。
即使打开所谓的cleartype也无法实现字体的圆滑,可以考虑移植开源的freetype来实现字体渲染,绕过CE的GDI渲染机制