在CFont::CreateFont函式中的最后一個引數:lpszFacename就是字體樣式名稱。經過測驗發現像微軟雅黑、華文行楷、幼圓等字體無法繪制出對應的樣式。
后來通過檢測注冊表來檢查問題發現注冊表中沒有對應字體庫,然后我又重新安裝對應的字體庫,注冊表中也有了,通過以下代碼檢查:
LONG ires;
HKEY hMyKey;
DWORD Type = REG_SZ;
DWORD count= 256;
byte mstr[256]="";
ires=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts",
0, KEY_READ,&hMyKey);
if(ERROR_SUCCESS!=ires)
MessageBox("注冊表讀取錯誤");
else
ires=RegQueryValueEx(hMyKey,"微軟雅黑 Bold (TrueType)",0,&Type,mstr,&count);
if (mstr[0]=='\0') //沒有安裝
{return false;}
else
{return true;}
檢測出微軟雅黑等字體都安裝了,但是繪制的時候除了微軟雅黑的字體能顯示正確,其他字體顯示的都不對。
這是什么原因呢?
CFont支持所有字體樣式還是只支持部分字體,能詳細列舉說明嗎?
uj5u.com熱心網友回復:
DC可支持的字體可以通過 EnumFonts 或 EnumFontFamiliesEx 列舉
oid CSDIt1View::OnDraw(CDC* pDC)
{
CSDIt1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
int nSaveDC = pDC->SaveDC();
LOGFONT lgFont={0};
lgFont.lfHeight = -MulDiv(72, pDC->GetDeviceCaps(LOGPIXELSY), 72);
lgFont.lfCharSet = DEFAULT_CHARSET;
_tcscpy_s(lgFont.lfFaceName, _T("微軟雅黑"));
lgFont.lfWeight = FW_BOLD;
CFont mFont;
mFont.CreateFontIndirect(&lgFont);
CFont *pOldFont = pDC->SelectObject(&mFont);
pDC->SetTextColor(RGB(255, 0, 0));
pDC->TextOut(10, 10, lgFont.lfFaceName);
pDC->SelectObject(pOldFont);
pDC->RestoreDC(nSaveDC);
}
uj5u.com熱心網友回復:
http://blog.csdn.net/visualeleven/article/details/6248115轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/75387.html
標籤:界面
