资源描述:
《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()函数中