博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符输入
阅读量:5030 次
发布时间:2019-06-12

本文共 993 字,大约阅读时间需要 3 分钟。

本文仅用于学习交流,商业用途请支持正版!转载请注明: 

  建立一个MFC单文档工程Test,为其添加一个OnChar()函数,让CTextView类捕获WM_CHAR消息,接着定义一个专门用于存储输入的字符串的CString类型的成员变量:m_strLine,并在构造函数中初始化为空,如图,编译器(VS2010)已经自动完成此工作。

  需要注意的几个问题:

         问题一:插入符应定位在鼠标左键单击的位置,并在此位置处开始往后输出字符。

  为此需要在WM_LBUTTONDOWN消息中利用如下函数完成:SetCaretPos(Point); ,此时会发现插入符会在单击View中的某一处时随单击位置移动。

   问题二:用来存储输入字符的字符串的成员变量m_strLine的取值变化问题。

  当鼠标单击一个新位置时,应清空已有的输入字符,使得之后的输入都从此处开始输出到View中。

   问题三:保存当前单击处的坐标,便于却确定字符串每次的输出位置。

  为此添加CPoint类型的变量m_ptOrigin,并初始化为0,在鼠标按下时记录当前位置。 

    问题四:回车符的处理。

  当按下回车时需要重新计算插入符的新位置,此时插入符的横坐标不变(?),新的纵坐标可以利用已保存的当前插入点的纵坐标加上当前字体的高度即可得到。GetTextMetrics()函数获取当前设备描述表中字体的高度信息。 

    问题五:特殊字符处理:退格键(Backspace键)

  (利用文本颜色与背景色一致的技巧)利用CDC类的GetBkColor函数获取背景色,利用CDC类的SetTextColor函数设置文本颜色,利用CString类的Left函数从字符串中删除一个字符。

具体代码如下:

  运行程序,进行测试。 

  结果发现,插入符并不会随着字符的输入而移动,我们可以利用SetCaretPos函数来设置插入符的位置,对同一行的输入,纵坐标不变,横坐标需要获取输入字符的宽度来确定插入符移动之后的位置。如图示:在输出字符串之前设定插入符的位置。 

  运行,结果如图所示:

   如果有疑问,可以联系giserdev@163.com,更多内容请参考:,技术交流请加QQ群:586571286。

转载于:https://www.cnblogs.com/mxbs/p/6258168.html

你可能感兴趣的文章
利用python打开摄像头并保存
查看>>
System函数的使用说明
查看>>
Selenium-测试对象操作之:获取浏览器滚动条滚动距离
查看>>
Linux下MySQL数据库安装与配置
查看>>
Extjs String转Json
查看>>
oracle入门(4)——少而常用的命令
查看>>
打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机...
查看>>
Java 虚拟机部分面试题
查看>>
JS中 String/JSON 方法总结
查看>>
二叉树的遍历问题总结
查看>>
3.14-3.20周总结
查看>>
Spring之面向切面编程AOP
查看>>
MATLAB GUI程序设计中使文本框接收多行输入的方法
查看>>
全文检索-Elasticsearch (四) elasticsearch.net 客户端
查看>>
Oracle DBMS_SESSION
查看>>
sublime复制当前行到下一行
查看>>
WPF 3D变换应用
查看>>
luogu4012 深海机器人问题 网络流
查看>>
android 拍照上传照片
查看>>
ArchLinux安装开源VMware Tools
查看>>