void set_font(HWND hDlg, char* fontBuff, int* fontSize) {
TCHAR font[32];
CHOOSEFONT cf;
LOGFONT lf;
HDC hdc;
hdc=GetDC(0);
ZeroMemory(&cf, sizeof(cf));
ZeroMemory(&lf,sizeof(lf)); lf.lfCharSet=dwCharSet|ANSI_CHARSET;
lf.lfHeight = -MulDiv(*fontSize, GetDeviceCaps(hdc, LOGPIXELSY), 72);
ZeroMemory(&font,sizeof(font));
memcpy(font, fontBuff, strlen(fontBuff));
lstrcpy(lf.lfFaceName, font) ; cf.lpLogFont=&lf;
cf.lStructSize= sizeof(CHOOSEFONT);
cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS |CF_TTONLY | CF_SELECTSCRIPT;
cf.nFontType=SCREEN_FONTTYPE;
cf.iPointSize =0;
if(ChooseFont(&cf) !=NULL) {
memcpy(fontBuff, cf.lpLogFont->lfFaceName, strlen(cf.lpLogFont->lfFaceName));
int x=cf.iPointSize/10;
memcpy(fontSize, &x, 4);
printf("size: %d\n", cf.iPointSize/10);
printf("font: %s\n", cf.lpLogFont->lfFaceName);
}
ReleaseDC(0,hdc);
}char myBuff[64]="黑体";
int size=10;main() {
while(1) {
set_font(0, myBuff, &size);
}
return 0;
}对于"宋体"和一些其他字体,一打开不显示字体和字符集,一片空白。。如图
memcpy(fontBuff, cf.lpLogFont->lfFaceName, strlen(cf.lpLogFont->lfFaceName));
这句改成
memcpy(fontBuff, cf.lpLogFont->lfFaceName, strlen(cf.lpLogFont->lfFaceName)+1);
就ok了,最后的那个0没有copy,导致原先是
Courier New
改成
Gulim
之后,就变成了
Gulimer New
找不到这个字体 所以显示不出来。