《VC++深入详解》学习笔记[4]——第5章 文本编程
2011-12-11 13:55
288 查看
第5章 文本编程
1.插入符
可以利用CWnd类的CreateSolidCaret函数来创建插入符,该函数的原型如下:
void CreateSolidCaret( int nWidth, int nHeight );
插入符的创建应该在窗口创建之后进行,可以在WM_CREATE消息的响应函数OnCreate中(在创建窗口的代码之后)添加创建插入符的代码。
为了能够让插入符适合当前字体的大小,首先就需要得到设备描述表中当前字体的信息,也就是文本信息,然后根据字体的信息来调整插入符的大小。调用CDC的GetTextMetrics成员函数可以得到设备描述表中当前字体的度量信息,该函数的原型声明如下:
BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;
如下代码演示了如何创建合适的插入符:
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/8, tm.tmHeight); //字体平均宽度除以8是一个经验值
ShowCaret();
此外,void CreateCaret( CBitmap* pBitmap );函数可以用来创建图形插入符。
2.窗口重绘
Windows程序运行时,如果窗口大小发生变化,窗口会发生重绘,如果希望输入的内容始终保留在窗口上,就要在响应WM_PAINT消息的函数中将内容再次输出。WM_PAINT消息的响应函数为OnDraw:
void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
…
}
CString类:MFC提供了一个CString类,这个类没有基类。一个CString对象由一串可变长度的字符组成。CString类同时重载了多个操作符,并且提供了多种构造方法。
3.路径
在MFC中创建路径层是利用CDC类提供的BeginPath和EndPath这两个函数来实现的,首先调用BeginPath,该函数的作用是在设备描述表中打开一个路径层;然后利用图形设备接口提供的绘图函数进行绘图操作,在绘图操作完成之后,应用程序通过调用EndPath函数关闭这个路径层。
裁剪区域:可以理解为一个绘图区域,其大小可以控制。CDC类提供了一个SelectClipPath函数,该函数的作用是把当前设置的路径层和设备描述表中已有的裁剪区域按照一种指定的模式进行一个互操作:
BOOL SelectClipPath( int nMode );
如指定新的裁剪区域包含当前裁剪区域,但是排除当前路径层区域:
CSize sz =pDC->GetTextExtent(str);
pDC->TextOut(250,150,str);
pDC->BeginPath();//打开一个路径层
pDC->Rectangle(250,150,250+sz.cx, 150+sz.cy); //画一个矩形,并将此矩形做为路径层
pDC->EndPath();//关闭一个路径层
pDC->SelectClipPath(RGN_XOR);
4.字符输入 让CTextView类捕获WM_CHAR消息,并为该类定义一个CString类型的成员变量:m_strLine专门用来存储输入的字符串,除此之外还须考虑如下问题:
①程序应当在当前插入符的位置输出字符,并且当在屏幕上输出字符时,插入符的位置也应发生改变; CWnd:SetCaretPos(POINT point)
②回车、退格键的处理;CDC:setTextColor、CDC:GetBkColor、CString:Left
③字体;CFont类
定时器:
CWnd :SetTimer
UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );
SetTimer(1,100,NULL);
void CTextView::OnTimer(UNIT nIDEvent)
//nIDEvent为定时器的标识,可以通过对其进行判断来解决多个定时器冲突的问题
{
…
CView::OnTimer(nIDEvent);
}
MFC提供了CEditView和CRichEditView两个类来帮助实现功能强大的字处理程序。
1.插入符
可以利用CWnd类的CreateSolidCaret函数来创建插入符,该函数的原型如下:
void CreateSolidCaret( int nWidth, int nHeight );
插入符的创建应该在窗口创建之后进行,可以在WM_CREATE消息的响应函数OnCreate中(在创建窗口的代码之后)添加创建插入符的代码。
为了能够让插入符适合当前字体的大小,首先就需要得到设备描述表中当前字体的信息,也就是文本信息,然后根据字体的信息来调整插入符的大小。调用CDC的GetTextMetrics成员函数可以得到设备描述表中当前字体的度量信息,该函数的原型声明如下:
BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;
如下代码演示了如何创建合适的插入符:
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/8, tm.tmHeight); //字体平均宽度除以8是一个经验值
ShowCaret();
此外,void CreateCaret( CBitmap* pBitmap );函数可以用来创建图形插入符。
2.窗口重绘
Windows程序运行时,如果窗口大小发生变化,窗口会发生重绘,如果希望输入的内容始终保留在窗口上,就要在响应WM_PAINT消息的函数中将内容再次输出。WM_PAINT消息的响应函数为OnDraw:
void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
…
}
CString类:MFC提供了一个CString类,这个类没有基类。一个CString对象由一串可变长度的字符组成。CString类同时重载了多个操作符,并且提供了多种构造方法。
3.路径
在MFC中创建路径层是利用CDC类提供的BeginPath和EndPath这两个函数来实现的,首先调用BeginPath,该函数的作用是在设备描述表中打开一个路径层;然后利用图形设备接口提供的绘图函数进行绘图操作,在绘图操作完成之后,应用程序通过调用EndPath函数关闭这个路径层。
裁剪区域:可以理解为一个绘图区域,其大小可以控制。CDC类提供了一个SelectClipPath函数,该函数的作用是把当前设置的路径层和设备描述表中已有的裁剪区域按照一种指定的模式进行一个互操作:
BOOL SelectClipPath( int nMode );
如指定新的裁剪区域包含当前裁剪区域,但是排除当前路径层区域:
CSize sz =pDC->GetTextExtent(str);
pDC->TextOut(250,150,str);
pDC->BeginPath();//打开一个路径层
pDC->Rectangle(250,150,250+sz.cx, 150+sz.cy); //画一个矩形,并将此矩形做为路径层
pDC->EndPath();//关闭一个路径层
pDC->SelectClipPath(RGN_XOR);
4.字符输入 让CTextView类捕获WM_CHAR消息,并为该类定义一个CString类型的成员变量:m_strLine专门用来存储输入的字符串,除此之外还须考虑如下问题:
①程序应当在当前插入符的位置输出字符,并且当在屏幕上输出字符时,插入符的位置也应发生改变; CWnd:SetCaretPos(POINT point)
②回车、退格键的处理;CDC:setTextColor、CDC:GetBkColor、CString:Left
③字体;CFont类
定时器:
CWnd :SetTimer
UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );
SetTimer(1,100,NULL);
void CTextView::OnTimer(UNIT nIDEvent)
//nIDEvent为定时器的标识,可以通过对其进行判断来解决多个定时器冲突的问题
{
…
CView::OnTimer(nIDEvent);
}
MFC提供了CEditView和CRichEditView两个类来帮助实现功能强大的字处理程序。
相关文章推荐
- [连载]VC++深入详解(孙鑫视频)第5章-文本编程 笔记
- 孙鑫VC学习笔记:第五讲 文本编程
- 孙鑫VC学习笔记:第五讲 文本编程
- 【C++】学习笔记二十——第5章编程练习
- JavaScript_DOM编程艺术第二版学习笔记-第5章
- MFC学习笔记(三)——文本编程
- DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)
- [学习笔记][Java编程思想]第5章:初始化与清理
- MFC学习笔记 文本编程及相关函数
- 四. 文本编程--Windows编程课程学习笔记
- DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)
- scala编程第17章学习笔记(2)——集和映射
- [学习笔记]Java网络编程之UDP通讯
- Java学习笔记―第十二章 Java网络编程入门
- Object-c基础编程学习笔记-键值编码
- Python之学习笔记(socket编程)
- 【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)
- [网络编程学习笔记]Web 概念:URI,URN和URL
- Spring4第一讲学习笔记,ioc编程思想
- IOS学习笔记 -- 网络编程