对话框映射WM_CTLCOLOR消息 HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { // Call the base class implementation first! Otherwise, it may // undo what we're trying to accomplish here. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // Are we painting the IDC_MYSTATIC control? We can use // CWnd::GetDlgCtrlID() to perform the most efficient test. if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC && nCtlColor == CTLCOLOR_STATIC ) { LOGFONT logFont; memset(&logFont, 0, sizeof(LOGFONT)); logFont.lfCharSet = GB2312_CHARSET; _tcscpy(logFont.lfFaceName, _T("宋体")); logFont.lfHeight = -12; m_hFont = CreateFontIndirect(&logFont); pDC->SelectObject(CFont::FromHandle(m_hFont)); } return hbr; }
并对它设置了全局变量为m_Font,Control类型的
可m_Font的方法SetFont()好像不起作用
知道怎样正确使用这个方法的人麻烦告知一下!
+++++++++++++++++++++++++++++++++++++++++
CWnd::SetFont()
并对它设置了全局变量为m_Font,Control类型的
可m_Font的方法SetFont()好像不起作用
知道怎样正确使用这个方法的人麻烦告知一下!
应该是用静态文本的句柄来调用SetFont吧?
m_oFont.CreateFont(
20, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("宋体")); // lpszFacename
GetDlgItem(IDC_STATIC_FONT)->SetFont(&m_oFont);
这样是可以的。
HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// Call the base class implementation first! Otherwise, it may
// undo what we're trying to accomplish here.
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // Are we painting the IDC_MYSTATIC control? We can use
// CWnd::GetDlgCtrlID() to perform the most efficient test.
if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC && nCtlColor == CTLCOLOR_STATIC )
{
LOGFONT logFont;
memset(&logFont, 0, sizeof(LOGFONT));
logFont.lfCharSet = GB2312_CHARSET;
_tcscpy(logFont.lfFaceName, _T("宋体"));
logFont.lfHeight = -12;
m_hFont = CreateFontIndirect(&logFont);
pDC->SelectObject(CFont::FromHandle(m_hFont)); } return hbr;
}
只不过把GetDlgItem(IDC_STATIC_FONT)改成m_Font就不行了
不知道为什么?
什么意思?告诉你了SetFont是CWnd的方法,不是CFont的方法,不理解吗?
至于透明背景,正如goodboyws(深夜不眠者)说的,对话框映射WM_CTLCOLOR消息
然后返回透明画刷就行了
HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC && nCtlColor == CTLCOLOR_STATIC )
{
return static_cast<HBRUSH>(::GetStockObject(NULL_BRUSH));
} return hbr;
}