我用LOGFONT结构修改控件文本字体、大小、位置,后两者都起作用,唯独字体没有反应,设置什么字体显示出来的都是默认字体。怎么回事啊,请赐教代码如下:
void CNewButton::PreSubclassWindow()
{
ModifyStyle(0, BS_OWNERDRAW);
SetButtonFont(_T("Arial Black") , 17, FW_NORMAL);//调用下面的函数
}void CNewButton::SetButtonFont(const CString& strFont, int nPointSize, int nWeight)
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
_tcscpy(lf.lfFaceName, strFont);
lf.lfHeight  = nPointSize;
lf.lfWeight  = nWeight;
lf.lfEscapement=0; 
lf.lfUnderline=FALSE; 
lf.lfItalic=FALSE; 
lf.lfStrikeOut=FALSE;
lf.lfCharSet = GB2312_CHARSET;
m_fontButton.CreateFontIndirect(&lf);
Invalidate();
}在DrawItem()中调用下面的函数,进行设置
void CNewButton::DrawButtonText(CDC* pDC, CRect rect, int nState)
{
TCHAR strText[MAX_PATH+1];
::GetWindowText(m_hWnd, strText, MAX_PATH); CFont* hOldFont = pDC->SelectObject(&m_fontButton);
CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
int nMode = pDC->SetBkMode(TRANSPARENT);
COLORREF clrTextPre = pDC->SetTextColor(m_clrText);
CPoint pt(rect.CenterPoint().x-szExtent.cx/2.7, rect.CenterPoint().y-szExtent.cy/2);
CSize sizeDown(1, 1);
pt+=m_sizeTextOffset;
pDC->DrawState(pt, szExtent, strText, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);
pDC->SelectObject(hOldFont);
pDC->SetBkMode(nMode);
pDC->SetTextColor(clrTextPre);
}