退格键删除和回车键换行 | 您所在的位置:网站首页 › 退格键是哪个键 › 退格键删除和回车键换行 |
XP文本中退格键删除和回车键换行 之前已经知道了在OnLButtonDown(UINT nFlags, CPoint point)函数中,添加SetCaretPos(point)函数,该函数的用作就是设置插入符的位置,这里我们用响应鼠标左键保存的point,然后传递给SetCaretPos(point),让我们鼠标点击的位置就是设置光标的位置。
SetCaretPos 函数功能:该函数将插入标记移动到指定的坐标上。如果拥有该插人标记的窗口是使用CS_OWNDC类样式创建的,那么指定的坐标依据与该窗口相关的设备环境的映射模式而定。 void Empty( ); Example The following example demonstrates the use of CString::Empty. // example for CString::Empty CString s( "abc" ); s.Empty(); ASSERT( s.GetLength( ) == 0 );
Empty函数作用:调用该函数,让插入符的位置被清空。 我在OnLButtonDown函数中添加了如下代码,让我们鼠标点击的位置清空,以便我们输入。
再者我们在CView类添加Create函数(默认的CView类是没有Create函数的,所以必须要自己添加) 具体代码如下,基本解释上文已经说明了。
/////////////////////////////////////////////////////////////////////////////////////
接着,我们添加一个WM_CHAR消息并开始在其中添加代码(这里也说明一下,CView中也没有OnChar消息响应的)
首先构建一个CClintDC的对象dc,一个设备描述表。 接着由于我们输入的字符,要构建一个TEXTMETRIC结构体对象,进行字体的具体设定 接着我们用设备描述表成员函数的GetTextMetric(&tm)的作用是 ,获得一个取设备当前字体的绘制参数 。 (具体我也表达不清
由于我们在OnChar函数中有一个参数是 nChar是接受键盘输入信息的。 所以我们用此作为一个判断条件,回车换行的ASCII码是 0x08 我们在CView类全局添加两个CString类的m_strline和m_ptOrigin, 这里说明一下m_strline来保存字符数据,m_ptOrigin是来保存之前的字符数据 这里我们回到OnLButtonDown来添加一句函数 m_ptOrigin=point来初始化
第一次if判断nChar输入如果为真,我们把m_strline的字符位置清空不输入任何数据,回车后的位置要是一个字符的高端。 第二次判断是判断退格符的,其ASCII码是0x0d;
函数名 SetTextColor() 功能 设置指定设备环境(HDC)的字体颜色 这个函数将返回一个先前文本的颜色,所以我可以用一个COLORREF的对象来接收这个颜色保存起来。 函数名 GetBkColor() 功能 是获得背景颜色
说明一下删除功能的实现过程 1 首先我们要先获取背景颜色,并保存,将要问出的文本设置成背景颜色 2 以背景色输出我们要输出的字符串,并保存,故我们也把文本设置成白色,这样就是什么都看不到了,达到了“删除”目的)然后我们把字符串减少一个,并且把插入符响应后退一格
ps:( 这里 输入字符的串变量m_strLine中把要删除的字符删除,再用文本颜色设置为原来的颜色(原来的颜色是黑色,再输出一次字符串)
这里要说明一个可能会产生疑惑的地方,我们在怎么把颜色从背景色设置回原来的黑色呢?之前说过了 SetTextColor() 这个函数将返回一个先前文本的颜色,所以我可以用一个COLORREF的对象来接收这个颜色保存起来。
我们看下面的第二个if代码部分 我们用dc.GetBkColor()获得了背景色作为参数传递给dc.SetTextColor(),并且用一个COLORRF的对象保存
这一句代码一共实现了3个功能 1 获得背景色 2 用背景色设置了文本(字体)颜色 3 与此同时,把之前的字体颜色(该代码中是黑色字,故黑色)通过函数的返回值保存了起来。
之后用dc的成员函数TextOut文本输出文本内容,当然位置肯定是由保存了鼠标点击参数point赋值的m_ptOrigin的位置上进行输出
查看MSDN查看Left函数 CString Left( int nCount ) const; Parameters nCount Specifies the number of characters to extract from this CString object.参数的意思是,指定数字来提取字符串对象。这里还有一个MSDN配的例子 CString s( _T("abcdef") ); ASSERT( s.Left(2) == _T("ab") );
假设原字符串有abcdef,如果只Left(2)那么结果只取ab.
下面我们要删除最后最后一个字符的代码部分,由于我们并不知道一个字符串有多长,所以我们可以用 GetLength()来获取长度,并减1,结合Left函数就能达到剔除最后一个字符的目的了。
最后剔除了之后,我们用 dc.SetTextColor(clr); 这次的目的是把文本颜色恢复为之前那个返回保存的颜色(即黑色) 如果不进行回车和退格操作,那么就进行字符的输出,那么就是原先字符串加上nchar
最后再次用dc显示文本 /////////////////////////////////// 这里看两个函数 CSize GetTextExtent( LPCTSTR lpszString, int nCount ) const; 函数功能:使用该函数获得所选字体中指定字符串的高度和宽度 函数原型:CSize GetTextExtent(LPCTSTR lpszString, int nCount); 参数: lpszString是字符串的指针 nCount是所包括的字符数 返回值CSize是包含(cx,cy)2个成员的结构,cx是字符串的宽度,cy是字符串的高度。 CSize( int initCX, int initCY ); 结构体 创建一个结构体对象
为了使插入符的位置和当前输入位置相同,包括退格的时候也一同进行退格,我们用GetTextExtent获得该字符串的数据,并且传递给CSize类的对象 在结合m_ptOrigin的位置进行坐标的加减就能达到目的了。(这里由于纵坐标没变,故不用设置,只用赋值便可)
|
CopyRight 2018-2019 实验室设备网 版权所有 |