MFC中基于对话框的程序:
1、在对话框中加入一个RichEdit的控件,并且添加一个控件变量CRichEditCtrl m_eidtWrite。
2、在对话框中加入一个Combobox的控件,并且添加一个控件变量CComboBox m_ComboBoxFont。
3、调用EnumFontFamilies枚举出系统的字体放在
Combobox中。
4、建立一个全局变量CHARFORMAT (m_cfWrite);并将它初始化。
5、为Combobox添加个OnCloseupCombofont消息响应,用来选择字体,并把字体信息加入
到m_cfWrite中。代码如下:///用于枚举系统字体信息,并把他们显示到combobox中[color]
CClientDC dc(this);
::EnumFontFamilies( (HDC)dc, NULL, (FONTENUMPROC)EnumFontFamProc, (LPARAM) this );int CALLBACK CIMMsgDlg::EnumFontFamProc(ENUMLOGFONT *lpelf, NEWTEXTMETRIC *lpntm,
int nFontType, LPARAM lParam)
{
CIMMsgDlg* pWnd = (CIMMsgDlg*)lParam;
pWnd->m_ComboBoxFont.AddString(lpelf->elfLogFont.lfFaceName);
return 1;
}[color=#FF0000]//消息响应函数
void CIMMsgDlg::OnCloseupCombofont()
{
CString sTmp;
m_ComboBoxFont.GetLBText(m_ComboBoxFont.GetCurSel(),sTmp);
strcpy(m_cfWrite.szFaceName ,_T(sTmp));//设置字体
m_eidtWrite.SetCharFormat(m_cfWrite);
m_eidtWrite.SetDefaultCharFormat(m_cfWrite);
}
//初始化CHARFOMAT
CHARFORMAT m_cfWrite;
ZeroMemory(&m_cfWrite, sizeof(CHARFORMAT));
m_cfWrite.cbSize = sizeof(CHARFORMAT);
m_cfWrite.dwMask = CFM_FACE|CFM_SIZE | CFM_COLOR |CFM_ITALIC |CFM_UNDERLINE ;
m_cfWrite.dwEffects = 0;
m_cfWrite.yHeight = 12*12*2;//文字高度
m_cfWrite.crTextColor = RGB(0, 0, 0); //文字颜色
strcpy(m_cfWrite.szFaceName ,_T("宋体"));//设置字体*/问题是:
我想把richedit中的字体统一,里面只出现一种字体,上面的代码可是实现,对于输入的字体
我选择combobox中信息来改变,可以做到,可是当我再接着输入的时候就会出现问题,它不在是我
选择的那种字体。
例如:
当我在richedit输入几个字,然后在combobox选择“华文行楷”,可以改变当前的字体,当我在次输入时
它就不是华文行楷了(这种现象是对英文字母的,对中文没有此种现象)。上面的现象谁能帮我解决一下,使英文字母跟中文同步呢?
非常感谢
1、在对话框中加入一个RichEdit的控件,并且添加一个控件变量CRichEditCtrl m_eidtWrite。
2、在对话框中加入一个Combobox的控件,并且添加一个控件变量CComboBox m_ComboBoxFont。
3、调用EnumFontFamilies枚举出系统的字体放在
Combobox中。
4、建立一个全局变量CHARFORMAT (m_cfWrite);并将它初始化。
5、为Combobox添加个OnCloseupCombofont消息响应,用来选择字体,并把字体信息加入
到m_cfWrite中。代码如下:///用于枚举系统字体信息,并把他们显示到combobox中[color]
CClientDC dc(this);
::EnumFontFamilies( (HDC)dc, NULL, (FONTENUMPROC)EnumFontFamProc, (LPARAM) this );int CALLBACK CIMMsgDlg::EnumFontFamProc(ENUMLOGFONT *lpelf, NEWTEXTMETRIC *lpntm,
int nFontType, LPARAM lParam)
{
CIMMsgDlg* pWnd = (CIMMsgDlg*)lParam;
pWnd->m_ComboBoxFont.AddString(lpelf->elfLogFont.lfFaceName);
return 1;
}[color=#FF0000]//消息响应函数
void CIMMsgDlg::OnCloseupCombofont()
{
CString sTmp;
m_ComboBoxFont.GetLBText(m_ComboBoxFont.GetCurSel(),sTmp);
strcpy(m_cfWrite.szFaceName ,_T(sTmp));//设置字体
m_eidtWrite.SetCharFormat(m_cfWrite);
m_eidtWrite.SetDefaultCharFormat(m_cfWrite);
}
//初始化CHARFOMAT
CHARFORMAT m_cfWrite;
ZeroMemory(&m_cfWrite, sizeof(CHARFORMAT));
m_cfWrite.cbSize = sizeof(CHARFORMAT);
m_cfWrite.dwMask = CFM_FACE|CFM_SIZE | CFM_COLOR |CFM_ITALIC |CFM_UNDERLINE ;
m_cfWrite.dwEffects = 0;
m_cfWrite.yHeight = 12*12*2;//文字高度
m_cfWrite.crTextColor = RGB(0, 0, 0); //文字颜色
strcpy(m_cfWrite.szFaceName ,_T("宋体"));//设置字体*/问题是:
我想把richedit中的字体统一,里面只出现一种字体,上面的代码可是实现,对于输入的字体
我选择combobox中信息来改变,可以做到,可是当我再接着输入的时候就会出现问题,它不在是我
选择的那种字体。
例如:
当我在richedit输入几个字,然后在combobox选择“华文行楷”,可以改变当前的字体,当我在次输入时
它就不是华文行楷了(这种现象是对英文字母的,对中文没有此种现象)。上面的现象谁能帮我解决一下,使英文字母跟中文同步呢?
非常感谢
解决方案 »
- MFC中debug和release程序响应不一致求助
- 在单文档程序中分割窗口后,希望在某个窗口中显示多个文档,就如同vc中可以同时打开多个文件那样的效果,谢谢!
- 关于定时器的问题
- 显示位图问题,急!!!!!!!!!!
- Cannot open include file: 'CSpreadSheet.h': No such file or directory这是什么原因造成的?
- 求教各位大哥:我这程序怎么捕捉不到发给串口的触发消息啊?
- 请教一个media player控件的问题,达人请进
- vc++ 如何使radio button ,checkbox初始为已选状态?
- LPCTSTR 类型的变量怎么定义和付值?
- DAO如何读取“BLOB”类型的字段?
- 一台机器上开两个客户端会不会冲突
- CListCtrl在CDialog中如何添加内容
SetWordCharFormat 和setdefaultcharformat
有谁知道的,指导一下,谢谢!