以下代码,目的是为一编辑框控件设定字体及字号,m_Output为绑定到编辑框控件的CEdit类,
代码执行到fdlg.SetFont或fdlg.GetFont的时候就非法操作了,请问谁知道这该怎么处理?
CFontDialog fdlg(NULL, CF_SCREENFONTS);
CFont *pFont;
pFont = m_Output.GetFont();
fdlg.SetFont(pFont, TRUE);
if(fdlg.DoModal() == IDOK)
{
pFont = fdlg.GetFont();
m_Output.SetFont(pFont, true);
}

解决方案 »

  1.   

    你的
    fdlg.SetFont(pFont, TRUE);
    语句的目的是什么?给你的“字体选择对话框”本身这个窗口更改字体?对!这个语句就是这个意思,不是初始化“字体选择对话框”,这时候窗体还不存在,当然不能对他执行这个操作。你的目的是对“字体选择对话框”进行初始化,这需要更改CFontDialog类的m_cf成员变量,对该变量赋值,就可以初始化你的“字体选择对话框”了。pFont = fdlg.GetFont();也是一样,该语句的意义是获得“字体选择对话框”上它本身的字体,不是你选择的字体(和语句pFont = m_Output.GetFont();是一样的意思),要获取你选择的字体,必须用CFontDialog类的成员函数GetCurrentFont( LPLOGFONT lplf );。