退格键删除和回车键换行 您所在的位置:网站首页 退格键是哪个键 退格键删除和回车键换行

退格键删除和回车键换行

#退格键删除和回车键换行| 来源: 网络整理| 查看: 265

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)的作用是 ,获得一个取设备当前字体的绘制参数 。

(具体我也表达不清退格键删除和回车键换行,意会一下,我也只知道用dc调用函数,至于具体怎么解释我也不清楚,总之dc对象构造出来之后,不管是字体,还是位图的设置变得方便很多,这里就姑且不纠结了,网上说的都很抽象,我还没有想到自己的一个表达方式)

 

由于我们在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的位置进行坐标的加减就能达到目的了。(这里由于纵坐标没变,故不用设置,只用赋值便可)

 

 

   退格键删除和回车键换行     这几天看到了一些文本操作的东西,感觉为我当初在百度网上计算器看不懂的那些代码的意思又有了新的感觉。这几天又多认识了几个文本操作的函数,这是好开心。再者,这几天和一位友人聊天聊到JAVA ,因为近来逛论坛看到很多公司的招聘广告,我好奇点进去一看,都是清一色的要JAVA的程序员的,这个让我正在学C++的有点怪怪的感觉退格键删除和回车键换行退格键删除和回车键换行退格键删除和回车键换行。我就和友人讨论起这件事情,这个友人说,JAVA做起事情来没有C++效率,茫茫公司招JAVA是因为JAVA的工作需要人手,再者JAVA基本上做的大部分是网页,是一些只要正确操作达到目的的工作。当然他的话可能有点片面,不过我还是让我一再坚信我要学好C++的决心。不学则已,学就要学底层的,学难的。我一般都报以这样的想法,再加上时间有限,我根本没有时间分心去看JAVA,所以我决定目前不去看不去想JAVA。我们专业软件方面的同学交流时候提起,这个学期又开了JAVA了,网页,学得多学不精啊。我作为局外人,我只关注C++,我觉得这方面上我只求一技之长就好了~ 嘎嘎退格键删除和回车键换行



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有