从 CFontDialog 获取字体

Getting font from CFontDialog

本文关键字:字体 获取 CFontDialog      更新时间:2023-10-16

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

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

void CTxtDlg::OnOK()
{
    m_txtEdit.GetWindowText(m_text);
    CDialog::OnOK();
}

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

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

CFont m_font应等于 LOGFONT m_lf。

void CTxtDlg::OnBnClickedButton1()
{

    CFontDialog dlg;
    int response = dlg.DoModal();                         
    dlg.GetCurrentFont(&m_lf);
}

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

我该如何实现此目的?

本质上,您的问题与CFontDialog完全无关。您的评论是在问,如何在给定 LOGFONT 结构的情况下创建 CFont 对象。这就是 CFont::CreateFontIndirect 成员函数的用途:

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

CTxtDlg中添加一个CFont

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 之后必须保持有效,因此如果仍在对话框中设置字体,则无法轻松销毁字体并重新创建它。