用VC++MFC做文本编辑器(单文档模式)

合集下载

MFC学习(七)单文档程序

MFC学习(七)单文档程序

MFC学习(七)单⽂档程序1 MFC单⽂档程序的主要类(1)⽂档类(Document)即应⽤程序处理的数据对象,⽂档⼀般从 MFC 中 CDocument 中派⽣。

CDocument 类⽤于相应数据⽂件的读取以及存储 Cview 类所需要观察和处理的信息。

(2)视类(View)视相当于⽂档在应⽤程序中的观察窗⼝,它确定了⽤户对⽂档的观察⽅式和⽤户编辑⽂档的⽅式。

对于图形来说视就好⽐我们进⾏绘图⼯作的画布,对图形的操作都是在视上进⾏的。

另外,视类中有⼀个重要的成员函数 OnDraw() 函数。

重载的 OnDraw() 函数要完成两件事,即调⽤相应的⽂档的函数获取⽂档数据和调⽤ GDI 图形设备接⼝的函数在视中画出⽂档数据。

(3)主窗⼝类(Main Frame Window)主窗⼝是 Windows 应⽤程序中限定其所有窗⼝范围的最外边框。

应⽤程序中的所⽤其它窗⼝都直接或间接地为主窗⼝的⼦窗⼝,视占⽂档窗⼝的客户区,⽽⽂档窗⼝⼜是主窗⼝的⼦窗⼝。

(4)⽂档模板类(Document Template)⽂档模板类⽤于协调⽂档对象、视对象、和主窗⼝对象的创建过程。

它是从类 CDocTemplate 或其派⽣类中派⽣的。

⼀个⽂档模板可以管理同⼀⽂档类型的所有⽂档。

(5)应⽤类(Application)⼀个应⽤程序有且只有⼀个应⽤类的对象,它控制上述所有的对象。

⼀个应⽤程序对象就代表⼀个应⽤程序,当⽤户启动应⽤程序,Windows 调⽤应⽤程序框架内置的 WinMain 函数,并且 WinMain 寻找⼀个由 CWinApp 派⽣的全局构造的应⽤程序对象,全局对象在应⽤程序之前构造。

(6)图形设备接⼝PC 相容机种上可以连接许多种不同的视讯设备,所以 GDI 的主要⽬的之⼀是⽀援与设备⽆关的图形。

⼀个 Windows 图形设备接⼝对象类型由⼀个 MFC 类库表⽰,这些类有⼀个共同的抽象基类:CGdiObject。

VC操作Word系列

VC操作Word系列

VC操作Word系列近日作一个小东西涉及到对汇总结果的打印,由于打印只在一台特定的机器进行所以考虑使用word来实现,这样比较简单而且很专业。

开始的时候这个东西没有这项功能后来我闲的无聊看看是否可以实现(以前从来没有做过这方面的东西),于是乎搞了一下也不是很难,一点心得大家给指点一二,使用的是office2000,工程类型是mfc的对话框。

先看看需要使用到的东东:1.view->classwizard->automation->addclassfromlibrary:定位到你安装office的目录找到msword9.olb2.打开后把所有的类都选中倒入到你的工程(反正也是搞一回彻底一点:p)3.在你的对话框头文件中加上#include\了准备工作搞定之后就可以玩儿转word了,先来一个简单的voidtestword1(){_applicationapp;colevariantvtrue((short)true),vfalse((short)false);app.createdispatch(_t(\app. setvisible(false);//createnewdocdocumentsdocs=app.getdocuments();selectionsel=app.getselection();sel.typetext(_t(\第一次玩儿word\\r\\n\sel.typetext(_t(\先来一个简单的\\r\\n\sel.releasedispatch();docs.releasedispatch();app.setvisible(true);app.r eleasedispatch();}大家都必须采用过word提供更多的表格功能很就是专业,如果在作一些数据库研发之类的软件对汇总的数据展开列印就是常用的功能,这个如果用word去同时实现个人感觉极好,废话少说说道练习咱就练习。

vc模板制作教程

vc模板制作教程

vc模板制作教程
当制作VC模板时,可以遵循以下教程来创建一个没有标题的
模板,并确保文中不存在重复的标题文字。

1. 打开VC模板编辑软件,如Adobe After Effects或Final Cut Pro等。

2. 创建一个新的项目,并选择适合的分辨率和帧速率。

3. 在画面中央或其他合适位置放置一个适当大小的文本框,用于显示标题。

4. 在文本框中输入要显示的标题文本。

5. 适当调整文本框的大小和位置,以确保标题显示在合适的位置。

6. 根据需要选择合适的字体、字号和颜色,以使标题看起来吸引人且容易阅读。

