CString str;
GetDlgItemText( nEditID, &str );
str[n-1]就是你要的
GetDlgItemText( nEditID, &str );
str[n-1]就是你要的
解决方案 »
- 求助:快让人崩溃的error C2236: 意外的“class”“CElement”。是否忘记了“;”?
- CGdiObject::Attach是意义是什么
- 运行共享文件夹里的程序,是否会占用网络资源?
- mfc默认创建的主窗口怎么按回车键主窗口就消失了?
- 编译设备驱动程序时出现这种提示,怎么回事?
- 请问如何在WM_MOUSEMOVE中绘制一个矩形框而不闪烁(尽量不重绘)
- 如何判断一个路径指的是目录还是文件?
- 使用API函数绘制五边形
- 有关DIRECTX编程
- 想取一个ctreectrl的子树的父节点的名称
- 如何防止内存泄漏003,请高手回答!!!
- 有没有msdn中的vc的帮助是中文的,知道的告诉我,先谢了。
Edit控件中显示:eeretet
eererewr
eee
但是通过GetDlgItemText( nEditID, &str );后
str数据为“eeretet\neererewr\neee”
你得把换行符'\n'看作一个字符。
查查msdn的CEdit成员
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就是你要得的字符
myEdit.LineFromChar(-1)返回的就是下一行的行数了。
所以最好检测到用户选中了回车换行键,然后使上面myEdit.LineFromChar(-1)返回的行数减1。
你们说的用GetWindowsText的方法我也想过,但是因为EDIT控件里面的内容可能很长,这样的话用GetWindowsText(buff)要给buff分配一个很大的缓冲区来存放其内容,这样做太耗内存,而且为了取得一个字符而做大量的内存拷贝,效率太低了。
int start,end;
edit->getsel(start,end);
edit->GetWindowText(CString content);
CString character=content.Mid(start,1);
用GetWindowText的方法我也想过,但是因为EDIT控件里面的内容可能很长,这样的话用GetWindowsText(buff)要给buff分配一个很大的缓冲区来存放其内容,这样做太耗内存,而且为了取得一个字符而做大量的内存拷贝,效率太低了。
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);
这个办法似乎可行,先试试看,正确即给分。
这就给分。