关于单文档多视与MFC的初始化过程

单文档多视的实现 多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多。2)通过一个文档关联多个视图,窗口显示整个视图。第二种实现较第一种复杂,这里给出详细的实现方法。 Step 1:使用VC 6.0新建一个Project,命名为:MultiView。除选择单文档属性外,一切使用“默认”方式。于是你可以获得五个类:CMainFrame,CMultiViewApp,CMultiViewDoc,CMultiViewView,和CAboutDlg;

Step 2:新建一个新的视图View,添加一个新的MFC Class(Insert->New Class),基类为CView(或者CView的派生子类,如CEditView等)。类的名字为CAnotherView,这就是新的视图;并为CAnotherView添加GetDocument的实现: CMultiViewDoc* CAnotherView::GetDocument() { return (CMultiViewDoc*)m_pDocument; }

Step 3:在CMultiViewApp添加成员变量记录这两个视图: private: CView* m_pFirstView; CView* m_pAnotherView; 给程序菜单IDR_MAINFRAME添加一个菜单项目“视图”,该菜单项有两个子菜单“视图一”和“视图二”,添加相应函数:(voidCMultiViewApp::OnShowFirstview()和voidCMultiViewApp::OnShowSecondview()); 注意这里将菜单消息的响应都放在app对象里面,而不是放到MainFrame对象中进行。

Step 4:创建新的视图:在BOOLCMultiViewApp::InitInstance()中添加代码: „„. //创建一个新的视图 CView* m_pActiveView = ((CFrameWnd*)m_pMainWnd)->GetActiveView(); m_pFirstView = m_pActiveView;

m_pAnotherView = new CAnotherView();

//文档和视图关联 CDocument* m_pDoc = ((CFrameWnd*)m_pMainWnd)->GetActiveDocument();

CCreateContext context; context.m_pCurrentDoc = m_pDoc;

//创建视图 UINT m_IDFORANOTHERVIEW = AFX_IDW_PANE_FIRST + 1; CRect rect; m_pAnotherView->Create(NULL,NULL,WS_CHILD,rect,m_pMainWnd, m_IDFORANOTHERVIEW,&context); „„

Step 5:现在已经创建了视图,并且都和文档关联起来了。现在要作的就是视图间的转换。在voidCMultiViewApp::OnShowFirstview()中添加实现代码: void CMultiViewApp::OnShowFirstview() { // TODO: Add your command handler code here UINT temp = ::GetWindowLong(m_pAnotherView->m_hWnd, GWL_ID); ::SetWindowLong(m_pAnotherView->m_hWnd, GWL_ID, ::GetWindowLong(m_pFirstView->m_hWnd, GWL_ID)); ::SetWindowLong(m_pFirstView->m_hWnd, GWL_ID, temp);

m_pAnotherView->ShowWindow(SW_HIDE); m_pFirstView->ShowWindow(SW_SHOW);

((CFrameWnd*)m_pMainWnd)->SetActiveView(m_pFirstView); ((CFrameWnd*) m_pMainWnd)->RecalcLayout(); m_pFirstView->Invalidate(); }

在voidCMultiViewApp::OnShowSecondview()中添加实现代码: void CMultiViewApp::OnShowSecondview() { // TODO: Add your command handler code here UINT temp = ::GetWindowLong(m_pAnotherView->m_hWnd, GWL_ID); ::SetWindowLong(m_pAnotherView->m_hWnd, GWL_ID, ::GetWindowLong(m_pFirstView->m_hWnd, GWL_ID)); ::SetWindowLong(m_pFirstView->m_hWnd, GWL_ID, temp);

m_pFirstView->ShowWindow(SW_HIDE); m_pAnotherView->ShowWindow(SW_SHOW);

((CFrameWnd*)m_pMainWnd)->SetActiveView(m_pAnotherView); ((CFrameWnd*) m_pMainWnd)->RecalcLayout(); m_pAnotherView->Invalidate(); }

Step 6:为了演示,这里将不同的视图给予一个标记,在CMultiViewView和CAnotherView的OnDraw方法中分别添加以下代码: pDC->TextOut(400,300,"First View"); pDC->TextOut(400,320,pDoc->GetTitle()); 和 pDC->TextOut(400,300,"Another View"); pDC->TextOut(400,320,pDoc->GetTitle());

