MFC学习--单文档文本框的编辑(二)

来源:互联网 发布:电子音乐制作软件ios 编辑:程序博客网 时间:2024/05/20 06:50

创建一个MFC的单文档工程,实现利用键盘输入文字功能,并存在光标跟随移动。

学习到对于鼠标消息,字符输入消息的响应。

MFC单文档程序创建后,有四个类,也是四个文件。CMainFrame,CMFC_tets1App,CMFC_tets1Doc,CMFC_tets1View。CMainFrame属于框架类,包括客户区和非客户区,视图类即View类的父窗口,视图就显示在MainFrame的客户区中

CMFC_tets1App 负责:处理消息,将收到的消息分发给相应的对象。CMFC_tets1Doc 文档类。CMFC_tets1View视图类,主要是客户区处理。

1、首先创建光标,在OnCreate()函数中,如果没有,利用WM_CREATE消息创建

<span style="font-size:18px;">int CMFC_tets1View::OnCreate(LPCREATESTRUCT lpCreateStruct) //创建客户区窗口时调用的函数{if (CView::OnCreate(lpCreateStruct) == -1)return -1;CClientDC dc(this);//创建客户区类型TEXTMETRIC tm;dc.GetTextMetrics(&tm);//获取当前字符高度和宽度值,来矫正插入光标的大小CreateSolidCaret(tm.tmAveCharWidth / 8, tm.tmHeight);//创建插入符ShowCaret();//显示插入符SetTimer(1, 100, NULL);//设置定时器消息,1表示定时器标识符,100表示100ms产生一个消息,NULL指的是进入消息队列产生WM_TIMER消息// TODO:  在此添加您专用的创建代码return 0;}</span>
2、利用鼠标按下消息,使光标跟随鼠标移动
void CMFC_tets1View::OnLButtonDown(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值SetCaretPos(point);//根据鼠标点击显示光标位置m_ptOrigin = point;m_strLine.Empty();//每次点击改变光标位置时,将用于显示的存储字符串清空CView::OnLButtonDown(nFlags, point);}


3、利用WM_CHAR消息响应键盘输入信息
void CMFC_tets1View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: 在此添加消息处理程序代码和/或调用默认值CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);//获取当前输入字符的高度和宽度if (0x0d == nChar)//0x0d表示回车符,点击回车后的一些操作{m_strLine.Empty();m_ptOrigin.y += tm.tmHeight;//将光标下移一个字符}else if (0x08 == nChar)//0x08退格符,下面使用实现的方法是,先将文本背景色取出,然后将背景色设置为字体颜色,重写字体,即覆盖了原来字体。然后将字体颜色恢复,同时将字符串中减少一个字符,再重写字体,实现删除一个字体功能{COLORREF clr = dc.SetTextColor(dc.GetBkColor());//将字体色改为背景颜色dc.TextOutW(m_ptOrigin.x, m_ptOrigin.y, m_strLine);//重写字体,即覆盖原来的字体m_strLine = m_strLine.Left(m_strLine.GetLength() - 1);//获取字符串左边减一字符dc.SetTextColor(clr);//重新设置字体颜色}else{m_strLine = m_strLine + (TCHAR)nChar;}CSize cs;cs = dc.GetTextExtent(m_strLine);//获取这一行文本的高度和宽度值CPoint pt;pt.x = m_ptOrigin.x + cs.cx;pt.y = m_ptOrigin.y;SetCaretPos(pt);//重新设置光标位置,跟随字符输入移动dc.TextOutW(m_ptOrigin.x, m_ptOrigin.y, m_strLine);//根据原鼠标点击位置输出字符CView::OnChar(nChar, nRepCnt, nFlags);}




0 0
原创粉丝点击