我想对我程序中RichEdit控件中被选定的的文本进行编辑,打开一个CFontDialog对话框,然后相应的改变字体,大小,颜色等,但是dlg.GetCurrentFont()得到的是一个LOGFONT型的数据,用richedite的函数SetSelectionCharFormat()需要的参数是 CHARFORMAT型的,怎么在这两个中进行转换,还有CFont型,这三个有什么关系啊???

解决方案 »

  1.   

    我也不太清楚这个有什么关系,但你完全可以指定charformat的成员来设置字体。
    给你看我的一段代码
    void CEasyWordDlg::InitRichedits()
    {
    CHARFORMAT cf;
    memset(&cf, 0, sizeof(cf));
    cf.cbSize = sizeof(cf);
    cf.dwMask = CFM_COLOR | CFM_FACE | CFM_CHARSET | CFM_SIZE;
    cf.crTextColor = m_Color.crPractise;
    cf.bCharSet = 0;
    cf.bPitchAndFamily = 34;
    cf.yHeight = 350;
    _tcscpy(cf.szFaceName, _T("Arial"));
    // 练习窗口
    m_rdPractice.SetDefaultCharFormat(cf);
    m_rdPractice.SetBackgroundColor(FALSE, m_Color.crPractiseBk);
    // 单词窗口
    cf.crTextColor = m_Color.crWord;
    m_rdWord.SetDefaultCharFormat(cf);
    m_rdWord.SetBackgroundColor(FALSE, m_Color.crWordBk);
    // 解释窗口
    cf.crTextColor = m_Color.crExplain;
    cf.bCharSet = 0;
    cf.bPitchAndFamily = 34;
    cf.yHeight = 220;
    _tcscpy(cf.szFaceName, _T("Tahoma"));
    m_rdMeaning.SetDefaultCharFormat(cf);
    m_rdMeaning.SetBackgroundColor(FALSE, m_Color.crExplainBk); m_rdPractice.SetEventMask(ENM_KEYEVENTS | ENM_CHANGE);
    m_rdWord.SetEventMask(ENM_MOUSEEVENTS);
    m_rdMeaning.SetEventMask(ENM_KEYEVENTS | ENM_MOUSEEVENTS);
    }
      

  2.   

    哈哈,终于发现有个函数:CFontDialog::GetCharFormat(CHARFORMAT &)