CString str;
GetDlgItemText( nEditID, &str );
str[n-1]就是你要的

解决方案 »

  1.   

    一不用担心EDIT控件中的换行符,因为EDIT控件中的多行数据都是存在一起的比如:
    Edit控件中显示:eeretet
                   eererewr
                   eee
    但是通过GetDlgItemText( nEditID, &str );后
    str数据为“eeretet\neererewr\neee”
    你得把换行符'\n'看作一个字符。
      

  2.   

    第二个的我记不得了,但好象有个函数可以的
    查查msdn的CEdit成员
      

  3.   

    得光标后的字符如下:
    CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
    CString str;
    str.GetWindowText(str);
    CPoint pt = pEdit->GetCaretPos();
    int n = pEdit->CharFromPos(pt);
    int nLineIndex = HIWORD(n);
    int nCharIndex = LOWORD(n);
    char a = str[nCharIndex];
     a就是你要得的字符
      

  4.   

    就是因为换行符也是一个字符才麻烦。因为用鼠标点一行的最末尾可能会点中换行符(只能用鼠标点中,用键盘的方向键是点不到那个位置的),当鼠标点中这个换行符时,用
    myEdit.LineFromChar(-1)返回的就是下一行的行数了。
    所以最好检测到用户选中了回车换行键,然后使上面myEdit.LineFromChar(-1)返回的行数减1。
      

  5.   

    To xiaoxiaohan(萧晓寒) 和 dongfa(阿东)
    你们说的用GetWindowsText的方法我也想过,但是因为EDIT控件里面的内容可能很长,这样的话用GetWindowsText(buff)要给buff分配一个很大的缓冲区来存放其内容,这样做太耗内存,而且为了取得一个字符而做大量的内存拷贝,效率太低了。
      

  6.   

    CEdit *edit=(CEdit *)GetDlgItem(IDC_EDIT1);
    int start,end;
    edit->getsel(start,end);
    edit->GetWindowText(CString content);
    CString character=content.Mid(start,1);
      

  7.   

    TO goodbetter(michaelpl) :
    用GetWindowText的方法我也想过,但是因为EDIT控件里面的内容可能很长,这样的话用GetWindowsText(buff)要给buff分配一个很大的缓冲区来存放其内容,这样做太耗内存,而且为了取得一个字符而做大量的内存拷贝,效率太低了。
      

  8.   

    你说的有道理,这样是会很慢的.效率也不高.但CEdit好像真的没有更好的办法了。
      

  9.   

    如果用RichEditbox或许会好得多
      

  10.   

    CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
    CString str;
    CPoint pt = pEdit->GetCaretPos();
    int n = pEdit->CharFromPos(pt);
    int nLineIndex = HIWORD(n);
    int nCharIndex = LOWORD(n);  //总位置
    pEdit->GetLine(nLineIndex,str); //取该行的内容
    int nLineIndexChar = pEdit->LineIndex(); //当前行首字符的位置
    char c = str.Mid(nCharIndex-nLineIndexChar,1);
      

  11.   

    TO vccsdn(johnson):
    这个办法似乎可行,先试试看,正确即给分。
      

  12.   

    vccsdn(johnson)的方法不错,可行。
    这就给分。