`
isiqi
  • 浏览: 16561459 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

MFC学习笔记之文本编程

阅读更多

1插入符

1) 创建文本插入符

在程序中想要创建插入符,可以利用CWnd类的CreateSolidCaret()函数来完成

void CreateSolidCaret(int nWidth,ing nHeight);

nWidth:指定插入符的宽度(逻辑单位),如果该参数的值为0,那么系统将其设置为系统定义的窗口边界的宽度。

nHeight:指定插入符的高度(逻辑单位),如果该参数的值为0,那么系统将其设置为系统定义的窗口边界的高度。

2).创建图形插入符

利用CWnd类的另一个函数CreateCaret来实现

void CreateCaret(CBitmap *pBitmap)

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

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if(CView::OnCreate(lpCreateStruct) == -1)

return -1;

//TODO:Add your specialized creation code here

//创建文本插入符
CClientDC t_dc(this); //创建设备描述表
TEXTMETRIC t_tm;//定义文本信息结构体变量
t_dc.GetTextMetrics(&t_tm);//获得设备描述表中的文本信息
CreateSolidCaret(t_tm.tmAveCharWidth/8,t_tm.tmHeight);//根据字体大小,创建合适的插入符
ShowCaret(); //显示插入符

/*

//创建图形插入符
m_bitmap.LoadBitmap(IDB_BITMAP1);
CClientDC t_dc(this);
CreateCaret(&m_bitmap);
ShowCaret();

*/

return 0;

}

2 窗口重绘

Windows程序运行时,如果程序窗口大小发送变化,窗口会发生重绘,窗口中已输入的文字或图形就会被擦除掉,如果希望输入的内容始终保留在窗口上,就要在响应WM_PAINT消息的函数中将内容再次输出.在MFC AppWizard产生的视类代码中,给我们提供了一个类似于WM_PAINT消息响应函数的ONDraw函数,在窗口发生重绘时,应用程序框架代码会调用该函数

3 路径

在设备描述表中还有一个路劲层(path bracket)的概念.

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

CDC类为我们提供了一个GetTextExtent函数,利用这个函数可以获得一个字符串在屏幕上显示的宽度和高度。

CSize GetTextExtent(const CString& str) const;

CSize类类似于Windows的SIZE结构体,定义如下

typedef struct tagSIZE

{

int cx;

int cy;

}SIZE;

不要把这个函数和前面讲过的GetTextMetrics函数混淆了,对GetTextMetrics函数来说,它获得的是设备描述表中当前字体的度量信息,而GetTextExtent函数则是获得某个特定的字符串在窗口中显示时所占据的宽度和高度

CDC类提供了一个SelectClipPath函数,该函数的作用是把当前设置的路径层和设备描述表中已有的裁剪区域按照一种指定的模式进行一个互操作,该函数的声明形式如下:

BOOL SelectClipPath(int nMode);

其中,参数nMode用来指定互操作的模式,有多种取值,例如RGN_DIFF,RGN_AND

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

CString t_str = "退一步,海阔天空";
CSize t_sz;
t_sz = pDC->GetTextExtent(t_str);
pDC->TextOut(50,50,t_str);

pDC->BeginPath();
pDC->Rectangle(50,50,50 + t_sz.cx,50 + t_sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_AND);

for(int i = 0;i < 300; i+=10)
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}
}

4.字体

MFC提供了义个CFont类专门用来设置字体。这个类派生于CGdiObject类,封装了一个Windows图形设备接口(GDI)的字体。在实际编程时,在构造了一个CFont对象后,还必须利用该类提供的几个初始化函数之一对该类对象进行初始化,然后才能使用这个对象.

CClient dc(this);

CFont font;

font.CreatePointFong(300,"华文楷体",NULL);

CFont *pOldFont = dc.selectObject(&font);

TEXTMETRIC tm;

dc.GetTextMetrics(&tm);

...

...

dc.SelectObject(pOldFont);

MFC提供了CEditView和CRichEditView这两个类,可以用例帮助我们实现强大的字处理程序,其中,后者提供的功能比前者更为强大,如果让程序的视类直接派生于这两个类之一的话,程序就已经具备字处理程序的一些基本功能.

5. 字幕变色功能的实现

CDC类提供了一个输出文字的函数:DrawText,该函数作用是在指定的矩形范围内输出文字。

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

str:指定要输出的字符串

lpRect:指定文字显示范围的矩形

nFormat:指定文本的输出格式.

DrawText函数实际上是把文字的输出局限在一个矩形范围内,单输出的文字太多,以至于超过设定的矩形范围时,DrawText函数就会截断输出的文字,只显示在设定矩形内能够显示的那部分文字.

CWnd类的SetTimer成员函数可以设置定时器。

UNIT SetTimer(UNIT nIDEvent,UNIT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT,UINT,DWORD));

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

nIDEvent:指定一个非零的定时器标识,如果这个函数执行成功,它的第一个参数和返回值就是相等的.

nElapse:指定定时器的时间间隔,以毫秒为单位。

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

分享到:
评论

相关推荐

    MFC学习笔记

    本篇笔记主要围绕MFC的基础知识展开,包括Windows程序的运行原理、C++基础、MFC框架结构以及具体的应用场景,如文本编程、菜单编程和对话框编程。 首先,理解Windows程序内部运行原理至关重要。应用程序通过调用API...

    MFC学习代码及笔记

    MFC(Microsoft Foundation...总之,MFC学习代码和笔记对于希望深入理解和掌握Windows桌面应用程序开发的程序员来说,是一份不可多得的学习材料。通过学习和实践,可以提升编程技能,更好地驾驭MFC这一强大的开发工具。

    MFC学习笔记1

    【MFC学习笔记1】 MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序的开发。本笔记将重点介绍基于对话框的MFC应用程序开发。 7.16 基于对话框编程 对话框在Windows程序中扮演...

    MFC学习笔记加windows32

    《深入探索MFC与Windows32编程》 MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序开发。它将Windows API封装为面向对象的类,使得开发者能够更容易地利用Windows的功能。而...

    MFC知识点笔记

    **Lesson5: 文本编程** 在MFC中,可以使用CString类来处理字符串,它提供了丰富的字符串操作函数。同时,CTextCtrl类用于在窗口中显示和编辑文本。 **Lesson6: 菜单编程** MFC通过CMenu类来创建和管理菜单。可以...

    b站上某马mfc教程学习笔记

    MFC 编程学习笔记 MFC(Microsoft Foundation Classes)是一种基于Windows操作系统的应用程序框架,提供了一组强大的类库和工具,帮助开发者快速创建Windows应用程序。本笔记总结了MFC 编程的一些基本概念和控件...

    mfc学习笔记

    2. **CDC(Class Device Context)**:`CDC`是MFC封装的设备上下文类,它提供了一系列成员函数,用于在设备上下文中执行绘制操作,如绘制线条、矩形、文本等。`CDC`对象可以获取或创建HDC,也可以进行位图操作和设备...

    MFC C++ 学习笔记(一)

    ### MFC C++ 学习笔记(一) #### 全局变量的作用域及使用 - **普通全局变量**: 在一个源文件中定义的全局变量,可以在该文件内及其他包含相应`extern`声明的文件中使用。 - **全局静态变量**: 作用域限制于其定义...

    mfc控件经典学习

    MFC控件的学习是掌握MFC开发的关键之一。通过了解不同类型控件的特点和使用方法,开发者可以更高效地构建用户界面,并实现丰富的交互功能。以上介绍的只是MFC控件的一小部分,更深入的学习还需要参考官方文档和其他...

    《精通MFC》笔记——自我感觉不比Visual C++深入详解逊色

    **高级主题**如多线程、动态链接库(DLL)、ActiveX容器、打印和打印预览等功能,虽然本书可能没有详尽的笔记,但这些都是MFC进阶学习的重要内容。如果想深入了解,可以参考专门的书籍或者在线资源。 总的来说,...

    Windows編程学习笔记

    以下是对标题"Windows编程学习笔记"及描述中涉及的知识点的详细阐述: 1. **Windows程序内部运行机制**: Windows程序是基于事件驱动的,这涉及到消息队列、消息循环和窗口过程等概念。程序启动后,操作系统会为每...

    VC++深入详解学习笔记

    **VC++深入详解学习笔记** 在编程领域,Visual C++(简称VC++)是Microsoft公司开发的一款集成开发环境,主要用于编写使用C++语言的应用程序。它不仅提供了编译器,还包括了调试器、资源编辑器等工具,为开发者提供...

    Visual C++程序设计学习笔记(1-12 源码)

    本资源包含的是Visual C++程序设计的学习笔记,涵盖了从基础到进阶的12个章节的源代码,对于学习和理解C++编程,特别是使用Visual C++环境编程,具有极高的参考价值。 首先,我们来详细探讨一下Visual C++的关键...

    Visual C++学习笔记

    ### Visual C++学习笔记知识点详解 #### 1. Win32API详解 Win32API是微软为其32位平台提供的应用程序编程接口(Application Programming Interface),适用于所有基于Win32平台运行的应用程序。通过调用Win32 API中...

    VC++技术内幕学习笔记

    总的来说,《VC++技术内幕》的学习笔记涵盖了Windows编程基础、MFC框架的运用以及开发环境的使用技巧,是学习VC++编程的宝贵资源。通过深入阅读和实践,开发者可以逐步掌握Windows应用程序开发的核心技能。

    vc++代码 学习笔记

    在这个"vc++代码 学习笔记"中,我们可以预期探讨的是关于VC++中的常用控件和相关编程技巧。 在Windows编程中,控件是用户界面的基本构建块,如按钮、文本框、列表框等。VC++中的控件主要通过MFC(Microsoft ...

    Windows编程笔记1

    在Windows编程领域,MFC(Microsoft Foundation Classes)是一个强大的C++库,它为开发者提供了构建Windows应用程序的...对于想要学习Windows编程的人来说,这些笔记提供了一个很好的起点,帮助他们理解和应用MFC库。

    『VC++技术内幕』学习笔记.rar_VC 学习_VC技术内幕_Vc_chm_vc++

    除了这些主题,学习笔记可能还包含了一些实用资源,例如www.pudn.com.txt可能是一个链接到更多学习资料或源代码的文本文件。 总之,《VC++技术内幕》的学习笔记是一部深入浅出的教程,对于任何想要精通VC++开发的...

Global site tag (gtag.js) - Google Analytics