在文字处理中插入符处于插入的位置
来源:互联网 发布:阿里云备案域名转让 编辑:程序博客网 时间:2024/06/05 07:01
关于在文档输入时准确的将插入符设置在两个文字中间
1、通过m_ptWriteCaret的坐标判断是否输入了文字
if(m_ptWriteCaret.x==0&&m_ptWriteCaret.y==0)pt=CPoint(0,0);
若未输入文字,直接将插入符设置在(0,0)处;2、判断鼠标点击的纵坐标位置是否超过了文字输入的位置
else{//光标位置超过了输入字符的情况if(point.y>(m_ptWriteCaret.y+tm.tmHeight))pt=m_ptWriteCaret;//将字符创放在输入文字的末尾;
3、获取字体的信息
CDC *dc;dc=GetDC();TEXTMETRIC tm;dc->GetTextMetrics(&tm);//获取字体信息
4、利用字体的信息利用point.y除以字体高得到应处于哪一行,point.x除以自体的平均宽度判断处于那一列,从而得到插入符的大约位置;(注意这里只是个大约的位置,只是判断在哪个字之间插入,并不是要确定具体的坐标)
//光标位置超过了输入字符的情况if(point.y>(m_ptWriteCaret.y+tm.tmHeight))pt=m_ptWriteCaret;//将字符创放在输入文字的末尾;//插入符纵坐标在输入纵坐标之内else {iHeight=point.y/tm.tmHeight;//判断插入符在第几行;strLine=m_strAarray.GetAt(iHeight);//从集合类中获取改行字符串;CSize sz=dc->GetTextExtent(strLine);//获取改行字符串的长度iNum=point.x/tm.tmAveCharWidth; //获取改行字符串的第几个位置插入//在每行已输入字里if(point.x<sz.cx){//点击首行的情况if(iHeight==0){//首行首列(第一个字母)if(iNum==0)ptPoint.x=0;//首行其他列时elseptPoint.x=(dc->GetTextExtent(strLine.Left(iNum))).cx;//插入符的横坐标;ptPoint.y=0;pt=ptPoint;}//非首行时else{//首列的情况if(iNum==0)ptPoint.x=0;else{ptPoint.x=(dc->GetTextExtent(strLine.Left(iNum))).cx;//插入符的横坐标;}ptPoint.y=iHeight*tm.tmHeight;pt=ptPoint;}}//在每行横坐标已输入文字外else{ptPoint.y=iHeight*tm.tmHeight;ptPoint.x=sz.cx;pt=ptPoint;}
4、因为自体的高度是tmHeight的位置是一定的,因此得到的结果能准确的判定插入符在第几行,但由于用于判断横坐标是用的是自体的平均宽度(tmAveWidth)因此若以其作为横坐标就会出现插入符在原有自体上显示的问题。因此,我们利用就近的原则,得到它在哪两个字之间,再获取左右两边的字符串的距离(GetTextExtent)获取准确的插入符横坐标位置。
CString strLeft;//光标左边的字符strLeft=strLine.Left(iNum);dc->TextOutA(0,pt.y,strLeft);//输出光标左边的字符CString strRight;strRight=strLine.Right(strLine.GetLength()-iNum);//获取光标右边的字符;dc->TextOut(dc->GetTextExtent(strLine.Left(iNum)).cx,pt.y,strRight);}//保存插入符的实时位置m_ptCaret=pt;SetCaretPos(pt);
上述的方式避免了,将插入符显示在字符上的问题。
- 在文字处理中插入符处于插入的位置
- 根据光标位置在字符中插入新的字符
- ASP.NET 中在指定的位置处插入字符
- ASP.NET 中在指定的位置处插入字符
- ASP.NET 中在指定的位置处插入字符
- ASP.NET 中在指定的位置处插入字符
- 数据库中如何在指定的位置插入列
- Java中在一个字符串的固定位置插入字符串
- word中在指定位置插入图片
- 在TextArea中光标位置插入值
- 在 textarea 中光标位置插入字符串
- 在指定的位置后插入字符串
- 在latex的指定位置插入图表
- 在list的任意位置插入数据
- 在datatable中,在指定位置插入列
- 在光标位置插入内容
- 在指定位置插入字符
- 在Textarea中插入元素(光标位置)
- sql server 2005中对CLR的允许设置
- Eclipse 组织跨平台开发 Cocos2d-x 游戏
- Spring中配合hibernate使用的简单例子
- hibernate 中的hibernate.hbm2ddl.auto
- JSP 2.0中函数式标签库小结
- 在文字处理中插入符处于插入的位置
- spring学习小结之:hibernatetemplate,过度封装?
- 大家以后投诉电信解决不了的话,找信息产业部去
- jfreechart火速应用
- structs里Dispatchaction VS LookupDispathAction
- win2000 里几个很好的计数器的运用来防止入侵
- Ubuntu 12.04 LTS 键盘快捷键
- 小TIPS:合拼gridview的header
- 有区别地展示错误信息