MFC中文本编辑实例讲解

MFC中文本编辑实例讲解

ID:37855182

大小:206.97 KB

页数:11页

时间:2019-06-01

MFC中文本编辑实例讲解_第1页
MFC中文本编辑实例讲解_第2页
MFC中文本编辑实例讲解_第3页
MFC中文本编辑实例讲解_第4页
MFC中文本编辑实例讲解_第5页
资源描述:

《MFC中文本编辑实例讲解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、北方工大-灵创策华郑成龙(QQ:120952389)MFC字符输入实例讲解本文主要通过简单实例讲解,实现SDI中的视图窗口中实现字符的输入功能,主要是通过本文能够给MFC初学者一个相对简单的认知过程,希望能够给像我一样的菜鸟们一缕光明(好悲壮啊)!1.首先在VS2008内创建一个单文档(SDI)工程,起名为MyText,选择默认即可,编译完成效果如下:图12.接下来,请根据我的思路与我一起去思考!完成字符输入功能,首先我们需要一个光标(caret),因此第一步,我们需要实现光标的创建与现实!在视图类窗口(客

2、户服务区)创建后,我们创建我们的光标,那么需要在哪里创建呢?对了!CMyTextView类中的消息WM_CREATE对应的OnCreate()函数中添加即可:intCMyTextView::OnCreate(LPCREATESTRUCTlpCreateStruct){if(CView::OnCreate(lpCreateStruct)==-1)return-1;北方工大-灵创策华郑成龙(QQ:120952389)//TODO:在此添加您专用的创建代码CClientDCclientDC(this);//获取当

3、前字体的度量信息TEXTMETRICtm;clientDC.GetTextMetrics(&tm);//创建实体光标并显示CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);ShowCaret();return0;}1.此时光标显示在左上角位置,且不能移动。因此如何让光标移动到我们鼠标点击的位置呢?显然,我们要在视图类中相应WM_LBUTTONDOWN消息,编辑相应的代码:voidCMyTextView::OnLButtonDown(UINTnFlags,CP

4、ointpoint){//TODO:在此添加消息处理程序代码和/或调用默认值SetCaretPos(point);m_point=point;CView::OnLButtonDown(nFlags,point);}2.下面应该是我们处理字符的阶段了!想实现字符输入,我们要敲键盘,那我们应该去响应那个消息?当然是WM_CHAR,编辑其相应的处理函数将是我们的主要工作。此时,我想由易到难,步步解析,这样更容易大家理解,我们依次解决以下问题:Ø在响应之前,我们首先需要存储之前我们点击鼠标左键的位置,因为我们要在点

5、击的位置输入字符,我们输入字符的函数TextOut(横坐标,纵坐标,…),所以我们在视图类中添加一个CPoint型的私有变量m_point,并在OnLButtonDown()函数中赋值;北方工大-灵创策华郑成龙(QQ:120952389)此时,编辑字符输入的代码如下:voidCMyTextView::OnChar(UINTnChar,UINTnRepCnt,UINTnFlags){//TODO:在此添加消息处理程序代码和/或调用默认值CClientDCviewDC(this);//字符类型转换CString

6、str;str.Format(_T("%c"),nChar);//字符输出viewDC.TextOut(m_point.x,m_point.y,str);CView::OnChar(nChar,nRepCnt,nFlags);}编译、运行效果如下:图2Ø还不是庆祝的时候!最明显的不足是只能显示一个字符,究其原因是我们上面的程序不足,上面的程序只能在固定的位置显示字符,后面输入的字符将会覆盖掉前面的字符;解决方法:我们在视图类中定义一个CString类型的私有北方工大-灵创策华郑成龙(QQ:120952389

7、)变量m_strLen,她的作用是对输入的字符进行累加组成字符串,最后当输入完成后,我们程序也将显示全部输入信息!voidCMyTextView::OnChar(UINTnChar,UINTnRepCnt,UINTnFlags){//TODO:在此添加消息处理程序代码和/或调用默认值CClientDCviewDC(this);//字符类型转换CStringstr;str.Format(_T("%c"),nChar);m_strLen+=str;//字符输出viewDC.TextOut(m_point.x,m

8、_point.y,m_strLen);CView::OnChar(nChar,nRepCnt,nFlags);}我们在不同的位置写入“中国人”,效果如下:图3Ø新的问题又出现了,两个问题:第一,在字符输入位置发生变化(即鼠标左键点击)时,m_strLen没有进行清空!第二,光标(caret)位置没有移动到后面位置;解决方法:在北方工大-灵创策华郑成龙(QQ:120952389)OnLbuttonDown()函数中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。