对于程序中文本编辑的相关操作,现总结经验如下。
1.CWnd类的CreateSolidCaret()函数可以用来创建一个插入符。函数原型为void CreateSolidCaret(int nWidth,int nHeight).
创建后需要ShowCaret()函数进行显示。
2.CDC类的GetTextMetrics成员函数可以得到设备描述表中当前字体的度量信息。函数原型为 BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics) const.
3.CWnd类CteateCaret函数可以实现创建图形插入符。函数原型为 void CreateCaret(CBitmap*pBitmap). 此时需要注意变量的属性,即局部变量与全局变量的区别。
4.OnDraw(CDC* pDC)函数对应用程序窗口的客户区进行绘图的所有代码都必须写在这个函数中。
TextOut(int x,int y,CString& str)函数
参数x为文本显示在应用程序窗口用户区的水平位置,以像素为单位
参数y为文本显示在应用程序窗口用户区的垂直位置,以像素为单位
str为要显示的字符串,他是一个 CString类的对象;
设置文本颜色
virtual COLORREF SetTextColor(COLORREF crColor);
参数crColor是要使用的文本颜色的 RGB值,函数的 返回值为原来的颜色
获得当前文本颜色
COLORREF GetTextColor() const;
设置文本的背景颜色
virtual COLORREF SetBkColor(COLORREF crColor);
参数crColor是要使用的文本背景颜色的RGB值,函数的返回值为原来的背景颜色
设置文本字符的间距
int SetTextCharacterExtra(int nCharExtra);
参数nCharExtra用来设置文本字符的额外间距,以像素为单位,函数的 返回值为字符的原间距
获得当前字符间距
int GetTextCharExtra() const;
5.CString类的成员函数 LoadString用来添加字符串资源。原型为BOOL LoadString(UINT nID).
6.路径层(path bracket)主要是相关的画图操作中用来确定操作范围的一些规定。VC++中利用CDC提供的BeginPath和EndPath这两个函数来实现路径层。BeginPath()其作用是在 设备描述表中打开一个路径层;然后利用 图形设备接口提供的函数进行绘图操作,例如绘制一些点、椭圆等;最后,绘图操作完成之后,应用程序调用EndPath()这个函数关闭这个路径层。
7.CDC类的GetTextExtent函数用来获得一个字符串的宽度和高度。函数原型为CSize GetTextExtent(const CString& str) const.
8.CDC类的SelectClipPath函数的作用是把当前设置的路径层和设备描述表中已有的裁剪区域按照一种指定的模式进行一个互操作。
函数原型为BOOL SelectClipPath(int nMode).
9.VM_CHAR与VM_KEYDOWN的操作。WM_KEYDOWN和WM_CHAR事件WM_KEYDOWN和WM_CHAR都是键盘消息。
WM_CHAR消息只响应字符按键和部分控制符(有很多控制字符不响应 不响应的键如下:
Tab键///Caps Lock大小写切换键//ESC键///F1~F12///SHIFT///CTRL///ALT///方向键///方向键上方键盘区///Num Lock键)
WM_KEYDOWN响兴所有按键消息(Alt键///Print Screen SysRq截屏键不响兴)
WM_CHAR区分大小写和SHIFT+数字,而WM_KEYDOWN只返回大写字母没有SHIFT作用
例如:
//// 按下F键 不管处于大写或小写状态 WM_KEYDOWN都返回70 (ASCII对应大写F) 而WM_CHAR区分大小写
//// SHITF+1 WM_CHAR中的wParam是33 (ASCII对应!) WM_KEYDOWN中的是49 (ASCII对应1)
WM_CHAR是由WM_KEYDOWN消息translate()之后产生的,然后再发送给窗口过程。比如说按下E键后产生WM_KEYDOWN消息,经过translate()处理后产生变成WM_KEYDOW,WM_CHAR 2 个消息传递给窗口过程。
10.CWnd类的SetCarePos函数。该函数将插入标记移动到指定的坐标上。函数原型:BOOL SetCaretPos(int X,int Y)或static void PASCAL SetCaretPos(POINT point).
11.CString类的Left函数。函数执行成功时返回string字符串左边n个字符,发生错误时返回空字符串("")。如果任何参数的值为NULL,Left()函数返回NULL。如果n的值大于string字符串的长度,那么Left()函数返回整个string字符串,但并不增加其它字符。LEFT( string, n )。
12.0x0d是回车符的代码,故if(0x0d==nChar)判断nChar是不是回车符.而0x08则是退格键的代码。
13.CFont类的CreatePointFont函数可以用来设置字体。
BOOL CreatePointFont(int nPointSize,LPCTSTR lpszFaceName,CDC* pDC = NULL);
参数:
nPointSize
要求字体高度为这个点的1/10。
lpszFaceName
一个
CString 或者一个指向null-terminated(以空为结尾的)字符串 指针来标注字体名称。长度不得超过30个字母。函数EnumFontFamilies可列举能够使用的字体。如果lpszFaceName是NULL,那么GDI uses a device-independent typeface.
pDC
指向CDC对象的指针,用来将字体高度转化为逻辑单位,如果是NULL,那么就根据屏幕当前的上下文(context)来转化
返回值
非零为成功,否则失败
说明:
此函数提供了一种创建指定字体和点大小的字体对象的方法,它自动将nPointSize中的高度转化为逻辑单位,这是使用由pDC指向的CDC对象实现的。
当完成用CreatePointFont函数创建CFont对象后,从 设备上下文中选择字体,然后删除CFont对象。
14.CDC类的DrawText函数。该函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的 制表符,字符对齐、折行等)。
函数原型
int DrawText(
HDC hDC, // 设备描述表句柄
LPCTSTR lpString, // 将要绘制的字符串
int nCount, // 字符串的长度
LPRECT lpRect, // 指向矩形结构RECT的指针
UINT uFormat // 正文的绘制选项
);
参数
hdc:[输入]设备环境句柄。
lpString:[输入]指向将被写入的字符串的指针,如果参数nCount是-1,则字符串必须是以\0结束的。 如果uFormat包含DT_MODIFYSTRING,则函数可为此字符串增加4个字符,存放字符串的 缓冲区必须足够大,能容纳附加的字符。
nCount:[输入]指向字符串中的字符数。如果nCount为-1,则lpString指向的字符串被认为是以\0结束的,DrawText会自动计算字符数。
lpRect:[输入/输出]指向结构RECT的 指针,其中包含文本将被置于其中的矩形的信息(按逻辑坐标)。
uFormat:[输入]指定格式化文本的方法。它可以下列值的任意组合,各值描述如下:
DT_CALCRECT:这个参数比较重要,可以使DrawText函数计算出输出文本的尺寸。如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。
DT_CENTER:指定文本水平居中显示。
DT_VCENTER:指定文本垂直居中显示。该标记只在单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用。
DT_SINGLELINE:单行显示文本,回车和换行符都不断行。
返回值
如果 函数调用成功,返回值是正文的高度(逻辑单位)。如果指定了DT_VCENTER或DT_BOTTOM,返回值是lpRect->top到绘制的正文的底部的偏移值。
如果函数调用失败,返回值是0
15.CWnd类的SetTimer函数。SetTimer是一种API函数,位于 user32.dll中。你想每隔一段时间执行一件事的的时候,你可以使用它。 使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后Windows以此时间间隔周期性 触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的 回调函数。不需要指定定时器时,可以调用对应的 KillTimer函数销毁指定的时钟。
SetTimer函数的原型
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT nElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
返回值:
类型:UINT_PTR
如果函数成功,hWnd参数为0,则返回新建立的时钟编号,可以把这个时钟编号传递给KillTimer来销毁时钟.
如果函数成功,hWnd参数为非0,则返回一个非零的整数,可以把这个非零的整数传递给KillTimer来销毁时钟.
如果函数失败,返回值是零.若想获得更多的错误信息,调用GetLastError函数.