至此就大功告成了,但是实现过程中有4点说明: 1) 实现中由于使用到相关的类,因此在必要的地方要include相关的头文件,这里省略;CAnotherView的默认构造函数是Protected的,需要将其改为Public,或者提供一个产生CAnotherView对象的方法(因要创建视图对象); 2) 这里给出的是一个示例代码,实际开发中可以通过参考实现获得自己想要实现的具体应用情况(例如视图类的不同、数量不同,更重要的还有业务逻辑的不同实现等); 3) 本文的示例代码已上传到Blog,可以通过下面的地址获得代码。

MFC程序总体的架构 CWinApp――取代WinMain的地位 。。。。。。。

。。。。。 CFrameWnd――取代WndProc的地位

在MFC里面,似乎应该是在CWnd类里有一个WindowProc这个类,应该就是这个函数来作为窗口回调函数,因为所有的窗口回调函数都继承自CWnd类,CFrame类也是的。 在MFC中,为了让程序更加结构化,更容易理解和维护,利用了两个宏来处理消息映射:DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP,见前面第三章。

程序运行第一步:引爆器――Application Object 从这一节以下,将以此图解释MFC程序的激活,运行与结束,不同小节的图将标示出当时的程序进行状况 程序运行第二步:隐晦不明的WinMain 主要动作: tWinMain调用AfxWinMain,AfxWinMain调用AfxWinInit 在这个过程中, tWinMain的参数hInstance经过AfxWinMain传给AfxWinInit,然后在AfxWinInit中利用传进来的参数对theApp对象进行初始化(利用全局函数AfxGetApp) 在AfxWinInit中除了对theApp对象进行初始化之处,还调用AfxInitThread函数对线程进行初始化。 程序运行第三步:AfxWinInit――AFX内部初始化动作 程序运行第四步:CWinApp::InitApplication 程序运行第五步:CMyWinApp::InitInstance 程序运行第六步:CFramWnd::Create产生主窗口(并先注册窗口类别) 小结: 在MFC中,应用程序窗口的产生,必须经历窗口类的注册-》创建-》显示。 这一系列的动作是通过theApp->InitInstance()函数来组织调用的。PS:即在InitInstance里做了好多的工作,调用了相关的函数,这些函数就有窗口类的注册,窗口的创建和窗口的显示工作。 窗口类的注册动作,MFC给我们提供的接口是各个窗口类的PreCreateWindow()函数, BOOL CStudentInfoView::PreCreateWindow(CREATESTRUCT& cs) 利用这个结构体参数,对窗口的样式进行设定,这个结构体如下: typedef struct tagCREATESTRUCT { LPVOID lpCreateParams; HANDLE hInstance; HMENU hMenu; HWND hwndParent; int cy; int cx; int y; int x; LONG style; LPCSTR lpszName; LPCSTR lpszClass; DWORD dwExStyle; } CREATESTRUCT; 怎么让一个窗口居中显示?? 利用cy,cx参数??

合集下载

Visual C++语言:第11章 单文档多文档

Visual C++语言:第11章 单文档多文档

▪ WriteString
写入字符串
▪ ReadString
读取字符串
▪ ReadClass
读取类信息
▪ WriteClass
写入类信息
▪ Read
读取字节内容
▪ Write
写入字节内容
2020/12/12
CDocument——文档串行化
❖CArchive类的常用成员
▪ operator <<
将基本类型写入流中
当前位置
访问位置
文档
视图
视图
文档
视图
框架
框架
视图
框架
文档
任何位置 应用程序
任何位置 主框架
访问方法 GetFirstViewPosition GetNextView GetDocument
GetParentFrame
GetActiveView
GetActiveDocument
AfxGetApp
AfxGetMainWnd
2020/12/12
CView——的子类
2020/12/12
❖CEditView
▪ 简单的文本编辑器,类似Notepad
❖CScrollView
▪ 支持滚动条的视图
❖CFormView
▪ 窗体视图,支持在上边使用对话框控件
5. Doc/View访问方法
2020/12/12
❖Doc/View结构的几个基本成员经常需要互 相访问,假设某个视图想要获得文档,或 某个框架需要获得活动视图,可以通过下 表提供的方法进行解决。
ON_COMMAND(ID_OPER_SHOW, OnOperShow) //}}AFX_MSG_MAP END_MESSAGE_MAP()

mfc入门单文档MFC应用程序实例-图文

mfc入门单文档MFC应用程序实例-图文

