/*
*函数: OnBnClickedBtnFont
*功能: 字体
*@Param : 
*@return 
*/
void CRadioMsgDlg::OnBnClickedBtnFont()
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
//判断是否选择了内容
//得到相关字体属性
BOOL bIsBold = m_cfSend.dwEffects & CFE_BOLD;
BOOL bIsItalic = m_cfSend.dwEffects & CFE_ITALIC;
BOOL bIsUnderline = m_cfSend.dwEffects & CFE_UNDERLINE;
BOOL bIsStrickout = m_cfSend.dwEffects & CFE_STRIKEOUT;
//设置属性
lf.lfCharSet = m_cfSend.bCharSet;
lf.lfHeight = m_cfSend.yHeight/15;
lf.lfPitchAndFamily = m_cfSend.bPitchAndFamily;
lf.lfItalic = bIsItalic;
lf.lfWeight = (bIsBold ? FW_BOLD : FW_NORMAL);
lf.lfUnderline = bIsUnderline;
lf.lfStrikeOut = bIsStrickout;
wcscpy(lf.lfFaceName, m_cfSend.szFaceName);
CFontDialog dlg(&lf,CF_SCREENFONTS,NULL,this);
dlg.m_cf.rgbColors = m_cfSend.crTextColor; if (dlg.DoModal() == IDOK)
{
dlg.GetCharFormat(m_cfSend);//获得所选字体的属性
int nSize=dlg.GetSize();
int nWeight=dlg.GetWeight(); //m_reditContent.SetShowFont(m_cfSend); m_reditContent.SetWordCharFormat(m_cfSend); m_reditContent.SetSelectionCharFormat(m_cfSend); 
m_nFontHeight = m_cfSend.yHeight;//字体大小
m_color =  m_cfSend.crTextColor;
m_FontName = m_cfSend.szFaceName;
bIsBold = m_cfSend.dwEffects & CFE_BOLD;
bIsItalic = m_cfSend.dwEffects & CFE_ITALIC;
bIsUnderline = m_cfSend.dwEffects & CFE_UNDERLINE;
bIsStrickout = m_cfSend.dwEffects & CFE_STRIKEOUT; if (bIsBold)
{
m_bIsBold = true;
m_btnBold.SetBtnState(1);
}
else
{
m_bIsBold = false;
m_btnBold.SetBtnState(0);
}
if (bIsItalic)
{
m_bIsItalic = true;
m_btnItalic.SetBtnState(1);
}
else
{
m_bIsItalic = false;
m_btnItalic.SetBtnState(0);
}
if (bIsUnderline)
{ m_bIsUnderLine = true;
m_btnUnderLine.SetBtnState(1);
}
else
{ m_bIsUnderLine = false;
m_btnUnderLine.SetBtnState(0);
}
if (bIsStrickout)
{ m_bIsStrickout = true;
}
else
{
m_bIsStrickout = false;
}
}
m_reditContent.SetFocus();
}
////----------------如上,设置字字体或,选中英文 可以设置正常, 再次输入,出现一种比较粗的字体,但不是粗体  这是啥原因。

解决方案 »

  1.   

    我记得设置字体不是用SetWordCharFormat的,而是:void CTestDlg::OnFontbtn() 
    {
    // TODO: Add your control notification handler code here
    CHARFORMAT cf;
    LOGFONT lf;
    memset(&cf, 0, sizeof(CHARFORMAT));
    memset(&lf, 0, sizeof(LOGFONT));
    m_EditInput.GetDefaultCharFormat(cf);//m_EditInput是跟编辑框关联的CRichEdit变量 //得到相关字体属性
    BOOL bIsBold = cf.dwEffects & CFE_BOLD;
    BOOL bIsItalic = cf.dwEffects & CFE_ITALIC;
    BOOL bIsUnderline = cf.dwEffects & CFE_UNDERLINE;
    BOOL bIsStrickout = cf.dwEffects & CFE_STRIKEOUT;//删除线
    //设置属性
    lf.lfCharSet = cf.bCharSet;
    lf.lfHeight = cf.yHeight/15;
    lf.lfPitchAndFamily = cf.bPitchAndFamily;
    lf.lfItalic = bIsItalic;
    lf.lfWeight = (bIsBold ? FW_BOLD : FW_NORMAL);
    lf.lfUnderline = bIsUnderline;
    lf.lfStrikeOut = bIsStrickout;
    _stprintf(lf.lfFaceName, cf.szFaceName); CFontDialog dlg(&lf);
    dlg.m_cf.rgbColors = cf.crTextColor;
    if (dlg.DoModal() == IDOK)
    {
    dlg.GetCharFormat(cf);//获得所选字体的属性
    m_EditInput.SetDefaultCharFormat(cf);
    }
    }以上代码经过测试,准确无误的,你看看