vc 6.0打造单文档界面与多文档界面的编程
VC++6.0入门【第八章 文档和视图】
第8章文档和视图MFC应用程序的核心是文档/视图结构。
在前面章节的学习中,已经接触了不少文档/视图结构的应用程序,本章将详细分析其结构和原理,并进一步学习使用复杂的文档结构、构造更加丰富的视图。
8.1 文档/视图概述使用MFC的AppWizard可以创建三种类型的应用程序:(1)单文档界面的应用程序(SDI:Single Document Interface)(2)多文档界面的应用程序(MDI:Multiple Documents Interface)(3)基于对话框的应用程序(Dialog based)基于对话框的应用程序框架非常简单,由应用程序类、对话框类构成。
通过应用程序类的InitInstance()函数,构造一个模式对话框对象;调用DoModal()函数,让Windows对话框处理程序象通常情况一样接受和分配消息;用户退出对话框后,程序也就结束了。
我们已经知道SDI应用程序由应用程序类(CWinApp)、框架窗口类(CFrameWnd)、文档类(CDocument)、视图类(CView)和文档模板类(CSingleDocTemplate)共同作用。
MDI应用程序与SDI 应用程序的主要差别在于:MDI有CMDIFrameWnd和CMDIChildWnd两个框架窗口类,前一个派生CMainFrame类,负责菜单等界面元素的主框架窗口管理;后一个派生CChildFrame类,负责相应的文档及其视图的子框架维护。
而SDI由框架窗口类CFrameWnd 派生CMainFrame类。
一个文档可以有多个视图,但一个视图只能对应一个确定的文档。
因此,MDI应用程序需要解决的问题是多个文档的数据管理方法。
在MDI应用程序中,文档模板只支持主窗口。
每打开一个新文档时,都调用文档类的成员函数OnNewDocument(),建立一个由CMDIChildWnd派生的新的MDI子窗口,在子窗口中保存已打开的文档,所有这些细节都由MFC库来处理。
vc++6.0入门教程
vc++6.0入门教程步骤是:(先工程—后文件—编译—连接---运行)1 桌面上的快捷方式如下:双击即可运行2 在所有程序里点击也可以运行:3 即会出现如下界面:4 进入后的界面如下:5 将每日提示关闭既可:6 建立一个工程,“文件”——“新建”1,建立一个工程,“文件”——“新建”,出现下面界面:选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命名工程名称,选择保存位置,点击“确定”,进入下一步,看到如下提示界面:建立一个空工程,对应其他需要的你一可以建立别的工程;点击“完成”,之后:显示你创建的工程的信息。
2,再在有一个的工程的条件下,我们再建立一个源文件;“文件”——“新建”(快捷键Ctri+N),出现:建立源文件,选择“C++ Source ”,一般都是建立这种文件的(适用在当文件中适用)如果要建立头文件的话,选择“C/C++ Header File”,(适用在多文件工程中使用)命名,文件名称,点击“确定”,之后:进入编辑区,在主界面编写代码:如下编写完之后呢:可以按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接),最后,点运行按钮,就可以运行了。
如果是您有代码如:cpp文件,或.h 文件,想添加都VC6.0里来测试的话,可以这样做:首先,要理解一下文件扩展名为:cpp和.h文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个程序中常用到的结构体,频繁使用的函数说明,定义等等;文件扩张名为,cpp的,是C++中的源文件,也是最常用到的文件,每建立一个工程都要至少一个源文件(至少要有一个函数入口——主函数main() ),包含了核心代码;建立与运行说明:(以VC 6.0编译器为例,其他编译器类似)首先,打开VC 6.0编译环境;在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选择Win32 Console Application(控制台应用程序) ,在填写工程名称,选择一个程序保存路径,点击“完成”,查看工程信息。
VisualC6.0实用教程
9
1.5资源
打开资源 如果需要对已有资源进行查看或修改,可以首先切换到项目工作区窗口的 ResourceView标签页,然后选中要打开的资源,双击鼠标左键或者按Enter 键,这时相应的资源编辑器也会相应自动打开。
删除、复制资源 如果删除一个已有的资源,可以首先切换到项目工作区窗口的ResourceView 标签页,然后选中要打开的资源,按Del键或者利用Edit菜单下的Delete菜 单项可实现删除。复制资源的过程与删除类似,选中要打开的资源,按住 Ctrl键不放,并拖动鼠标左键或利用Edit菜单中的Copy和Paste菜单命令进 行操作,它同其他软件的复制过程相同。
动文件,还可以创建新的目录项以及将一些特殊类型的文件放在该目录项中。 创建一个新目录项,可在添加目录项的地方右击,选择“New Folder”,
如图,输入目录项名称和相关的文件扩展名,单击[OK]。
图1.22 “New Folder”对话框
7
1.5资源
1.5.1资源与资源标识
资源的分类 (1)快捷键列表 (2)工具栏按钮 (3)鼠标指针 (4)对话框 (5)HTML (6)图标 (7)菜单 (8)字符串列表 (9)版本信息
注意:在开发环境中,VC是通过左边的项目工作区窗口来对项目进行各种
管理。项目工作区窗口包含三个页面,是ClassView页、ResourceView页和
FileView页。
Debug或Release
编连过程产生的文件
文件夹
运行文件Ex_Sdi.exe
图标文件Ex_Sdi.ico等
Res文件夹
工具栏资源Toolbar.bmp
标识符 标识符的命名规则:
C++Builder6.0界面开发实例
3
实例 2
创建标题栏在左边的窗口界面
实例目标 实现左边标题,能拖动的窗口。如下图所示:
实现技术 第 一 步 先 指 明 窗 口 BorderStyle 为 bsNone, 这 样 就 不 能 拉 伸 窗 , 没 有 标 题 和 边 框 。 第 二
RECT rc; //左 边 标 题 栏 。 ::SetRect(&rc,0,0,nTitleWidth,ClientHeight); Canvas->Brush->Color = clBlue; Canvas->FillRect(rc); //右 边 边 界 。 ::SetRect(&rc,ClientWidth-2,0,ClientWidth,ClientHeight); Canvas->Brush->Color = clBlue; Canvas->FillRect(rc); //上 面 边 界 。 ::SetRect(&rc,0,0,ClientWidth,2); Canvas->Brush->Color = clBlue; Canvas->FillRect(rc); //下 面 边 界 。 ::SetRect(&rc,0,ClientHeight-2,ClientWidth,ClientHeight); Canvas->Brush->Color = clBlue;
TPoint pt; //取 得 鼠 标 位 置 。 pt.x=LOWORD(tMsg.LParam); pt.y=HIWORD(tMsg.LParam); pt =ScreenToClient(pt);//转 换 为 客 户 坐 标 。
VC++6.0定制窗口的方法+框架窗体、文档视图
3.基于对话框的应用程序(Dialog based Application)
基于对话框的应用程序非常简单,由应用程序类、 对话框类(可以作为其它控件的容器)构成。它的生 命周期可概括为:通过应用程序类的InitInstance()函 数,构造一个模式对话框对象;调用DoModal函数, 让基于对话框的应用程序像对待普通对话框一样接收 和分配消息;用户退出对话框后,程序也就随之结束。 常见的基于对话框的应用程序有计算器等(以对话框 为容器布局的程序)。
第7章 框架窗口、文档和视图
7.1 应用程序组成结构
1.单文档应用程序(Single Document Interface,SDI) 在单文档界面程序中,用户在同一时刻只能操作一个文
档,如记事本程序。在这些应用程序中,打开文档时会自 动关闭当前打开的活动文档,若文档修改后尚未保存,会 提示是否保存所做的修改。因为一次只开一个窗口,因此 不像WORD那样需要一个窗口菜单。单文档应用程序一般 都提供一个“文件”菜单,在该菜单下有一组命令,用于新 建文档、打开已有文档、保存或另存为等。这类程序相对 比较简单,常见的应用程序有终端仿真程序和一些工具程 序。
在文档视图结构中文档类的主要任务通常是对数据进行管理和维护数据将保存在文档类的成员变量中视图通过对这些变量的访问来获取或返回数据并能通过这种方式来更新并显示数据
VC++6.0 定制窗口的方法
VC++6.0 是 Microsoft 新近推出的可视化 C++集成开发环境。它在继承以前 VC++的 基础上增加了许多新的功能,用于支持 Win32 平台应用程序、服务程序和控件的开发。VC++5.0 提供了强 大、快捷的编程工具,其中最基本的是三个导航:AppWizard 用于程序框 架的生成,AppStudio 用于资源 的编辑,ClassWizard 用于类的编辑和管理。其中,窗口 、菜单等无需用户编写程序,而由系统自动生成。 但在许多情况下,用户要设置自己希 望的窗口(即定制窗口)。
Visual C++ 6.0使用说明
Visual C++ 6.0使用说明在VC6.0下,必须先创建工程(Project),然后再添加源文件。
一个真正的软件,往往需要多个源文件和多种资源,例如图片、视频、控件等,通常是把它们放到一个文件夹下,进行有效的管理。
你可以把工程理解为这样的一个文件夹,IDE通过工程来管理这些文件。
工程有不同的类型,例如开发“黑窗口”的控制台程序,需要创建Win32 Console Application工程;开发带界面的GUI程序,需要创建Win32 Application工程。
1) 新建Win32 Console Application工程打开VC6.0,在菜单栏中选择“文件-> 新建”,或者Ctrl+N,弹出下面的对话框:切换到“工程”选项卡,选择“Win32 Console Application”,填写工程名称和路径,点击“确定”,会弹出一个对话框询问类型,这里选择“一个空工程”,如下图所示:点击“完成”按钮完成工程的创建。
2) 新建C源文件在菜单栏中选择“文件-> 新建”,或者Ctrl+N,弹出下面的对话框:切换到“文件”选项卡,选择“C++ Source File”,填写文件名,点击确定完成。
该步骤是向刚才创建的工程添加源文件。
3) 编写C语言代码在工作空间中可以看到刚才创建的工程和源文件,如下图所示:双击hello.c,进入编辑界面,输入上节中的代码。
4) 编译并运行代码在“组建”菜单中找到编译、组建和运行的功能,如下图所示:更加简单的方法是使用快捷方式,如下图所示:保存编写好的源代码,点击运行按钮或Ctrl+F5,如果程序正确,可以看到运行结果,如下图所示:注意:编译生成的.exe 文件在工程目录下的Debug文件夹内。
以上面的工程为例,路径为 E:\cDemo,打开看到有一个Debug文件夹,进入可以看到cDemo.exe。
在Debug目录中还会看到一个名为hello.obj 的文件。
MFC的窗口分割实例以及CSplitterWnd类
3 分割窗口ቤተ መጻሕፍቲ ባይዱ
如图 1,把窗口分成三个视图,左视图基于 CView 类,可用来作几何图形;右上视图基 于 CEditView 类,用于显示文本消息;右下视图基于 CFormView 类,在此视图中做一个文 本框及发送、清除按钮,发送按钮用来向右上视图传送消息。
图 1 设计样式 打开 Microsoft VC++ 6.0,通过 MFC AppWizard(exe)新建名为 SplitWnd 的单文档(SDI) 工程,新建工程时所有选项均按默认设定。 工程建好后,把工程中的 CSplitWndView 视图类作为左视图所对应的类(该类的实现 与本文重点无关,故不阐述,有兴趣读者可与作者联系),由于需要三个视图窗口对应三个
视图类,因此需要手动创建右上视图、右下视图对应的类,可以通过 MFC 向导向应用程序 添加两个 MFC 类(菜单“Insert | New Class>”),因为在右上视图用于显示文本,故其基类选 CEditView,类名为 CLeftTopView;另一个 MFC 类的基类选 CFormView 类,取类名为 CLeftBttmView,该类即对应右下视图(由于该类基于 CFormView 类,需要有对话框与之对 应,故应先在资源中新建对话框,对话框中的控件如图 1)。
void CLeftBttmView::OnSendMsg() { UpdateData();//更新控件变量数据,文本框对应的变量为 m_sText //通过 CMainFrame 类中的 m_wndSplitterRight 变量获得右上视图类指针 CMainFrame * pMainFrm = (CMainFrame *)AfxGetApp()->GetMainWnd(); CWnd * pWnd = pMainFrm->m_wndSplitterRight.GetPane(0, 0); CLeftTopView* pLeftTopView = DYNAMIC_DOWNCAST(CLeftTopView, pWnd); pLeftTopView ->GetMsg( m_sText + "\r\n" );//CLeftTopView 成员函数,接收数据 } 右上视图类 CLeftTopView 的成员函数 GetMsg 则需保存接收到的消息并显示,主要代 码如下: void CLeftTopView::GetMsg(CString sMsg) { m_sAllMsg += sMsg; // m_sAllMsg 为成员变量,记录所有消息 int nTextLen = GetWindowTextLength(); GetEditCtrl().SetSel(nTextLen, nTextLen); GetEditCtrl().ReplaceSel( sMsg );//显示新消息 } 有了上面两个函数就可以实现右上视图类 CLeftTopView 与右上视图类 CLeftBttmView 之间的简单通讯,类似地,可以实现所有视图之间任意的数据传递。
VC++6.0操作简介
VC++6.0操作简介一、 VC++6.0VC++6.0二、 VC++6.0环境的基本操作1. 建立应用程序操作步骤如下:(1) 关闭 当前工作区:【文件】→【关闭 工作区】 (必要时)(2) 建立工程:【文件】→【新建】(出现“新建”对话框)在“新建”对话框中选中“工程”选项卡→选中其中的“Win32 Console Application”项→选择存储“位置”→输入工程名→单击“确定”按钮(出现“Win32Console Application”对话框)在“Win32 Console Application”对话框中选择“An empty project”选项→单击“完成”按钮注意:在操作过程中,如果出现提示性对话框,可根据具体情况按“确定”或“取消”按钮。
至此,一个新的工程已经建立,接下来,可以在该工程中建立文件或(和)将已经存在的文件添加到工程中:在工程中新建文件:【工程】→【添加工程】→【新建】(出现“新建”对话框)在“新建”对话框中选中“文件”选项卡→选中其中的“C++ Source File”或者“C/C++ Header File”项→选择新建的置(目录)→输入文件名→单击“确定”按钮→输入文件内容。
例如,新建的名为M1.cpp的源文件内容如下:向工程中添加文件【工程】→【添加工程】→【Files…】(出现“插入文件到工程”对话框)在“插入文件到工程”对话框中选中要插入的文件→选择文件要插入的工程(插入到)→单击“确定”按钮2.编辑文件操作步骤如下:在“工作区”窗口中选择“FileView”选项卡→展开相应工程的文件分支(工程名files)→双击类要编辑的文件名(此时,相应文件的内容已经显示在编辑窗口中)→对文件进行编辑3.编译、构建与运行应用程序编译源文件:在“工作区”窗口选择“FileView”选项卡→选择要编译的源文件→【编译】→【编译xx】构建可执行文件:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【构建xx.exe】运行应用程序:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【执行xx.exe】4.在工程中新建类(1)新建类:设置活动工程(工作区中有多个工程时需要此步)。
VC++6.0使用手册(史上最全)
图1-1Visual C++界面开项目工作区文件时其他文件随即会自动打开。
在此文件夹下还会创建 Res(资源)、Debug(调试)、Release(发行)等子文件夹。
2.2编辑 在编辑窗口打开、浏览文件、输入、修改、复制、剪切、粘贴、查找、替换、撤销等操作,可以通过菜单完成,也可以通过工具栏按钮完成,这些与 Word 之类的 windows 编辑器用法完全相同,这里就不再重复叙述了。
2.3辅助VC 不仅提供了“语法着色”帮助我们阅读程序,还可以通过一些快捷键检查常见的括号不匹配错误。
MSDN 也可以在编辑过程中提示存在的变量名、函数名。
很多程序员借助类似 Visual Assist X 的工具辅助开发,减少程序出错的可能性。
3.开发 C 程序3.1开发单个 C 语言程序1. 创建一个工作文件夹。
由于开发过程会产生一系列文件,建议每开发一个新的 C 程序都创建一个工作文件夹。
还可以将所有工作文件夹集中到一起,如E:\LXH\EX01-01 、E:\LXH\EX03-02 等。
2. 启动 Visual C++。
3. 新建一个 C 语言源程序。
选择菜单:File 下的 New 菜单项,出现如图 1-2 所示 new(新建)对话框。
图1-2选择菜单File下的New菜单项选择 Files标签下的 C++Source File 在“E:\LXH\EG01-01”文件夹中创建C 程序:eg01-01.c,如图 1-3 所示。
图1-3Files标签4. 输入、编辑源程序。
注意不要输入中文标点符号,要及时按 Ctrl+S 保存文件,如图 1-4 所示。
图1-4输入源程序5.编译、连接。
点击“BuildMiniBar”工具栏上的“Build”按钮进行编译、连接。
也可以选择菜单 Build 下的 Build (F7) 菜单项或Rebuild All菜单项。
更简捷的方法是直接按 F7 功能键。
Visual C++将提示创建默认工作区,如图 1-5 所示。
vc++6.0打造单文档界面与多文档界面的编程
vc++6.0打造单文档界面与多文档界面的编程VC++6中,可以利用MFC向导分别创建单文档和多文档界面的应用程序。
有了这两种类型的应用程序,您就可以实现简单的记事本,写字本和WORD的功能了。
以下介绍一个在文档中输出一段文字,点击菜单项,输入文字内容按OK按钮后可以更改输出的文字。
1.首先,点击MFC向导,选择多文档视图类型,新建一个名为MdiDemo的工程。
2.新建一个对话框。
上面放置一个Static控件和一个Edit控件,按CTRL+W,将Edit控件改成m_Caption.3.新建一个类与对话框对应,如CDlgDemo类。
4.在菜单中,增加一项Demo,并增加菜单项Test.按CTRL+W,并双击后,在消息的上面选择Doc,下面选择Command,双击就产生了对应的事件处理函数。
5.在MdiDemoDoc.cpp类中输入以下:// DlgDemo.cpp : implementation file//#include "stdafx.h"#include "MdiDemo.h"#include "DlgDemo.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////// //////////// CDlgDemo dialogCDlgDemo::CDlgDemo(CWnd* pParent /*=NULL*/): CDialog(CDlgDemo::IDD, pParent){//{{AFX_DATA_INIT(CDlgDemo)m_Caption = _T("");//}}AFX_DATA_INIT}void CDlgDemo::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CDlgDemo)DDX_Text(pDX, IDC_EDIT1, m_Caption);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CDlgDemo, CDialog)//{{AFX_MSG_MAP(CDlgDemo)// NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////// //////////// CDlgDemo message handlers6.在MdiDemoView.cpp中输入以下内容:// MdiDemoView.cpp : implementation of the CMdiDemoView class//#include "stdafx.h"#include "MdiDemo.h"#include "MdiDemoDoc.h"#include "MdiDemoView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////// //////////// CMdiDemoViewIMPLEMENT_DYNCREATE(CMdiDemoView, CView)BEGIN_MESSAGE_MAP(CMdiDemoView, CView)//{{AFX_MSG_MAP(CMdiDemoView)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////// //////////// CMdiDemoView construction/destructionCMdiDemoView::CMdiDemoView(){// TODO: add construction code here}CMdiDemoView::~CMdiDemoView(){}BOOL CMdiDemoView::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////// //////////// CMdiDemoView drawingvoid CMdiDemoView::OnDraw(CDC* pDC){CMdiDemoDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCRect crect;GetClientRect(&crect);CSize sizeClient=crect.Size();CString str=pDoc->strCaption;CSize sizeTextExtent=pDC->GetTextExtent(str);pDC->TextOut((sizeClient.cx-sizeTextExtent.cx)/2,(sizeClient.cy-sizeTextExtent.cy)/2,str);}/////////////////////////////////////////////////////////////////// //////////// CMdiDemoView printingBOOL CMdiDemoView::OnPreparePrinting(CPrintInfo* pInfo) {// default preparationreturn DoPreparePrinting(pInfo);}void CMdiDemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CMdiDemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////// //////////// CMdiDemoView diagnostics#ifdef _DEBUGvoid CMdiDemoView::AssertValid() const{CView::AssertValid();}void CMdiDemoView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CMdiDemoDoc* CMdiDemoView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMdiD emoDoc)));return (CMdiDemoDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////// //////////// CMdiDemoView message handlers6。
单文档多文档编程详解
2 Doc/View框架的主要成员 框架的主要成员
Doc/View框架虽然可以调用成百上千个 框架虽然可以调用成百上千个 不同的类,但是核心类只有五个: 不同的类,但是核心类只有五个: CWinApp CDocument CView CDocTemplate CFrameWnd
2.1 CWinApp 类
当用户选择了菜单项, 当用户选择了菜单项, 单击了快捷键或工具条 按钮, 按钮,系统就会发送 WM_COMMAND消息。框 消息。 消息 架窗口实际上是大多数 WM_COMMAND消息的接 消息的接 受者, 受者,但WM_COMMAND 消息还可以在视图、 消息还可以在视图、文 档,甚至应用程序类中 被处理。 被处理。
CDocument 的虚拟方法 说明 由 MFC 调用来建立文档 调用来建立文档 建立 由 MFC 调用来打开文档 调用来打开文档 打开 调用来保存 保存文档 由 MFC 调用来 保存 文档 调用来关闭 关闭文档 由 MFC 调用来 关闭 文档 确定观察文档的框架窗口是否被允许关闭 在未撤消文档对象时删除文档数据 释放文件以允许其它应用程序使用 查询文档的修改状态并存储修改的文档 确定文档从它最后一次存储后是否被修订过 设置文档从它最后一次存储后是否被修订过的布尔值 获得视图列表头的位置 获得视图列表的下一个视图
单文档实例;
多文档实例;
1.2 文档/视图结构
利用类向导生成单文档和多文档程序框架时,由它所创建的各个类在 一起工作,构成一个相互关联的结构,称为文档/视图结构; 数据的维护和显示---文档类和视图类负责;
CWinAPP类派生的应用程序对象:应用程序的初始化;负责保持文档、视 图、框架窗口类之间的关系,接收windows消息,并进行调度; 框架窗口:提供应用程序的主窗口,包含最大/最小化按钮、标题栏 和系统菜单; 文档的任务:对数据进行维护和管理; 视图的任务:文档和用户的中介,可以将文档类中的数据读取出来进行显示;
VC++6.0中如何编译运行C语言的多个源文件程序
VC++6.0中如何编译运行C语言的多个源文件程序多个源文件的编译运行在源程序过多的情况下,单个源文件往往难于检查错误,因此在程序设计时,往往是由几个人各自独立编写不同的程序,显然这些程序是不能写在一起进行编译的,这时就需要建立项目工作区来完成几个独立程序的编译,具体方法如下。
打开VC++6.0,选择“file”→“new”打开如图1所示(图1)选择“workespaces”项,并在“workespaces name”项目下输入“file”(可随意)如图2所示(图2)单击“OK”,打开如图3所示(图3)在左侧的“Workespaces”显示了新建立的工作区选择“file”→“new”打开如图9所示,在“Projects”项目下选择“W in32 ConsoleApplication”项,并在“project name”项目下输入工程名称,如“file”,选择“Add to current workespaces”项,如图4所示(图4)单击“OK”,打开如图5所示(图5)选择“An empty project”项,单击“Finish”,打开如图6所示(图6)单击“OK”,打开如图7所示(图7)在左侧的“Workespaces”显示了新建立的工程选择“file files”→“Source”→“new”,打开如图8所示(图8)点击“C++ Source File”,然后到File中输入如file1.c,最后点击OK。
以同样的方式在这个文件下建立两个文件,打开如图17所示(图8)输入源代码1和源代码2,源代码1:#include<stdio.h>int A;int main(){int power(int n);int b=3,c,d,m;printf("enter the number a and its power m:\n");scanf("%d,%d",&A,&m);c=A*b;printf("%d*%d=%d\n",A,b,c);d=power(m);printf("%d**%d=%d\n",A,m,d);return 0;}源代码2:extern A;int power(int n){int i,y=1;for(i=1;i<=n;i++)y*=A;return(y);}(注:此程序完成其他文件外部变量的使用)选择“Build”→“Build file.exe”(或按F7键),打开如图9所示(图9)在下端的输出窗口会有错误和警告的提示,如果没有错误选择“Build”→“Execute file.exe”(或按Ctrl+F5)输入13,3即可出现运行结果,如图10所示(图10)。
vc6 多文件编译方法
vc6 多文件编译方法一、什么是多文件编译多文件编译是指将一个程序拆分成多个源文件进行编译,然后再将编译后的目标文件链接起来生成可执行文件。
这种方法可以提高代码的可读性和维护性,使程序的开发更加灵活和高效。
二、多文件编译的步骤1. 创建工程在VC6中,首先需要创建一个工程,选择“文件”菜单下的“新建”->“项目”->“Win32控制台应用程序”,然后填写工程名称和存放路径,点击“确定”按钮即可创建一个新的工程。
2. 添加源文件在创建好的工程中,可以通过“项目”菜单下的“添加到项目”选项来添加源文件。
选择“添加到项目”后会弹出一个对话框,在对话框中选择要添加的源文件并点击“确定”按钮即可将源文件添加到工程中。
3. 设置编译选项在VC6的工具栏中,点击“项目”->“设置”菜单项,弹出的对话框中选择“链接”选项卡,然后在“项目文件”列表中选择要编译的源文件。
在“设置”对话框中,还可以设置编译器的相关选项,如编译器的优化级别、生成调试信息等。
4. 编译工程在设置好编译选项后,点击工具栏上的“生成”按钮或选择“生成”->“生成解决方案”菜单项来开始编译工程。
编译过程中,VC6会逐个编译源文件,并生成对应的目标文件。
5. 链接目标文件编译完成后,VC6会自动调用链接器将所有的目标文件链接起来生成可执行文件。
链接器会根据代码之间的引用关系来解析符号,并将它们连接在一起。
6. 运行程序链接完成后,可以通过点击工具栏上的“运行”按钮或选择“调试”->“开始执行”菜单项来运行程序。
VC6会自动启动调试器,并执行生成的可执行文件。
三、常见问题及解决方法1. 无法找到源文件在添加源文件时,如果出现“无法找到源文件”的错误提示,可以检查源文件是否在指定的路径下,并确保路径名称的正确性。
2. 编译错误在编译过程中,可能会出现各种编译错误,如语法错误、类型不匹配等。
这时需要仔细检查错误信息,并逐个解决错误。
VC 多文档用户界面设计
if (m_pDoc1 != NULL) //已经打开则激活
{
POSITION pos;
pos =m_pDoc1->GetFirstViewPosition();
CView* pView = m_pDoc1->GetNextView(pos);
pView->GetParentFrame()->ActivateFrame();
2)这里给出的是一个示例代码,实际开发中可以通过参考实现获得自己想要实现的具体应用情况(例如视图类的不同、数量不同,更重要的还有业务逻辑的不同实现等);
3)运行的结果为:
RUNTIME_CLASS(CMISView));
AddDocTemplate(pDocTemplate);*/
改为:(注意将CMultiDocTemplate*去掉,否则你是新建了一个CMultiDocTemplate*的对象)
m_pDocTemplate1 = new CMultiDocTemplate(
多文档界面_Visual Basic 6.0 程序设计_[共4页]
“网站设计”和“游戏开发”。
然后给每个窗体分别编写下面的代码。
Form1窗体代码为Private Sub Form_Load()Combo1.AddItem "男"Combo1.AddItem "女"End SubPrivate Sub Command1_Click()Me.HideForm2.ShowEnd SubPrivate Sub Command2_Click()EndEnd SubForm2窗体代码为Private Sub Command1_Click()Me.HideForm1.ShowEnd SubPrivate Sub Command2_Click()MsgBox "欢迎" + Form1.Text1.Text + "加入", "注册成功"EndEnd Sub7.3.2 多文档界面1.单文档界面与多文档界面在实际应用中,Windows应用程序主要有两种界面:单文档界面(Single Document Interface,SDI)和多文档界面(Multiple Document Interface,MDI)。
单文档界面并不是指只有一个窗体的界面,单文档界面的应用程序可以包含多个窗体,但各个窗体是相互独立的,它们在屏幕上独立显示、最大化或最小化,与其他窗体无关。
单文档界面应用程序在任何时候只能打开一个文档,要打开另一个文档界面,必须先关闭原来打开的文档界面。
前面我们创建的应用程序都属于单文档界面应用程序。
多文档界面是指应用程序由多个窗体界面组成,但这些窗体不是独立的。
其中只有一个窗体被称为MDI父窗体(简称MDI窗体),其他窗体被称为MDI子窗体。
子窗体的活动范围限制在MDI窗体中,不能将其移动到MDI窗体之外,运行时可以同时打开多个文档界面。
如果MDI子窗体有菜单,则当MDI子窗体为活动窗体时,子窗体的菜单将自动取代MDI窗体的菜单。
vb06
6.3
窗体概述
窗体对象是Visual Basic应用程序的基本构造模块,是 应用程序运行时,与用户交互操作的实际窗口。简单的 Visual Basic应用程序只有一个窗体,称为单窗体程序。而 对于复杂的应用程序来说,单一的窗体是不能满足应用程序 的需要的,往往需要多个窗体。
6.3.1
窗体的概念
窗体也称为表单,是一种特定的类,用于定义一个窗 口。在应用程序中,窗体是程序员的“工作台”,使得程序 员能可视化的建立应用程序。窗体就象一个容器一样,几乎 所有的控件都要添加到窗体上。当窗体显示出来时,上面的 控件是可见的,当窗体移动时,控件也随之移动,窗体隐藏 时,控件也都隐藏起来。窗体在磁盘上与“.frm”文件名保 存。
6.4.3
窗体的其他属性
窗体的其他属性主要包括以下几种: 1.KeyPreview属性 2.Left和Top属性 3.LinkMode属性 4.LinkTopic属性 5.MaxButton和MinButton属性 6.MDIChild属性 7.MouseIcon属性 8.MousePointer属性 9.Moveable属性 10.NegotiateMenus属性 11.OLEDropMode属性 12.RightToLeft属性 13.ScaleHeight、ScaleLeft、ScaleTop和ScaleWidth属性 14.ScaleMode属性 15.ShowInTaskbar属性 16.StartUpPosition属性 17.Visible属性 18.WindowState属性 19.Name属性
第6章
Visual Basic 6.0程序界面设计
Visual Basic是可视化编程,所见即所得。Visual Basic 提供了强大的图形界面功能。本章将在介绍Visual Basic应 用程序的用户界面的分类的同时,详细介绍用户界面设计的 基本原则和Windows界面设计准则,并详细介绍构成用户界 面的基本构造模块的窗体。本章内容包括窗体的概念、窗体 的结构,并详细列举了窗体的常用属性、常用事件和常用方 法。
vc++6.0的界面设计与资源编辑器
vc++6.0的界面设计与资源编辑器vc++6.0的界面设计与资源编辑器一、资源与界面:windows95/98将应用程序常用到的一些“数据”归纳定义成可共享的资源,例如vc++6.0中将某些静态的、可归类的和可共享的数据以资源形式处理,主要包括菜单、图标、对话框、位图、快捷键、工具栏、光标、描述信息和字符串表等。
以资源作为线索,增强了编程的逻辑条理,简化了开发过程。
其中还为编辑菜单、对话框、工具栏等资源的程序界面设计提供了直观、可视的设计方法,即程序的界面设计在很大程度上就是对相关资源的编辑处理。
因而熟练掌握资源编辑器,对界面设计及整个应用程序资源的逻辑关系都是非常重要的。
二、资源管理:资源管理包括各种资源的创建和维护,vc++6.0中提供了一整套处理资源的方法,通过workspace 的“resource view”(资源视图)的导航,可以创建资源或激活各种资源相应的资源编辑器以执行可视化编辑。
1.打开应用程序:fileàopen workspace2.浏览应用程序的资源:调入应用程序后,在workspace窗口的“resourceview”中显示应用程序所涉及资源的列表。
如果workspace 窗口未打开,则在“view”下拉菜单中选择“workspace”选项。
accelearator(快捷键)、dialog(对话框)、icon(图标)、menu(菜单)、string table(字符串表)、toolbar(工具栏)、version(描述)。
各资源类中包含有具体资源项,这些资源项组成了应用程序自己的资源,程序员也可添加新的资源或资源项。
3.增加新资源:增加新资源的常用方法是从“insert”下拉菜单中选择“resource”选项,或右击workspace中资源项,在vc++6.0的快捷菜单中,选择“insert”项。
选择后,vc++6.0显示“insert resource”对话框,选择所需资源以增加,同时,并新建一个名为“idb_xxx”的资源项。
在VC++6.0中建立多文件项目的方法
在VC++6.0中建立多文件项目的方法方法一:1. 分别建立若干个C++ Source File(C++源程序文件),每个文件单独编写、存盘。
2. 建立一个“项目文件”。
选择“文件/新建”菜单,在“新建”对话框中,点击“工程”选项卡下的“win32 console application”(WIN32控制台程序),然后输入工程名称ff和位置C:\ABC\ff,单击“确定”按钮,建立一个空工程ff.c,并单击“完成”后,再单击“确定”按钮。
3. 将源文件放到项目文件中。
选择“工程/增加到工程/文件”菜单,在出现的对话框中,同时选中欲加入到工程中的所有C程序源文件,单击“确定”按钮。
4. 编译、连接项目文件。
单击编译按钮、运行按钮即可。
方法二:1.选择“文件/新建”菜单,在“新建”对话框中,点击“文件”选项卡下的“C++ Source File”,然后输入文件名file1.c及位置C:\ABC,点击“确定”按钮,建立file1.c源文件并编译(例如file1.c为如下的示例程序:)/* file1.c */#include <stdio.h>int m=30;extern a;void B(void){int b=20;m=m+a;printf( "Hello! Running B() Now!\n");printf( "a=%d b=%d m=%d in B()\n",a,b,m); return;}void A(void);int main(void){printf( "Hello! Running main() Now!\n");printf( "a=%d m=%d in main()\n",a,m);A();B();printf( "Hello! Return to main() Now!\n");printf( "a=%d m=%d in main()\n",a,m);getch();return 0;}2. 选择“文件/新建”菜单,在“新建”对话框中,点击“文件”选项卡下的“C++ Source File”,然后输入文件名file2.c及位置C:\ABC,并勾选“添加到工程[A]”前的复选框,将file2.c添加到工程file1中,再点击“确定”按钮,建立file2.c源文件并编译(例如file2.c为如下的示例程序:)/*file2.c*/#include <stdio.h>extern m;int a=50;void A(void){int b=10,a=200;m=m+b;printf( "Hello! Running A() Now!\n");printf( "a=%d b=%d m=%d in A()\n",a,b,m); return;}3. 此时,界面如下:即可执行file1.exe得到运行结果。
vc6.0怎么写c语言程序
怎么用vc6.0去写c语言程序我发现很多老师上课还在用tc来叫你们写c语言程序,我们知道tc有很多缺点,第一它不支持鼠标,更为重要的是它不支持复制(ctrl+c)和粘贴(ctrl+v)以及剪切(ctrl+x)等快捷键操作,这是致命的缺点,因为我们到了后面当我们的代码达到100行、1000行、甚至上万行的时候,你就会发现tc是多么的不靠谱,好了,我简单讲讲怎么用vc去写一个c语言程序。
一:建立空的程序:1.新建文件夹,改名为你自己想要的名字,比如:TEST1。
变成2.打开文件夹,新建一个文本文档,把后缀名改成.c文件就行了。
变成:中间会弹出对话框,此时你只要点击“是”就行了。
就会成这样:3.现在有两种打开方式,先介绍第一种:鼠标左键将你建立的“新建文本文档.c”文件拖入你的vc6.0软件即可打开,第二种方法我就不介绍了,因为vc软件跟win7、win8存在兼容性问题,xp系统可以。
你们会这一种方法就行了。
接下来就进入了这个界面:4.在代码编辑区输入代码后,此时你得运行(图标像一个感叹号)是灰色的,只有当你编译以后,它才会变成红色的,当你点击编译后,会出现一系列对话框,此时你不需要管,只点击“是”就行了,有的可能还会出现“与系统不兼容问题”,这些你都先别管,点击“允许程序运行”就行了。
此时,你的灰色的运行突变就会变成红色,就行这样:注意:你的错误提示栏会报告你的错误,你按f4,在代码编辑区就会在你错误的那一栏出现一个箭头,并且在错误提示栏会显示你的错误,当然,这些错误提示都是英文的,所以……你懂的,学英语也是必要的。
比如:刚开始,你们就需要知道这么多吧,到了后来,我有时间会交大家如何去调试,最后,保存(crtl+s),就行了;最后解释一个问题,为什么我刚开始新建一个文件夹,然后再新建一个文本文档,再改后缀名,因为,当你保存后,你会发现,你的程序还有很多其他类型(后缀名不同)的文件,你如果不用文件夹保存,会显得很乱,这是我个人总结的,你们如果觉得不好也可以不采用,直接新建文本文档,再改名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vc++6.0打造单文档界面与多文档界面的编程VC++6中,可以利用MFC向导分别创建单文档和多文档界面的应用程序。
有了这两种类型的应用程序,您就可以实现简单的记事本,写字本和WORD的功能了。
以下介绍一个在文档中输出一段文字,点击菜单项,输入文字内容按OK按钮后可以更改输出的文字。
1.首先,点击MFC向导,选择多文档视图类型,新建一个名为MdiDemo的工程。
2.新建一个对话框。
上面放置一个Static控件和一个Edit控件,按CTRL+W,将Edit控件改成m_Caption.3.新建一个类与对话框对应,如CDlgDemo类。
4.在菜单中,增加一项Demo,并增加菜单项Test.按CTRL+W,并双击后,在消息的上面选择Doc,下面选择Command,双击就产生了对应的事件处理函数。
5.在MdiDemoDoc.cpp类中输入以下:// DlgDemo.cpp : implementation file//#include "stdafx.h"#include "MdiDemo.h"#include "DlgDemo.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CDlgDemo dialogCDlgDemo::CDlgDemo(CWnd* pParent /*=NULL*/): CDialog(CDlgDemo::IDD, pParent){//{{AFX_DATA_INIT(CDlgDemo)m_Caption = _T("");//}}AFX_DATA_INIT}void CDlgDemo::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CDlgDemo)DDX_Text(pDX, IDC_EDIT1, m_Caption);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CDlgDemo, CDialog)//{{AFX_MSG_MAP(CDlgDemo)// NOTE: the ClassWizard will add message map macros here//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CDlgDemo message handlers6.在MdiDemoView.cpp中输入以下内容:// MdiDemoView.cpp : implementation of the CMdiDemoView class//#include "stdafx.h"#include "MdiDemo.h"#include "MdiDemoDoc.h"#include "MdiDemoView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CMdiDemoViewIMPLEMENT_DYNCREATE(CMdiDemoView, CView) BEGIN_MESSAGE_MAP(CMdiDemoView, CView)//{{AFX_MSG_MAP(CMdiDemoView)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMdiDemoView construction/destruction CMdiDemoView::CMdiDemoView(){// TODO: add construction code here}CMdiDemoView::~CMdiDemoView(){}BOOLCMdiDemoView::PreCreateWindow(CREATESTRUCT&a mp; cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CMdiDemoView drawingvoid CMdiDemoView::OnDraw(CDC* pDC){CMdiDemoDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCRect crect;GetClientRect(&crect);CSize sizeClient=crect.Size();CString str=pDoc->strCaption;CSize sizeTextExtent=pDC->GetTextExtent(str);pDC->TextOut((sizeClient.cx-sizeTextExtent.cx)/2,(size Client.cy-sizeTextExtent.cy)/2,str);}/////////////////////////////////////////////////////////////////////////////// CMdiDemoView printingBOOL CMdiDemoView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CMdiDemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CMdiDemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CMdiDemoView diagnostics#ifdef _DEBUGvoid CMdiDemoView::AssertValid() const{CView::AssertValid();}void CMdiDemoView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CMdiDemoDoc* CMdiDemoView::GetDocument() //non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMdiDemoDoc)));return (CMdiDemoDoc*)m_pDocument;}#endif //_DEBUG///////////////////////////////////////////////////////////////////////////// // CMdiDemoView message handlers6。
按“CTRL+F5”即可运行。