做的东西需要对关键字上颜色,在重载的OnEnChange()函数里设置,比如,当前关键字是"select",代码如下: CHARFORMAT cf;
cf.cbSize = sizeof(cf);
GetDefaultCharFormat(cf);  
DWORD dwEffects = 0;
cf.dwEffects = dwEffects;
cf.crTextColor = RGB(255,0,255); 
cf.dwMask = CFM_BOLD | CFM_COLOR; 
SetSel(m_SelEnd-6,m_SelEnd);   
SetWordCharFormat(cf);   
ReplaceSel(_T("select"));  在英文输入法时输入select后马上就变成红色,测试通过;但现在的问题是,在中文输入法时输入select后,SetWordCharFormat函数好像不起作用,返回值为0。字符串select也没有变色,不知道是为什么?

解决方案 »

  1.   

    中文输入时有全角半角之分 全角时输入的字符相当于两个英文字母
    SetSel好象会选中半边 导致SetWordCharFormat没效果
    也碰到过 不过没细究 用UNICODE试试看
    中英文时混合时字符数最好自己去算
      

  2.   

    我中文输入的时候是半角,SetWordCharFormat也还是没有效果。
    你说的UNICODE怎么计算呢?
      

  3.   

    哦 我说的UNICODE是想CRichEdit里的字符计数函数有没有W版的 有的话字符数应该不会错 可能就有效果了 TCHAR szText[] = _T("This is 中国。");
    int nChars = 0; // 字符数
    int nTextLength = 0; // 串长度 nTextLength = _tcslen(szText);   // ----这里是14
    if (0 == nTextLength)
    {
    return;
    }
    for ( int i = 0; i <nTextLength; ++i)
    {
    if (_ismbblead((unsigned int)*(szText + i)) || 0 > (int)*(szText + i))
    {
    // 双字节字符
    ++i;
    }
    ++nChars;    // ---加到最后是11,这个才是字符数,14是把中文当成两个了
    }
    不知道你的问题是不是这个引起的
      

  4.   

    我觉得应该不是上面说的这个问题,中文输入的时候我跟进去看过,m_SelEnd和英文输入的时候是一样的,看来不是把每个字符当两个计算的。
      

  5.   

    我用的是sogo拼音和微软拼音都试过,都不起作用。
      

  6.   

    智能ABC怎么打字母我还真是不怎么清楚,但是现在比较常见的微软拼音和sogo拼音下有这个问题,我总得解决了吧
      

  7.   

    http://download.csdn.net/source/826748
      

  8.   

    建议你使用Unicode字符来代替ANSI字符,操作系统的内核用的也是Unicode字符。它应该可以解决你现在遇到的问题。而且,使用Unicode字符的程序,在系统内部的运行速度更快。
      

  9.   


    能说具体点么?是说计算的时候使用Unicode字符来计算?怎样转换?
      

  10.   

    从你的代码来看是没有问题的.
    由于你用的crichedit控件,建议你采用的格式结构体应该是:CHARFORMAT2.其原型为:
    typedef struct _charformat2 {
      UINT        cbSize;
      DWORD       dwMask;
      DWORD       dwEffects;
      LONG        yHeight;
      LONG        yOffset;
      COLORREF    crTextColor;
      BYTE        bCharSet;
      BYTE        bPitchAndFamily;
      TCHAR       szFaceName[LF_FACESIZE];
      WORD        wWeight;
      SHORT       sSpacing;
      COLORREF    crBackColor;
      LCID        lcid;
      DWORD       dwReserved;
      SHORT       sStyle;
      WORD        wKerning;
      BYTE        bUnderlineType;
      BYTE        bAnimation;
      BYTE        bRevAuthor;
      BYTE        bReserved1;
    } CHARFORMAT2;
      

  11.   

    楼上的,如果用CHARFORMAT2就可以解决我的问题了么?我刚才试了一下还是不行,不知道除了 crTextColor是不是还需要设置其他的属性,请指点。
      

  12.   


    是说将文字内部转码么?但是转码以后SetWordCharFormat就能成功了么
      

  13.   

    很早做过类似的,好像是用到这个函数转换,但是,好像还有其他的!最好上网搜索一下!我记得,最后的做法是将CRichEditCtrl重载了,对一些特别情况进行单独处理了一下!
      

  14.   

    是不是使用了RichEdit version 2
    RichEdit2控件有两种:一种是RichEdit2A,你注意到了这个A么,还有一种是RichEdit2W,注意到了这个W么。
    使用哪种控件就看你用什么编码了。
    GoodLuck。