1、插入符(Caret):

  (1) 文本插入符 函数的原型声明:(CWnd类)

void CreateSolidCaret ( int Nwidth, int nHeight );

    ·nwidth:指定插入符的宽度(逻辑单位)。参数值为0,则系统将其设置为系统定义的窗口边界的宽度。

    ·nHeight:(同理)...高度。

    `默认是隐藏的,需调用 Showcatet(); 来显示;

  插入符的创建应该在窗口创建之后进行,可以在WM_CREATE消息的响应函数OnCreate中(在创建窗口的代码之后)添加创建插入符的代码。

  怎样得到设备描述表中当前字体的信息(即:文本信息):

    调用CDC类的GetTextMetrics成员函数可以得到设备描述表中当前字体的度量信息。

BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const; 

      ·该函数的参数是一个TEXTMETRIC结构体的指针;定义一个TEXTMETRIC结构体类型的变量,然后将该变量的地址传递给这个参数。

      ·通过GetTextMetrics这个函数调用,它会用设备描述表中当前字体的信息来填充这个结构体。

typedef struct tagTEXTMETRIC {
LONG tmHeight;
LONG tmAscent;
LONG tmDescent;
LONG tmInternalLeading;
LONG tmExternalLeading;
LONG tmAveCharWidth;
LONG tmMaxCharWidth;
LONG tmWeight;
LONG tmOverhang;
LONG tmDigitizedAspectX;
LONG tmDigitizedAspectY;
TCHAR tmFirstChar;
TCHAR tmLastChar;
TCHAR tmDefaultChar;
TCHAR tmBreakChar;
BYTE tmItalic;
BYTE tmUnderlined;
BYTE tmStruckOut;
BYTE tmPitchAndFamily;
BYTE tmCharSet;
} TEXTMETRIC, *PTEXTMETRIC;

      ·字体没有一个具体的宽度值,只有一个平均值(tmAveCharWidth)。

  (2) 图形插入符 的函数声明:

void CreateCaret( CBitmap* pBitmap );

      ·在使用这个函数前,需先构造一个CBitmap对象,并利用CBitmap的成员函数初始化位图对象之后,才能使用这个位图对象。

2、窗口重绘:

  如果希望输入的内容始终保留在窗口上,就要在响应WM_PAINT消息的函数中将内容再次输出。MFC AppWizard产生的视类代码中,给我们提供了一个类似于WM_PAINT消息响应函数的OnDraw函数,当窗口发生重绘时,应用程序框架代码就会调用该函数。

  (1) OnDraw函数;

void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}

  提示:CDC类封装的TextOut函数与Platform SDK提供的全局TextOut函数类的区别:前者不需要DC句柄作为参数,因为CDC内部专门有一个成员变量(m_hDC)保存了DC句柄。

3、路径:

  路径层(path bracket)【设备描述表中】的概念:

    在MFC中,创建路径层是利用CDC类提供的BeginPath和、EndPath这两个函数来实现的,首先应调用前者,该函数的作用是在设备描述表中打开一个路径层;然后利用图形设备接口(GDI)提供的绘图函数进行的绘图函数进行绘图操作,例如绘制一些点、矩形、椭圆等;最后,在绘图操作完成之后,应用程序通过调用EndPath函数关闭这个路径层。

  

  路径层的作用:看代码效果!!!!效果图后面贴上!!!

//cdc::GetTextExtent
CSize GetTextExtent( const CString& str ) const;

    ·该函数可以获得一个字符串在屏幕上显示的宽度和高度;(要想得到字符串在窗口中的显示宽度,必须针对特定的字符串电泳GetTextExtent函数;

    ·返回一个CSize类型的对象,CSize类 类似于 Windows的SIZE结构体:

typedef struct tagSIZE {
LONG cx;
LONG cy;
} SIZE, *PSIZE;

    ·cx 和 cy 表示 宽度 和 高度。

  GetTextExtent 与 GetTextMetrics 的作用:

    GetTextExtent函数:它获得的是设备描述表中当前字体的度量信息;

    GetTextMetrics函数:则是获得某个特定的字符串在窗口中显示时所暂据的宽度和高度。

  提示:设备描述表中有一个默认的白色画刷,当绘制图形时,默认用该画刷填充图形内部。

//CDC::SelectClipPath
BOOL SelectClipPath( int nMode );

    ·作用:把当前设置的路径层和设备描述表中已有的裁剪区域按照一种指定的模式进行一个互操作;

    ·参数nMode用来指定互操作的模式;如RGN_DIFF(新的裁剪区域包含当前裁剪区域,但排除当前路径层区域)、RGN_AND(新的裁剪区域是当前裁剪区域和当前路径层的交集)等;

    ·该函数与路径层一起作用。

4、字符输入:

      当用户在键盘上按下某个字符按键后,要把该字符输出到程序窗口上,该操作需要程序捕获键盘按下这一消息。WM_CHAR消息可以捕获这个消息,在该消息的响应函数中完成字符输出功能。

  注意:TextOut函数在窗口中输出字符时,需要提供字符显示位置的x坐标和y坐标。

问题提出:

  1、每个字符在屏幕上所占据的宽度都是不一样的,怎样获得下一个输入点的坐标?

   2、程序应当在当前插入符的位置输出字符;

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

  4、每次输入的字符串都应在当前插入符位置,也就是鼠标左键单击处开始显示;

  5、在输出字符时,还应考虑到回车字符的处理;

  6、在输出字符时,还要处理一个特殊的字符:退格键(Backspace);

  7、插入符的位置如何随字符输出的变化而变化;

  (1) 设置字体:CFont类 派生于 CGDiObject类,封装了一个Windows图形设备接口(GDI)的字体。

  在构造了一个CFont对象后,必须利用该类提供的几个初始化函数之一对该对象进行初始化,然后才能使用这个对象:

  在程序中,与其他GDI对象一样,当创建了一个字体对象并初始化后,还必须将它选入设备描述表,之后这个新字体才能发挥作用。我们可以保存这个字体,在使用完新字体后,再把设备描述表中的字体恢复为先前的字体。

  (2) 字幕变色共更能的实现:

//CDC::DrawText

int DrawText(const CString& str, LPRECT lpRect, UINT nFormat ); 

    ·功能:在指定的举行范围内输出文字;

//CWnd::SetTimer
UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD) );

    ·如果这个函数调用成功,它将返回新定时器的标识。

    ·nIDEvent:指定一个非零值的定时器标识。(如果该函数调用成功,那么这个表示将作为返回值返回,即函数执行成功,它的第一个参数和返回值就是相等的)

    ·nElapse:指定定时器的时间间隔;毫秒为单位的。

    ·lpfnTimer:函数只剩,并且是一个回调函数。当设定好定时器之后,每隔设定的时间间隔,它就会发送一条定时器消息。如果在这里设置了回调函数,这时操作系统就会调用这个回调函数来处理定时器消息。如果我们将此参数设置为NULL值,定时器消息,即WM_TIMER消息就会被放到应用程序的消息队列中,然后由程序相应此消息的窗口对象来处理。

  

    提示:对一个变量进行自加自减操作前,一定要初始化这个变量。否则,结果是不确定的。

【vc】5_文本编程的更多相关文章

  1. VC++动态链接库(DLL)编程深入浅出(zz)

    VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...

  2. 用VC进行COM编程所必须掌握的理论知识

    一.为什么要用COM 软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM编程,目标只有一个,就是希望软件能象积方块一样是累起来的,是组装起来的,而不是一点点编出来的.结构化编程 ...

  3. 【转】VC++消息钩子编程

    VC++消息钩子编程

  4. VC++网络高级编程

    内含<VC网络高级编程>电子书 及源代码. 第一章.TCP/IP协议.第二章.Winsock网络编程接口:第二章.Visual C++与网络编程:第四章.基本网络编程技术:第五章.Teln ...

  5. VC++动态链接库(DLL)编程深入浅出(四)

    这是<VC++动态链接库(DLL)编程深入浅出>的第四部分,阅读本文前,请先阅读前三部分:(一).(二).(三). MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用M ...

  6. VC++动态链接库(DLL)编程深入浅出(转帖:基础班)

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...

  7. VC-基础:VC++动态链接库(DLL)编程深入浅出

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...

  8. (六)绘图,文本编程,定时器,菜单,图标icon,消息类型

    1,简单绘图 画直线 a,鼠标按下和抬起 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代 ...

  9. VC的UNICODE 编程

    简介 如果你编写的程序是针对非英语国家的用户,如中国.日本.东欧和中东地区,那么你一定要熟悉 UNICODE 字符集.尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程序时,如果 ...

随机推荐

  1. 文成小盆友python-num13 整个堡垒机

    本节主要内容: 1.pymsql的使用 2.SQLAchemy使用 3.Paramiko 4.通过ORM功能使用和Paramiko的使用实现一个简单的堡垒机模型. 一.pymsql的使用 pymsql ...

  2. python 基础,包括列表,元组,字典,字符串,set集合,while循环,for循环,运算符。

         1.continue 的作用:跳出一次循环,进行下一次循环      2.break 跳出不再循环      3.常量 (全是大写)NAME = cjk  一般改了会出错      4.py ...

  3. linux下实现rm()函数删除文件或目录

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600866.html 在linux下有两个函数可以用来删除文件: #include <unistd.h ...

  4. ServletContext对象的应用

    由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯.ServletContext对象通常也 ...

  5. iOS APP安全杂谈

      iOS APP安全杂谈 高小厨 · 2015/06/30 10:16 0x00 序 以前总是在这里看到各位大牛分享其安全渗透经验,而今我也很荣幸的收到了乌云的约稿,兴奋之情难以言表.由于IOS是一 ...

  6. 虚拟机LUN扩大后,重新分区

    [root@ywcrmdb ~]# fdisk -l Disk /dev/sda: 751.6 GB, 751619276800 bytes 255 heads, 63 sectors/track, ...

  7. java中paint repaint update 之间的关系

    最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲.但是他们之间是怎么来调用的呢,咱 ...

  8. git命令使用方法

    git安装包 http://c35.yunpan.360.cn/my/?sid=#%2F%E5%AE%89%E8%A3%85%E5%8C%85%2FGit%E5%AE%89%E8%A3%85%2F g ...

  9. mysql命令行里的加载更多显示

    mysql> pager morePAGER set to 'more'mysql> pager lessPAGER set to 'less'mysql> nopagerPAGER ...

  10. bootstrap前端开发框架,未来发展趋势

    http://v3.bootcss.com/getting-started/Bootstrap 起步 CSS 组件 JavaScript插件 定制 关于 CSS 设置全局CSS样式,基本的HTML元素 ...