从CFontDialog获取字体

时间:2017-01-18 10:46:15

标签: c++ mfc

我正在创建一个简单的GUI来更改Visual C ++中的输入文本格式,并且想知道如何从CFontDialog中获取字体类型。

输入文本从EditBox提取到m_txtEdit,然后传递给m_text。

val meanChildrenSize = people.toList.map(_.children().size).sum.toDouble / people.size
meanChildrenSize: Double = 0.6666666666666666

m_text是CDoc类的成员,应根据用户在CFontDialog中选择的内容进行格式化。

所选字体将传递给LOGFONT m_lf变量,该变量是CTxtDlg类的成员。

应该使CFont m_font等于LOGFONT m_lf。

void CTxtDlg::OnOK()
{

    m_txtEdit.GetWindowText(m_text);
    CDialog::OnOK();
}

CView类应该输出根据CFont m_font中设置的格式化的CString m_text。

我如何做到这一点?

2 个答案:

答案 0 :(得分:1)

基本上,您的问题与CFontDialog完全无关。 Your comment正在询问如何在CFont结构的情况下创建LOGFONT对象。这就是CFont::CreateFontIndirect成员函数的用途:

if ( !m_font.CreateFontIndirect( &m_lf ) ) {
    // handle error
}
// use m_font

答案 1 :(得分:0)

首先向CFont添加CTxtDlg

class CTxtDlg {
    ....
    CFont m_font;
}

然后创建并使用字体:

void CTxtDlg::OnBnClickedButton1()
{
    CFontDialog dlg;
    int response = dlg.DoModal();
    if(response == IDOK) {
        dlg.GetCurrentFont(&m_lf);
        VERIFY(m_font.CreateFontIndirect(&m_lf));
        SetFont(&m_font);
    }
}

请注意,据我所知,字体必须在SetFont之后保持有效,因此如果仍然在对话框中设置字体,则无法轻易销毁字体并重新创建字体。