mfc入门单文档MFC应用程序实例-图文14单文档MFC应用程序实例
对话框应用程序使用简洁高教,所以被广泛地使用。

对话框在默认情
况下缺少状态栏、f具栏等界面元素,不能算作是。

完整”的Wwbn应用
程序。

RIUt/Clllr面,可以看作是“标准”的Windown应用程序再面。

1.41技术要点
’MFC的单文档应用程序结构的一大特点是教据和界面分N,在单文
档应用程序中,程序中数据的保存、加藏和处理等功糖由CDocumtI完戚,而数据的显示由cV.州来完成a这种结构又被称为“文彬视田”结构,
在这种结构下.很容器做刊数据和界面的一对多关联。

‘MFC中提供T众多派生于CView的弦生类,每个类都翻IT同的功能,在新建项目时,可以根据蜜际需謇选样不同的根生类。

142实例步骤奉实棚将以CFonnView为例,演示在ViualC++60中新建单文档项目
的鼻体方法。

实例步骤如下所示。

(I)打开ViualC++6.0.单击。

File”/“N州‘菜单。

在弹出对话摧
中选择项目类撼为“MFCAppWiurd(e某e)1.在项目名称文本框中输
A“NffcSdi”,单击“OK-MHE入向导界面。

(2)在向导的Skpl中,选择“Sinlledoeummt“,其余琏项用默认值(参麒1:919)。

单击“Ne某t”按钮进人下一步。

(”向导的Step2.用于设置是否在程序中自动加A对散据库的支持,此步鼻对默认设置不做改动(参照图iIO),直接单击“Ne某r按钮进
AT一步。

MFC视图切换全总结

MFC视图切换全总结

MFC视图切换全总结交流的朋友请加我QQ:451072182我的百度空间:/%BB%B6stephen/home单纯视图之间的切换单文档多视图切换是我在学习MFC中遇到的一个老大难问题,在今天总算是一一破解了。

我觉得视图切换分为三个等级,第一是在未切分窗格的情况下切换视图类;第二是在分割窗格的一个窗格内实行视图切换;第三是在分割窗格和未分割之间的切换和视图切换。

在MFC创建SDI的伊始,MFC默认的视图类是CView,如果CView 满足你的需求,可以直接单击finish,如果你不想让CView成为你的默认视图类,你可以在下图这个地方修改。

如果你忘记了修改默认的视图类这也没关系,我们可以在代码中改变:在App类里面有个函数叫InitInstance(),在这里面有一段代码CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(Cprogram8Doc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CView1)); //这里更改你的默认视图类,注意不要忘记包含头文件哦if (!pDocTemplate)return FALSE;AddDocTemplate(pDocTemplate);说完了默认视图类的更改,我们现在进入主题。

1、首先创建你需要切换的视图类,AddClass进入或者创建一个控件然后AddClass创建控件关联类,后者适用于Form之类的控件。

