学习笔记-文本编辑

  文本插入符的创建:

    利用CWnd类提供的函数CreateSolidCaret()函数来完成。该函数的参数要求指定插入符的宽度和高度。并利用函数ShowCaret()函数显示插入符。

    如果想让插入符的大小适合当前所选字号的大小,需要调用CDC类的成员函数GetTextMetrics得到设备描述表中当前字体的度量信息。该函数的参数要求是一个TEXTMETRIC结构体的指针。因此在使用时必须定义一个TEXTMETRIC结构体结构体的变量,然后将该变量的地址传递给GetTextMetrics

    插入符的创建应该在窗口创建之后进行。因此需要在WM_CREATE消息的响应函数里添加。

   创建图形插入符:

    利用CWnd类函数CreateCaret()函数实现。该函数的参数要求是CBitmap指针类型。因此在使用之前必须构造一个CBitmap对象,并利用CBitmap的成员函数初始化位图对象。

      运行之后会发现没有出现位图插入符。这是因为定义的bitmap是一个局部变量,OnCreate执行完成之后,这个对象会发生析构,即这个位图资源就会销毁。因此应该将这个变量定义成视图类的成员变量。

     

      在文本编辑时进行字符输入需要注意的问题:

使用WM_CHAR消息可以获得键盘上输入的字符。把每次输入的字符存储到一个字符串中。每当按下新的字符,就会把字符串的内容输出一次。因此首先在视图类中定义一个CString类型的成员变量(假设为m_str),并在构造函数中将他初始化为空。

问题一:

程序应该在插入符的位置输出字符。即鼠标左键单击窗口某个位置,那么插入符就必须出现在该位置,然后进行字符输出。要求捕获WM_LBUTTONDOWN消息。插入符的移动用SetCaretPos函数实现,其参数是POINT结构体类型参数。

问题二:

当单击鼠标左键,插入符移动带新的地方,原来的字符串的类容必须清空,重新进行新的内容输出,而不是继续在原来的字符串的内容的基础上进行输出。

问题三:

每次输入的字符串都应该在当前插入符位置,即在鼠标左键单击点处显示。因此在视图类定义一个CPoint类型的成员变量保存这一位置(m_ptOrigin) 。并将其初始化为0.

问题四:

回车键的处理。

插入符的位置应该移动到下一行,字符串的类容应该清空。插入符的坐标只是纵坐标发生了变化。纵坐标为m_ptOrigin.y+当前字体的高度。

问题五:

退格键的处理。

技巧:可以把文本的颜色设置为背景色,在窗口中把文本输出一次,然后从保存的m_str中把要删除的字符删除,再把文本颜色设置为原来的颜色,在输出一次。要用到的CDC类函数为GetBkColorSetTextColor.删除字符要用到的函数为CString类的Left函数。利用CString类函数GetLength可以得到字符串中字符个数。

 

知识补充:利用CDC类函数GetTextExtent函数可以获得字符串在屏幕上显示的宽度和高度。其参数为CString类的一个对象,,该函数返回的是一个CSize类型对象。

相关代码:

键盘上相关字符按下的消息响应函数:

 

鼠标左键按下消息响应函数:

初始化成员变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值