我在资源里建立了几个static控件,是默认宋体字体。在dialog上我加了一个按钮,点击它时,那几个Static控件轮流变成黑体字,其它的保持默认字体。
代码如下void CConfigurationDlg::OnNext() 
{
// TODO: Add your control notification handler code here
m_iCurStep++; // In last step there is no NEXT button
if (4 < m_iCurStep)
{
m_iCurStep = 4;
return;
}
if (4 == m_iCurStep)
{
m_btnNext.ShowWindow(SW_HIDE);
m_btnOk.ShowWindow(SW_SHOW);
}
m_btnPrevious.ShowWindow(SW_SHOW); CFont* font;
CFont* oldfont;
font = new CFont();
oldfont = new CFont(); font->CreateFont(16,0,0,0,FW_BOLD,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"黑体");
oldfont->CreateFont(
12,                        // 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
    "宋体");                   // lpszFacename CStatic * pSta;
CString s; pSta = (CStatic *)m_arrSta[m_iCurStep-1];   pSta->ShowWindow(SW_HIDE);
   pSta->ShowWindow(SW_SHOW);
pSta->SetFont(oldfont);         //把前一个字体还原
pSta = NULL;
s = ""; pSta = (CStatic *)m_arrSta[m_iCurStep];   pSta->ShowWindow(SW_HIDE);
   pSta->ShowWindow(SW_SHOW);
pSta->SetFont(font);            //把这个换成新字体
delete font;
delete oldfont;
font = NULL;
oldfont = NULL; CWnd* pWnd;
pWnd = (CWnd *)m_arrDlg.GetAt(m_iCurStep);
SwitchTo(pWnd); GetDlgItem(IDC_STATIC0)->SetFocus();}
现在有2个问题  1,我这样弄完以后,点击按钮时确实是一个static一个static的变黑体字体了,但是在窗口隐藏后、或是被其它窗口挡住后再显示的时候,那几个static全变成黑体字了。这怎么办?
(这个问题求解决办法)2.为什么   pSta->ShowWindow(SW_HIDE);
   pSta->ShowWindow(SW_SHOW);
pSta->SetFont(font);            //把这个换成新字体
pSta->setfont这句要在showwindow(sw_show)之后啊,我试过放在前面任何一句前都不行。
(这个问题应该是基础性的问题,我对windows这个还不熟,高手指点下我该去上哪本书上看哪部分就好了)

解决方案 »

  1.   


    delete font;
    font = NULL;
    去掉
      

  2.   

    去掉 delete font; 后就不存在问题2了,是因为把字体改变后就把字体分配的内存删了,如果不刷新窗口没问题,如果刷新窗口了,程序就要发生重绘,这时要加载字体,而已经把字体的内存给删除了,所以控件就默认为父类(就是对话框)的字体了
      

  3.   

    font->CreateFont(16,0,0,0,FW_BOLD,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
            CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"黑体");
    不能真正改变字体,改成“华文彩云”没效果。
    用方法
    pFont->CreatePointFont(100,"华文彩云");