关于CFontDialog初始化的时候字号的问题 我这里不知道怎么做了 保存的字号用在下次初始化的时候就不对了

bluephenix 2005-11-21 12:15:34
大虾帮我看看下面的代码有什么问题没有? 不知道这个字号要怎么做了
====================================================================================
CHARFORMAT cf;
LOGFONT lg;
unsigned long dw = 0;

cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE|CFM_COLOR|CFM_FACE|CFM_SIZE
|CFM_CHARSET;
m_SendmsgBar.m_SendMsg.GetSelectionCharFormat( cf ); //m_SendMsg 继承的CRichEdit
lg.lfHeight = m_pDoc->m_UserConfig.nFontSize/20;
if(m_pDoc->m_UserConfig.bItaly)
lg.lfItalic = 1;
else
lg.lfItalic = 0;

if(m_pDoc->m_UserConfig.bUnderline)
lg.lfUnderline = 1;
else
lg.lfUnderline = 0;

lg.lfStrikeOut = false;

lg.lfCharSet = GB2312_CHARSET;
....//其他的设置

CFontDialog fd(&lg, CF_EFFECTS | CF_SCREENFONTS |CF_INITTOLOGFONTSTRUCT, NULL, this);

fd.m_cf.rgbColors = m_pDoc->m_UserConfig.FontColor;

fd.m_cf.nSizeMin = 0;
fd.m_cf.nSizeMax = 500;

if(fd.DoModal() == IDOK)
{
//在这里保存
m_pDoc->m_UserConfig.nFontSize = fd.GetSize()*2;
.....
}
...全文
365 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingpiao 2005-11-21
  • 打赏
  • 举报
回复
记得孙鑫的视频里有讲,想不起了
dingpiao 2005-11-21
  • 打赏
  • 举报
回复
获取当前字体信息
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
goodboyws 2005-11-21
  • 打赏
  • 举报
回复
CFontDialog的LOGFONT用的是像素
lf.lfHeight = -::MulDiv(-lf.lfHeight,
dc.GetDeviceCaps(LOGPIXELSY), 72);//像素

CHARFORMAT用的是磅值
lf.lfHeight = -::MulDiv(-lf.lfHeight, 72,
dc.GetDeviceCaps(LOGPIXELSY));//磅值
CFontDialog会改变入传的LOGFONT,所以我一般不用GetSize
菜牛 2005-11-21
  • 打赏
  • 举报
回复
CHARFORMAT.yHeight
Character height, in twips (1/1440 of an inch or 1/20 of a printer's point).

LOGFONT.lfHeight
Specifies the height, in logical units, of the font's character cell or character. The character height value (also known as the em height) is the character cell height value minus the internal-leading value. The font mapper interprets the value specified in lfHeight in the following manner.

CFontDialog::GetSize Return Value
The font's size, in tenths of a point.

bluephenix 2005-11-21
  • 打赏
  • 举报
回复
我跟了下 应该是在lg.lfHeight = m_pDoc->m_UserConfig.nFontSize/20; 这里出问题了 这里获取的字号和之前的对不上0
那位能给我解释下CHARFORMAT 和 LOGFONT 中两个字号的大小转换转系 还有CFontDialog::GetSize()返回的字号和上面2个的大小转换啊??
goodboyws 2005-11-21
  • 打赏
  • 举报
回复
我的代码是这样的
LOGFONT lf = m_Font;
CFontDialog fontDlg(&lf,CF_EFFECTS | CF_SCREENFONTS,NULL,this);
fontDlg.m_cf.rgbColors = m_crFont;
fontDlg.m_cf.Flags&=~CF_SHOWHELP;


CClientDC dc(NULL);
lf.lfHeight = -::MulDiv(-lf.lfHeight,
dc.GetDeviceCaps(LOGPIXELSY), 72);//像素
if (fontDlg.DoModal() == IDOK)
{
m_crFont = fontDlg.GetColor();
lf.lfHeight = -::MulDiv(-lf.lfHeight, 72,
dc.GetDeviceCaps(LOGPIXELSY));//磅值
m_Font = lf;
if (fontDlg.IsBold())
m_Font.lfWeight = FW_BOLD;
else
m_Font.lfWeight = FW_NORMAL;

m_crFont = fontDlg.m_cf.rgbColors;
m_bIsBold = fontDlg.IsBold();
m_bIsItalic = fontDlg.IsItalic();
m_bIsStrikeOut = fontDlg.IsStrikeOut();
m_bIsUnderLine = fontDlg.IsUnderline();
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD|CFM_CHARSET|CFM_COLOR|CFM_FACE|CFM_ITALIC|CFM_SIZE|CFM_UNDERLINE|CFM_STRIKEOUT;

if (m_bIsBold)
{
cf.dwEffects |= CFE_BOLD;
}
if (m_bIsItalic)
{
cf.dwEffects |= CFE_ITALIC;
}
if (m_bIsUnderLine)
{
cf.dwEffects |= CFE_UNDERLINE;
}
if (m_bIsStrikeOut)
{
cf.dwEffects |= CFM_STRIKEOUT;
}
cf.yHeight = abs(m_Font.lfHeight) * 20;
cf.crTextColor = m_crFont;
cf.bCharSet = (BYTE)m_Font.lfCharSet;
_tcscpy((TCHAR *)cf.szFaceName, m_Font.lfFaceName);

m_RichEdit.SetSel(0, -1);
m_RichEdit.SetSelectionCharFormat(cf);
m_RichEdit.SetDefaultCharFormat(cf);
m_RichEdit.SetWordCharFormat(cf);
m_RichEdit.SetSel(0, 0);


}
goodboyws 2005-11-21
  • 打赏
  • 举报
回复
cf好像没起什么作用
dingpiao 2005-11-21
  • 打赏
  • 举报
回复
先给CFontDialog::m_cf赋值看看

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