7. 使用软件的动画功能,如缩放、淡入淡出、滚动等,为标题添加一些动态效果,增加视觉吸引力。

8. 可以添加背景、图像、视频片段或其他视觉元素来进一步增强模板的效果。

9. 调整动画的速度和时长,确保标题的显示时间在合适的范围内。

10. 导出模板为视频文件或其他可用格式,以便在需要时使用。

使用这个教程,你可以制作一个没有标题的VC模板,并避免
在文中出现重复的标题文字。

记住,模板的创意和设计可以根据个人喜好和需求进行调整和修改。

MFC单文档及其简介

MFC单文档及其简介

MFC是一个编程框架MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。

MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。

AppWizard可以用来生成初步的框架文件。

资源编辑器用于帮助直观的设计用户接口。

ClassWizard用来协助添加代码到框架文件,最后,通过类库实现了应用程序特定的逻辑。

MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的。

而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理。

框架或者由其本身处理事件,不依赖程序员的代码,或者调用程序员的代码来处理应用程序特定的事件。

1.S DI生成1.步骤dxq2009首先,打开VC++6.0开发环境,然后,选择”File”菜单中的“New”子菜单,在弹出的对话框中选择“MFC AppWizard(exe)”项并在“Progect name”编辑框中输入合适的工程名字Simple1,如图,它的意思是创建一个基于MFC的应用,接着进入正式的创建过程,MFC 应用程序的创建过程有6步(基于对话框)或者6步(SDI或者MDI),下面首先介绍SDI 应用的创建过程。

(1)第一步用于选择应用的结构以及语言等。

如图1,首先确定应用是否需要Doc/View Architecture Support支持,因为不使用该结构的应用不支持从磁盘文件打开文档,也没有派生于类CWnd的窗口客户区。

上面3个单选按钮用于确定创建的应用类型,包括单文档,多文档,对话框,这里选择第一个。

然后从资源列表框选择应用所使用的语言种类,单击“Next”。

图1(2)第二步为用用程序选择4项数据库支持选项之一:如图2.如果选择了数据库支持,那么单击“Data Source”按钮,选择外部的数据库表项,一般按默认即可,单击“Next”。

图2(3)第三步选择希望包含在应用中的复合文档支持项,同时判定是否启用标准的ActiveX 资源,以及是否为应用的菜单条添加额外的自动化命令等,如图4,一般安默认,单击“Next”图4(4)第四步用于选择应用所需的基本用户接口特征,以及所想使用的工具栏类型,如图5,如果想要修改应用所使用的文件名和扩展名,或者想要调整应用的用户接口和框架风格,就单击“Advanced”,然后修改,一般默认,单击“Next”。

MFC中文本编辑实例讲解

MFC中文本编辑实例讲解

MFC字符输入实例讲解本文主要通过简单实例讲解,实现SDI中的视图窗口中实现字符的输入功能,主要是通过本文能够给MFC初学者一个相对简单的认知过程,希望能够给像我一样的菜鸟们一缕光明(好悲壮啊)!1.首先在VS2008内创建一个单文档(SDI)工程,起名为MyText,选择默认即可,编译完成效果如下:图12.接下来,请根据我的思路与我一起去思考!完成字符输入功能,首先我们需要一个光标(caret),因此第一步,我们需要实现光标的创建与现实!在视图类窗口(客户服务区)创建后,我们创建我们的光标,那么需要在哪里创建呢?对了!CMyTextView类中的消息WM_CREATE对应的OnCreate()函数中添加即可:int CMyTextView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: 在此添加您专用的创建代码CClientDC clientDC(this);//获取当前字体的度量信息TEXTMETRIC tm;clientDC.GetTextMetrics(&tm);//创建实体光标并显示CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);ShowCaret();return 0;}3.此时光标显示在左上角位置,且不能移动。

因此如何让光标移动到我们鼠标点击的位置呢?显然,我们要在视图类中相应WM_LBUTTONDOWN消息,编辑相应的代码:void CMyTextView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值SetCaretPos(point);m_point = point;CView::OnLButtonDown(nFlags, point);}4.下面应该是我们处理字符的阶段了!想实现字符输入,我们要敲键盘,那我们应该去响应那个消息?当然是WM_CHAR,编辑其相应的处理函数将是我们的主要工作。

用VC++MFC做文本编辑器

用VC++MFC做文本编辑器

用VC++MFC做文本编辑器(转载)收藏1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。

