怎么改变CEdit中字符的字体 怎么改变CEdit中字符的字体,不要告诉我在资源中改,我需要在程序中操作 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CFont m_font;m_font.CreateFont();wndEdit.SetFont(&m_font); 在Windows中,每个窗体都有自己的字体.要改变其字体首先要CFont::CreateFont创建一个字体,然后用CWnd::SetFont选择此字体,赋给控件.函数原型: BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename ); 参数说明: nHeight :字体高度.>0:字体的高度值;=0:字体采用缺省直.<0:此值的绝对值为高度. nWidth :字体宽度. nEscapement :文本行的倾斜度. nOrientation :字符基线的倾斜度. nWeight :字体的粗细.如下: .FW_DONTCARE .FW_THIN .FW_EXTRALIGHT ..... bItalic :字体是否为斜体 bUnderline :字体是否带下划线 cStrikeOut :字体是否带删除线 nCharSet :字体的字符集 .ANSI_CHARSET .DEFAULT_CHARSET .SYMBOL_CHARSET ...... nOutPrecision :字符的输出精度 nClipPrecision :字符裁剪的精度 nQuality :字符的输出质量 nPitchAndFamily :字符间距和字体族(低位说明间距,高位说明字符族) lpszFacename :字体名称 假设你已有了名为My的对话框工程.并有一个ID=IDC_EDIT1的Edit控件. class CMyDlg : public CDialog { public: CFont m_Font; ........ }; BOOL CTMyDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_Font.CreateFont(-11,0,0,0,100,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"Arial"); CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1); m_Edit->SetFont(&m_Font,FALSE); return TRUE; // return TRUE unless you set the focus to a control } m_hFont = ::CreateFont(40, 0, 0, 0, 400, TRUE, FALSE, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,DEFAULT_PITCH | FF_DONTCARE, "黑体");::SendMessage(::GetDlgItem(this->m_hWnd, IDC_EDIT), WM_SETFONT, (WPARAM)m_hFont, MAKELPARAM(TRUE, 0)); 同意:dz_w(快乐之星): gai() ,bear_c()方法在RichEdit中可以. 再OnInitDialog()中添加:CFont m_Font ;m_Font.CreateFont(16,0,0,0, 200,FALSE,FALSE,0, ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH&FF_SWISS, "Aerial");GetDlgItem(IDC_EDIT)->SetFont(&m_Font); 我在OnInitDialog中加入: LOGFONT lf = {0}; lf.lfHeight = 12 * 10; strcpy(lf.lfFaceName, "仿宋_GB2312"); CFont font; font.CreatePointFontIndirect(&lf); GetDlgItem(IDC_EDIT1)->SetFont(&font); UpdateWindow();写入英文没问题,可是输入中文出错,请大家看看问题出在哪里? 问题解决,谢谢你们大家,特别感谢 快乐之星。我发帖前的代码用的是:LOGFONT lf = {0}; lf.lfHeight = 12 * 10; strcpy(lf.lfFaceName, "仿宋_GB2312"); CFont font; font.CreatePointFontIndirect(&lf); m_cEdit.SetFont(&font); // m_cEdit为一个CEdit变量 UpdateWindow(); // 没有这句话,字体没什么改变 // 有这句话,字体有所改变,可是一输入汉字,就出错现在改为: // 设置编辑框的字体 HDC hDC = ::GetDC(NULL); LOGFONT lf = {0}; lf.lfHeight = - MulDiv(12, GetDeviceCaps(hDC, LOGPIXELSY), 72); ::strcpy(lf.lfFaceName, "仿宋_GB2312"); m_hFont = ::CreateFontIndirect(&lf); ::SendMessage(m_cEdit.GetSafeHwnd(), WM_SETFONT, (WPARAM)m_hFont, MAKELPARAM(TRUE, 0)); ::ReleaseDC(NULL, hDC); // 成功是否是CFont的函数CreatePointFontIndirect()某些情况下不适用?谢谢大家 ,结账 感谢 有点着急 的提醒,我差点用了CRichEdit,后来同事说CRichEdit比较复杂,不值得为这个去研究。呵呵,Thank you thank you! const变量仍然会被修改 UDP问题请教? 有谁知道如何将dialog资源导入其他工程 如何让我创建的EDIT有3D效果 想检查某个文件存不存在?若不存在,创建之?如何实现? 请教高手:CArray类怎么用? 如何给弹出式菜单加ToolTip? 如何获得注册表中一个目录中的子目录名? 关于vect(class)问题 opencv1.0用下面这种方法打开摄像头怎么捕捉图像 请问有没有制作安装程序的书籍(install shield)之类的(不知道拼错没有,哈哈) 急求datagrid的用法!!!100分相送!!!
m_font.CreateFont();
wndEdit.SetFont(&m_font);
函数原型:
BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );
参数说明:
nHeight :字体高度.>0:字体的高度值;=0:字体采用缺省直.<0:此值的绝对值为高度.
nWidth :字体宽度.
nEscapement :文本行的倾斜度.
nOrientation :字符基线的倾斜度.
nWeight :字体的粗细.如下:
.FW_DONTCARE
.FW_THIN
.FW_EXTRALIGHT
.....
bItalic :字体是否为斜体
bUnderline :字体是否带下划线
cStrikeOut :字体是否带删除线
nCharSet :字体的字符集
.ANSI_CHARSET
.DEFAULT_CHARSET
.SYMBOL_CHARSET
......
nOutPrecision :字符的输出精度
nClipPrecision :字符裁剪的精度
nQuality :字符的输出质量
nPitchAndFamily :字符间距和字体族(低位说明间距,高位说明字符族)
lpszFacename :字体名称 假设你已有了名为My的对话框工程.并有一个ID=IDC_EDIT1的Edit控件.
class CMyDlg : public CDialog
{
public:
CFont m_Font;
........
}; BOOL CTMyDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // TODO: Add extra initialization here
m_Font.CreateFont(-11,0,0,0,100,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"Arial");
CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);
m_Edit->SetFont(&m_Font,FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
::SendMessage(::GetDlgItem(this->m_hWnd, IDC_EDIT), WM_SETFONT, (WPARAM)m_hFont, MAKELPARAM(TRUE, 0));
: gai() ,bear_c()方法在RichEdit中可以.
m_Font.CreateFont(16,0,0,0,
200,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH&FF_SWISS,
"Aerial");GetDlgItem(IDC_EDIT)->SetFont(&m_Font);
lf.lfHeight = 12 * 10;
strcpy(lf.lfFaceName, "仿宋_GB2312"); CFont font;
font.CreatePointFontIndirect(&lf); GetDlgItem(IDC_EDIT1)->SetFont(&font); UpdateWindow();写入英文没问题,可是输入中文出错,请大家看看问题出在哪里?
lf.lfHeight = 12 * 10;
strcpy(lf.lfFaceName, "仿宋_GB2312");
CFont font;
font.CreatePointFontIndirect(&lf); m_cEdit.SetFont(&font); // m_cEdit为一个CEdit变量
UpdateWindow(); // 没有这句话,字体没什么改变 // 有这句话,字体有所改变,可是一输入汉字,就出错
现在改为:
// 设置编辑框的字体
HDC hDC = ::GetDC(NULL);
LOGFONT lf = {0};
lf.lfHeight = - MulDiv(12, GetDeviceCaps(hDC, LOGPIXELSY), 72);
::strcpy(lf.lfFaceName, "仿宋_GB2312");
m_hFont = ::CreateFontIndirect(&lf);
::SendMessage(m_cEdit.GetSafeHwnd(), WM_SETFONT, (WPARAM)m_hFont,
MAKELPARAM(TRUE, 0)); ::ReleaseDC(NULL, hDC); // 成功是否是CFont的函数CreatePointFontIndirect()某些情况下不适用?谢谢大家 ,结账