怎么改变CEdit中字符的字体,不要告诉我在资源中改,我需要在程序中操作

解决方案 »

  1.   

    CFont m_font;
    m_font.CreateFont();
    wndEdit.SetFont(&m_font);
      

  2.   

    在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
      }
      

  3.   

    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));
      

  4.   

    同意:dz_w(快乐之星)
    : gai() ,bear_c()方法在RichEdit中可以. 
      

  5.   

    再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);
      

  6.   

    我在OnInitDialog中加入:         LOGFONT lf = {0};
    lf.lfHeight = 12 * 10;
    strcpy(lf.lfFaceName, "仿宋_GB2312"); CFont font;
    font.CreatePointFontIndirect(&lf); GetDlgItem(IDC_EDIT1)->SetFont(&font); UpdateWindow();写入英文没问题,可是输入中文出错,请大家看看问题出在哪里?
      

  7.   

    问题解决,谢谢你们大家,特别感谢 快乐之星。我发帖前的代码用的是: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()某些情况下不适用?谢谢大家 ,结账
      

  8.   

    感谢 有点着急 的提醒,我差点用了CRichEdit,后来同事说CRichEdit比较复杂,不值得为这个去研究。呵呵,Thank you thank you!