2、控制之处,比如菜单项单击、单击鼠标什么的,我是使用菜单项来切换窗口的void CMainFrame::OnView1(){// TODO: Add your command handler code hereSwitchToForm(IDD_FORMVIEW1);}void CMainFrame::OnView2(){// TODO: Add your command handler code hereSwitchToForm(IDD_FORMVIEW2);}3、SwitchToForm这个函数主要用于视图切换在这个函数中主要做以下几个动作:1、获得当前视图类指针和需要转换的视图类指针,如果是第一次使用需要New一个,并且与文档类关联;2、改变活动视图;3、显示新视图和隐藏旧视图;4、设置控件ID;5、调整框架视图。

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”。

C 一档多视

C  一档多视

一档多视一设计要求:(1)建立一个多文档的应用项目(项目名称为学生姓名拼音首字母缩写),并将视图类设置为表单类视图。

(2)在该表单中采用编辑框和旋转按钮输入点的横、纵坐标值。

(3)对框架窗口进行切分。

(4)使得左边窗格输入点的坐标值后,右边窗格将在该点处显示一个小方块。

若在右边窗格中任意单击鼠标,则相应的小方块移动到当前鼠标位置处,同时左边编辑框的内容也会随之发生改变。

二实现步骤1、运用MFC应用程序向导新建一个多文档应用程序Ex_chenju。

在向导的第六步中选择视图的基类为CFormView.2、为文档类CEx_chenjuDoc编程:为CEx_chenjuDoc添加自定义数据成员:public:CPoint m_ptRect;在CEx_chenjuDoc构造函数中设置初值:m_ptRect.x=m_ptRect.y=0;用于存放文档数据:坐标位置值。

3、为视图类CEx_chenjuView(基类CFormView)编程:(1)为表单(ResourcesView\Dialog\IDD_EX_chenju_FORM)添加控件,设置控件属性:(2)为CEx_chenjuView建立控件关联变量:(3)为CEx_chenjuView添加自定义数据成员:public:BOOL m_bEditOK;在CEx_chenjuView构造函数中设置初值:m_bEditOK=FALSE;(4)为CEx_chenjuView::OnInitialUpdate()增加代码:void CEx_chenjuView::OnInitialUpdate(){CFormView::OnInitialUpdate();ResizeParentToFit();CEx_chenjuDoc*pDoc=(CEx_chenjuDoc*)GetDocument();m_CoorX=pDoc->m_ptRect.x;m_CoorY=pDoc->m_ptRect.y;m_SpinX.SetRange(0,1024);m_SpinY.SetRange(0,768);UpdateData(FALSE);//编辑框显示坐标位置初值m_bEditOK=TRUE;}(5)为CEx_chenjuView类编辑框IDC_EDIT1,IDC_EDIT2添加EN_CHANGE 消息映射,添加下列代码。

MFC文档与视图深入详解

MFC文档与视图深入详解

1.1 MFC 文档视图结构程序结构总揽当我们使用MFC AppWizard 生成一个MFC 程序,选用所有默认的设置(当然也是Multiple Documents ,本文讨论主要基于Multiple Documents ,对于Single Document 情况仅以简单表述提及,皆因后者和前者很多相似相同之处,但前者更为复杂,并且更加常用。

),假设你的程序名称为 A ,则你会得到CMainFrame 、CChildFrame 、CAboutDlg 、CADoc 、CAView 、CAApp 6 个类(Single Document 仅少一个CChildFrame 类,其余均同)。

这些类的具体含义将在后面给出,这里先要给出一个MFC 支持文档视图结构程序(以下简称App )的主要组成:一个App (对应类CAApp )可以包含多个文档模版(CDocTemplate ),但是MFC AppWizard (无论是SDI 还是MDI )都只是默认生成一个。

但是在实际开发中一个文档模版不够,需要自己手工添加(在后面实际项目例子提供示例)。

这个结构是通过MFC 中CWinApp 的成员变量CDocManager*m_pDocManager 实现的,我们的CAApp 正是继承自MFC 提供的CWinApp 类。

CDocManager 类则拥有一个指针链表CPtrList m_templateList 来维护这些文档模版。

这些文档模版都是在CAApp ::InitInstance ()中通过AddDocTemplate(pDocTemplate) 。

CDocTemplate 拥有3 个成员变量,分别保存着Document 、View 、Frame 的CRuntimeClass 指针,另外持有成员变量m_nIDResource ,用来指定这个Document 显示时候采用的菜单资源。

这 4 份数据都在CAApp ::InitInstance ()中CDocTemplate 的构造函数中指定。

VS2010 VS2008MFC openGL初始化

VS2008和VS2010 OpenGL的MFC初始化(吐血整理)1.建立一个单文档工程XXX2.这时你会看见自动生成了很多的类,08和10版本的还是不一样,但是主要的类还是那么几个,我们主要关注的是XXXView类,首先得保证你的电脑包含了OpenGL工具包,没有的话自己下载个很方便。

查看方法安装路径下vc/include/GL看看有没有GL.h,glu.h,gluax.h,自己最好添加个glut.h.。

3.在stdafx.h头文件中,添加#include”GL/gl.h”, #include”GL/glu.h”,如果有glut.h的话就直接添加一句#include”GL/glut.h”就可以了。

4.在XXXView.h文件中加入所需的成员变量和函数:public:CClientDC *m_pDC;void InitOpengl();BOOL SetupPixelFormat(void);void DrawScene(void);5.在XXXView.cpp文件中,在CXXXView的构造函数中加入:m_pDC=NULL;6.在XXXView.cpp文件中,加入相应的成员函数(直接复制就行):void CXXXView::InitOpengl(){PIXELFORMATDESCRIPTOR pfd;int n;HGLRC hrc;m_pDC=new CClientDC(this);ASSERT(m_pDC != NULL);if(!bSetupPixelFormat())return;n=::GetPixelFormat(m_pDC->GetSafeHdc());::DescribePixelFormat(m_pDC->GetSafeHdc(), n,sizeof(pfd),&pfd);hrc=wglCreateContext(m_pDC->GetSafeHdc());wglMakeCurrent(m_pDC->GetSafeHdc(),hrc);glClearDepth(1.0f);glEnable(GL_DEPTH_TEST);}BOOL CXXXView::SetupPixelFormat(){static PIXELFORMA TDESCRIPTOR pfd ={sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW |PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,PFD_TYPE_RGBA,24,0, 0, 0, 0, 0, 0,0,0,0,0, 0, 0, 0,32,0,0,PFD_MAIN_PLANE,0,0, 0, 0};int pixelformat;if((pixelformat = ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd)) == 0) {MessageBox("ChoosePixelFormat failed");return FALSE;}if(SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd) == FALSE) {MessageBox("SetPixelFormat failed");return FALSE;}return TRUE;}void CXXXView::DrawScene(void){//设置清屏颜色为黑色glClearColor(0.0f,0.0f,0.0f,0.0f);//清除颜色缓冲区和深度缓冲区glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//矩阵堆栈函数,和glPopMatrix()相对应添加你想要话的图形,如:glRectf(-0.5,-0.5,0.5,0.5);//画一个矩形;SwapBuffers(wglGetCurrentDC());//不能省略}7.在XXXView.cpp文件中,在PreCreateWindow函数中加入:cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;//比较重要8.在XXXView.cpp文件中,在OnDraw函数中加入:DrawScene();9.在CXXXView中,建立如下消息的映射函数:WM_CREATE, WM_DESTROY, WM_SIZE, WM_ERASEBKGND,并加入划线的代码,如下所示:int CXXXView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code hereInitOpengl();return 0;}void CXXXView::OnDestroy(){CView::OnDestroy();// TODO: Add your message handler code hereHGLRC hrc;hrc = ::wglGetCurrentContext();::wglMakeCurrent(NULL,NULL);if(hrc)::wglDeleteContext(hrc);if(m_pDC)delete m_pDC;}BOOL CXXXView::OnEraseBkgnd(CDC* pDC){return TRUE;}void CXXXView::OnSize(UINT nType, int cx, int cy){CView::OnSize(nType, cx, cy);// TODO: Add your message handler code hereint w=cx;int h=cy;GLfloat nRange=1.0f;//避免除数为0if(h==0)h=1;//设置视口与窗口匹配glViewport(0,0,w,h);//重新设置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();//建立正交变换下的剪切体if(w<h)glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);elseglOrtho(-nRange*w/h,nRange*w/h,-nRange,nRange,-nRange,nRange);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}需要注意的是08中没有类向导,需要右键你的类添加消息映射,最后祝大家学习愉快。

MFC的运行顺序

很多刚学MFC的人都会被MFC给弄的晕头转向。

以前传统的C语言中的main ()不见了,window sdk api 中的WinMain()函数也不见了,到底用MFC编写的程序是如何开始运行的呢?到底MFC有没有遵从最基本的C++的标准呢?到底MFC的代码运行的顺序又是怎么样的呢?那么多个文件,那么多函数,到底哪一个先运行,哪一个后运行,哪一个调用哪一个,哪一个又被哪一个调用(你看晕了吧?那么多“哪一个”^_^)?这里这么复杂,到底最真是的是怎么一回事呢?我开始学习的时候,也是一头雾水,什么都不明白,但是为了能先学习一些其他的,我囫囵吞枣的看了过去,先学习了CDIALOG和CVIEW的一些用法,并能编出了一个很简单的程序。

前几天,上网的时候,看到好多人都在看《孙鑫vc++讲座》视频教程,好像大家反应还不错,于是,我就去找个地方下载下来看了。

刚好今天看到了MFC 的运行机制,里面讲到了MFC的运行顺序。

孙同学在视频中是利用实例,利用断点,然后不断的进行调试运行,以实事(实事胜于雄辩啊!!!)告诉我们,MFC 是如何开始运行的。

下面,我就根据我看到的教程,和网上一些前辈整理出来的材料在整理:重点:MFC运行机制执行顺序各个函数用途以及调用顺序孙同学在视频中反复说明的是:MFC的程序和C语言的程序,从执行原理上说,是完全一致的。

抓住这一点,那么对于理解MFC程序的运行机制也就相对于简单了。

C中的main函数就相当于MFC中的WinMain函数。

感兴趣的可以利用VC的断点设置自己跟踪下面讲述的各个函数,就明白它的执行顺序了。

一、C语言程序执行步骤在C语言中,大约的步骤如下:1,全局变量内存分配例子如下:#include <iostream.h>int a=88;main(){cout<<a<<endl;}如果我们在main前设置断点,我们就会发现,在进入main之前,a就已经存在了。

mfc工作过程

MFC有些老了,但还不失为一种很好的编程工具,尽管他的类很复杂,这篇博客主要根据孙鑫的讲解总结一些到底MFC是将Win32的那套创建窗口的机制放到了那里了。

新建一个单文档的MFC应用程序,你会发现一开始就有5个类,假设你的工程叫做Test那么这五个类就是CTestApp CTestDoc CTestView CMainFram CTestDlg,首相声明那个CTestDlg是一个关于对话框也就是和你编程几乎没有太大关系,此处不做研究,其次关于CTestDoc,本篇博客也不做详细探究,你只需要知道他是一个关于数据的类就行了,ms这样做就是要将数据与显示相分离,以便逻辑更加清晰下面就剩下CTestApp CMainFram 和CTestView了,CMainFram和CTestView 同宗,他们都是从CWnd派生而来的,在每个工程中用CTestView的GetParent()就能够拿到他的父窗口,你会发现那个就是CMainFram。

每个程序只能有一个类从CWinApp派生出来,本程序就是CTestApp,这个类只能有一个实例,表示本程序,同时CTestApp负责将CTestDoc,CTestView,CMainFram结合到一起,好了了解到这里我们开始进入正题了在你的单文档MFC应用程序中是找不到WinMain()的,原因是ms将WinMain()通过连接器连接而来的WinMain(),但ms提供了MFC的源代码,到你的vc安装目录VC98/MFC/SRC里面存的就是MFC的源代码了,WinMain()的定义就放在了APPMODUL.cpp中(通过一个宏_tWinMain ()给出的),你要是感兴趣可以尽情的查看代码,这个比较枯燥,但对研究操作系统的人来说,这个很有趣~MFC的窗口时如何创建的呢?1、首先你会发现程序创建了一个全局的CTestApp对象theApp,由于它是全局对象,程序会先于WinMain()而执行到这句。

MFC使用教程范文

MFC使用教程范文MFC(Microsoft Foundation Classes)是微软开发的一种用于Windows操作系统的C++类库,可用于开发图形用户界面(GUI)应用程序。

MFC使用教程将指导您如何使用MFC库来创建基于Windows的应用程序。

第一部分:基本概念和环境设置(200字)在开始使用MFC之前,您需要了解一些基本概念和环境设置。

首先,MFC是一个C++类库,包含了各种用于构建Windows应用程序的类和函数。

它提供了处理窗口、控件、消息等等的功能。

其次,您需要一个C++编译器和开发环境,如Visual Studio。

确保您已经安装了Visual Studio以及所需的MFC组件。

第二部分:创建一个MFC应用程序(300字)步骤1:打开Visual Studio并选择创建“新项目”。

步骤2:选择MFC应用程序向导,并输入项目名称和位置。

步骤3:选择应用程序类型(单文档/多文档/对话框)。

步骤4:在向导的下一步中,选择所需的特性和选项。

步骤5:在应用程序向导中完成剩余设置,并单击“完成”来创建项目。

步骤6:Visual Studio将自动生成与所选应用程序类型相对应的源代码和资源文件。

第三部分:了解主要概念(300字)在了解如何使用MFC库之前,您需要了解一些主要概念。

首先是对话框,它是一个用于显示和与用户交互的窗口。

其次是框架窗口,用于包含和管理窗口的集合。

控件是用于接收和显示用户输入的界面元素,如按钮、文本框等。

消息是在窗口间传递的信息,用于处理用户输入和应用程序的操作。

第四部分:使用MFC库创建控件和处理消息(400字)步骤1:在资源视图中选择对应的对话框或窗口。

步骤2:在工具箱中选择所需的控件,并将其拖放到对话框或窗口上。

步骤3:在类视图中选择对应的对话框或窗口类。

步骤4:在类向导中选择“消息映射”选项,并添加所需的消息处理函数。

步骤5:在消息处理函数中编写代码来处理控件的事件或用户输入。

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