很奇怪,用crichedit的findtext,
FINDTEXT  ft;
ft.chrg.cpMin = 0;
ft.chrg.cpMax = -1;
ft.lpstrText = "mn"
CRichEditCtrl aa;
long lPos = aa.FindText(FR_MATCHCASE|FR_WHOLEWORD, &ft);
编译出错,error C2039: 'FindTextA' : is not a member of 'CRichEditCtrl'
        d:\program files\microsoft visual studio\vc98\mfc\include\afxcmn.h(1012) : see declaration of 'CRichEditCtrl'
奇怪了,怎么我的FindText就成了FindTextA了呢?这里怎么会有个宏替换了呢?

解决方案 »

  1.   

    把aa通过MFC ClassWiard声明成和窗口中CRichEditCtrl控件绑定的变量试试。
      

  2.   

    #if (_RICHEDIT_VER >= 0x0200)
    #ifdef UNICODE
    #define FINDTEXT FINDTEXTW
    #else
    #define FINDTEXT FINDTEXTA             //的确被替换了
    #endif /* UNICODE */
    #else
    #define FINDTEXT FINDTEXTA
    #endif /* _RICHEDIT_VER >= 0x0200 */
      

  3.   

    把aa通过MFC ClassWiard声明成和窗口中CRichEditCtrl控件绑定的变量试试,然后把你的代码改成如下:
    FINDTEXTEX ft;              //只改动了这里
    ft.chrg.cpMin = 0;
    ft.chrg.cpMax = -1;
    ft.lpstrText = "mn";
    long lPos = m_richedit.FindText(FR_MATCHCASE|FR_WHOLEWORD, &ft);上面的代码经测试过OK。
      

  4.   

    前面的回复中这句忘了改成你这里用到的变量aa了:long lPos = aa.FindText(FR_MATCHCASE|FR_WHOLEWORD, &ft);
      

  5.   

    不行,我这么做了,还是有这个错误,PS,我是在对话框中加入RichEdit的,好像是被commdlg.h这个头文件把findText替换掉的,怎么回事呢??
      

  6.   

    宠替换不太明白,能否解释一下
    ---------------------------------------------
    if (_RICHEDIT_VER >= 0x0200)
    #ifdef UNICODE                    //如果你的工程支持UNICODE的话
    #define FINDTEXT FINDTEXTW      //把FINDTEXT替换成FINDTEXTW
    #else                            //否则的话(不支持UNICODE)
    #define FINDTEXT FINDTEXTA             //把FINDTEXT替换成FINDTEXTA
    #endif /* UNICODE */
    #else
    #define FINDTEXT FINDTEXTA        //如果你的工程不支持UNICODE,且RICHEDIT版本又低于0x0200,就把FINDTEXT替换成FINDTEXTA
    #endif /* _RICHEDIT_VER >= 0x0200 */
      

  7.   

    commdlg.h文件中是下面这样替换的吧,没关系,我测试的工程中也是在这里替换的,和你的一样。
    #ifdef UNICODE
    #define FindText  FindTextW
    #else
    #define FindText  FindTextA
    #endif // !UNICODE
      

  8.   

    在这里替换的与上面解释宏的区别仅仅在于不对RICHEDIT版本进行判断了而已。
      

  9.   

    是这样的,我跟踪aa.FindText的定义来源,在commdlg.h中找到这么一段
    HWND  APIENTRY    FindTextA(LPFINDREPLACEA);
    HWND  APIENTRY    FindTextW(LPFINDREPLACEW);
    #ifdef UNICODE
    #define FindText  FindTextW
    #else
    #define FindText  FindTextA
    #endif // !UNICODE
    在richedit.h中有这么一段
    #if (_RICHEDIT_VER >= 0x0200)
    #ifdef UNICODE
    #define FINDTEXTEX FINDTEXTEXW
    #else
    #define FINDTEXTEX FINDTEXTEXA
    #endif /* UNICODE */
    #else
    #define FINDTEXTEX FINDTEXTEXA
    #endif /* _RICHEDIT_VER >= 0x0200 */
    按道理有这两个头文件,aa.FindText就应该自动被转换成aa.FindTextA了,现在奇怪的就是为什么会出这个错误提示,有点像CListCtrl的class member没有“知道”FindText函数已经变成了FindTextA。
    ……
    我自己都给自己绕晕了,不知道楼上的大哥又没有明白,汗……
      

  10.   

    我是在MFC ClassWiard中绑定了CRichEditCtrl控件aa,然后按照上面说的代码写的,后来也试着把FINDTEXT改成了FINDTEXTEX,当我输入aa.的时候,后面的自动提示也给出了FindText这个函数的选择,可就是编译的时候出线这个错误,这是奇怪加郁闷。
      

  11.   

    后面的自动提示也给出了FindText这个函数的选择
    ------------------------------------------------
    这个没影响的。我的机器系统XP(sp1),VC++6.0下无任何错误或警告。
      

  12.   

    我重新建了个test工程,这段代码是好的,看来我要在我的其他代码地方找问题了,谢谢楼上XD的帮忙,结帖了