2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放: class CTextview_1Doc : public CDocument public:CStringArray m_strContent;然后在CTextview 1Doc类的Serialize函数里面增加打开、保存文本文件的程序: void CTextview_1Doc::Serialize(CArchive& ar)CStri ng str;if ()) public:CEdit* m_ctrlEdit;该指针成员在类建立时要设置初始化值为NULL,否则运行起来就会出错,如下: CTextview_1View::CTextview_1View() :m_ctrlEdit(NULL) II添加这一行初始化代码II TODO: add con struct ion code here用第2点介绍的类似步骤,为CTextview_1View类重写其Onin itial Up date函数,添加内容如下:void CTextview_1View::OninitialUpdate()CView:: OnIn itialU pdate();// TODO: Add your specialized code here and/or call the base classCRect rcClie nt;GetClientRect( rcClient ); //获取当前视图的客户区大小// if ( m_ctrlEdit ) delete m_ctrlEdit; m_ctrlEdit = new CEdit();m_ctrlEdit->Create( ES_MULTILINE | WS_CHILD | WS_VISIBLE| WS_HSCROLL| ES_AUTOHSCROLL// 自动水平滚动| WS_VSCROLL| ES_AUTOVSCROLL // 自动垂直滚动CTextview_1Doc* pDoc = GetDocument(); //获取与视图相关联的文档指针//以下是将文档中的m_strContent内容全部赋给strCStri ng str;int nLines = (int)pDoc->();for ( int i=0; i<nLines; i++ )str = str + pDoc->( i );str = str + "\r\n"; // 换行m_ctrlEdit->SetTabStops( 16 ); // 设置Tab 符大小m_ctrlEdit->SetWindowText( str ); // 将文档内容传给控件4,现在运行一下,文本编辑器就做好了。

VC实验讲义--单文档应用程序

VC实验讲义--单文档应用程序

第三课MFC单文档应用程序实现举例创建单文档应用程序的一般步骤:利用AppWizard创建单文档应用程序框架。

在文档类中声明保存文档数据所需要数据对象。

完成文档类的OnNewDocument函数,初始化新文档。

完成文档类的Serialize函数,保持和加载文档数据。

完成视类的OnInitialUpdate函数,初始化显示。

完成视类的OnDraw函数,显示当前文档内容。

在视类中加入可以使用户编辑文档数据所需的代码。

本实验指导通过以下 4 个实验循序渐进演示创建单文档应用程序的基本操作,在前一个例子中演练过的操作,在后面的中出现时不再重复描述。

例1 一个简单的单文档应用程序——记事本程序例2 简单文本和图形输出例3 利用定时器输出滚动字幕例1 一个简单的单文档应用程序——记事本程序1. 只要在AppWizard的Step 6将Base Class设置为EditView,AppWizard就自动完成了一个记事本程序的设计:2. 运行程序,即可测试记事本的各种功能:3.说明:(1)打开Workshop中的Class视图,可以看到,一个简单的单文档应用程序向导自动建立五个类:((3)每个类的主要函数:void CAboutDlg::DoDataExchange(CDataExchange* pDX)int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)//创建窗体的工具栏,状态栏等BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)BOOL CXxxApp::InitInstance()void CXxxApp::OnAppAbout()BOOL CXxxDoc::OnNewDocument()//初始化文档字符数据、字体信息等void CXxxDoc::Serialize(CArchive& ar)BOOL CXxxView::PreCreateWindow(CREATESTRUCT& cs)void CXxxView::OnDraw(CDC* pDC)BOOL CXxxView::OnPreparePrinting(CPrintInfo* pInfo)//弹出打印对话框void CXxxView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)void CXxxView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)CXxxDoc* CXxxView::GetDocument() // non-debug version is inline例2 简单文本和图形输出建立一个简单的单文档应用程序SimpleTextPicture,通过修改OnDraw函数在视(View)中输出信息或画图。

MFC文字编辑

MFC文字编辑

一、创建插入符在文本处理程序的编辑窗口中都有一条闪烁的竖线,将之称为插入符(Caret)。

字体没有具体的宽度值,如W字符和I字符。

每一种字体都有一条基线,基线以上到字符最高点之间的高度称升序高度,基线以下到字符最低点之间的高度称为降序高度。

升序高度加上降序高度就是字体的高度。

TEXTMETRIC结构体定义了升序高度tmAscent,降序高度tmDescent,字体高度tmHeight,字体平均宽度tmAveCharWidth。

如下图所示:1、在ON_WM_CREATE消息处理函数中创建一般插入符:CClientDC dc(this);//创建设备描述表TEXTMETRIC tm;//定义文本信息结构体变量dc.GetTextMetrics(&tm);//获得设备描述表中的文本信息CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);//根据字体大小,创建合适的插入符ShowCaret();//显示插入符提示:CreateSolidCaret函数创建插入符以后,该插入符初始时是隐藏的,必须调用ShowCaret 函数来显示它。

2、在ON_WM_CREATE消息处理函数中创建图形插入符:(1)、先定义一个全局CBitmap bitmap;,编辑位图资源IDB_BITMAP1。

(2)、在ON_WM_CREATE消息处理函数OnCreate中添加:bitmap.LoadBitmap(IDB_BITMAP1);CreateCaret(&bitmap);ShowCaret();提示:SetCaretPos函数可以改变插入符所在位置。

二、窗口重绘Windows程序运行时,若程序窗口大小发生变化,窗口会发生重绘,窗口中已输入的文字或图形就会被擦除掉。

若希望输入的内容始终保留在窗口上,就要在响应WM_PAINT消息的函数中将内容再次输出。

在MFC AppWizard产生的视类代码中,给我们提供了一个类似于WM_PAINT消息响应函数OnDraw函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用VC++MFC做文本编辑器(单文档模式)(2007-7-6 17:06:00)
原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下:
1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。

2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放:
class CTextview_1Doc : public CDocument
{
......
public:
CStringArray m_strContent;
}
然后在CTextview_1Doc类的Serialize函数里面增加打开、保存文本文件的程序:
void CTextview_1Doc::Serialize(CArchive& ar)
{
CString str;
if (ar.IsStoring())
{
// TODO: add storing code here
int nLines = (int)m_strContent.GetSize();
for ( int i=0; i<nLines; i++ )
{
str = m_strContent.GetAt( i );
ar.WriteString( str ); // 将字符串集合类对象中文本保存到硬盘
}
}
else
{
// TODO: add loading code here
while ( ar.ReadString( str ) )
{
m_strContent.Add( str ); // 将行文本添加到字符串集合类对象中
}
}
}
然后鼠标在CTextview_1Doc 上点击右键,在弹出菜单里面选择:Add Virtual Function,在弹出的窗口中选中DeleteContents,点击“添加和编辑”按钮。

在生成的程序中添加以下代码:
void CTextview_1Doc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
m_strContent.RemoveAll(); // 清除集合类对象中的内容
CDocument::DeleteContents();
}
3,在系统自动生成的CTextview_1View类里面增加一个编辑器的控件指针成员,用于在界面中生成文本编辑器:
class CTextview_1View : public CView
{
......
public:
CEdit* m_ctrlEdit;
}
该指针成员在类建立时要设置初始化值为NULL,否则运行起来就会出错,如下:
CTextview_1View::CTextview_1View()
: m_ctrlEdit(NULL) //添加这一行初始化代码
{
// TODO: add construction code here
}
用第2点介绍的类似步骤,为CTextview_1View类重写其OnInitialUpdate函数,添加内容如下:
void CTextview_1View::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CRect rcClient;
GetClientRect( rcClient ); // 获取当前视图的客户区大小
// if ( m_ctrlEdit ) delete m_ctrlEdit;
m_ctrlEdit = new CEdit();
m_ctrlEdit->Create( ES_MULTILINE | WS_CHILD | WS_VISIBLE
| WS_HSCROLL | ES_AUTOHSCROLL // 自动水平滚动
| WS_VSCROLL | ES_AUTOVSCROLL , // 自动垂直滚动
rcClient, this, 201); // 创建多行编辑控件
CTextview_1Doc* pDoc = GetDocument(); // 获取与视图相关联的文档指针
// 以下是将文档中的m_strContent内容全部赋给str
CString str;
int nLines = (int)pDoc->m_strContent.GetSize();
for ( int i=0; i<nLines; i++ )
str = str + pDoc->m_strContent.GetAt( i );
str = str + "\r\n"; // 换行
}
m_ctrlEdit->SetTabStops( 16 ); // 设置Tab符大小
m_ctrlEdit->SetWindowText( str ); // 将文档内容传给控件
}
4,现在运行一下,文本编辑器就做好了。

5,当然,现在的文本编辑器很不好用,因为不能滚动窗口。

而且不会随窗口的大小变化,因此需要增加一些代码。

鼠标停在CTextview_1View上点击右键,在弹出菜单中选择:Add Window Message Handle,在弹出的窗口中,选择WM_SIZE消息,并点击“Add & Edit”按钮,在生成的函数中添加以下内容:
void CTextview_1View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rcClient;
GetClientRect( rcClient );
if ( m_ctrlEdit )
m_ctrlEdit->MoveWindow( rcClient ); // 改变编辑控件窗口大小
}
6,再运行,一个象模象样的编辑器生成了。

相关文档
最新文档