文档库 最新最全的文档下载
当前位置:文档库 › 深入浅出mfc读书笔记

深入浅出mfc读书笔记

深入浅出mfc读书笔记
深入浅出mfc读书笔记

关于单文档多视与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 个子菜单“视图一”和“视图二”,添加相应函数: (void CMultiViewApp::OnShowFirstview()和 void CMultiViewApp::OnShowSecondview()); 注意这里将菜单消息的响应都放在app对象里面,而不是放到MainFrame对象中进行。 Step 4:创建新的视图:在BOOL CMultiViewApp::InitInstance()中添加

Step 5:现在已经创建了视图,并且都和文档关联起来了。现在要作的就是视图间的转换。在void CMultiViewApp::OnShowFirstview()中添加实现代

mfc资料

你创建的是一个对话框程序,所以只有CMyApp 和CMyDlg 两个类。 但如果创建的是个单文档或者多文档程序。那么就有5个类。 程序是按顺序执行的,虽然都被封装成了类对象,看起来模块话,其实还是按顺序执行的,APP这个对象那个先于dlg构建。所以很多需要初始化的东西直接在App的成员initInstance 中编写。dlg中编写的基本都是一些与对话框相关的逻辑。 CMyApp是主线程类。他的InitInstance函数中会用CMyDlg构造一个对象,产生主对话框,CMyDlg是对话框类的一个派生类。两个类功能不同。 MFC的东西很复杂,不是三言两语可以说清楚的,可以参考下深入浅出mfc等书。CMyApp负责程序主框架的工作,可以理解为WinMain的封装。 CMyDlg是主对话框了,负责界面显示,消息循环等。 ------解决方案-------------------- CMyApp派生于CWinApp类,CMyDlg派生于CDialog类 程序运行时先执行CMyApp的InitInstance()函数 在InitInstance()中会有这样的代码 CMyDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); 一个最基本的单文档视图的MFC程序,包含CxxApp、CxxDoc、CMainFrame、CxxView和CAboutDlg五个类。 它们在程序开始运行时被创建的顺序是:CxxApp 、CxxDoc 、CMainFrame 、CxxView 、CAboutDlg 。

C**App()定义了窗体加载之前需要做的预处理。比如一个加密的软件,打 开后提示用户输入密码。这个事件的处理程序就要写在C**App()的 InitInstance(中。 CMainFrame()包含了对工具栏、状态栏、窗口的定义。 C**View包含了最主要的处理功能,如菜单操作、快捷键、用户交互操作等。 CAboutDlg定义了ABOUT对话框。 其中,前四个都是在程序主窗口出现之前被创建的,CAboutDlg是在“关于”对话框弹出 时被创建的 1CAboutDlg //这个是关于对话框里面是构造和析构2CMainFrame //主框架`是在窗口生成之前准备工作全在这吗 ?3CTestApp//这个是什么`initlnstance()在这里也是初始化什 么对象 ? 4CTestDoc//这是文档`是管理哪些文档`对初学者来说很少用 呐 ?5CTestView视图`这个常用 OnDraw我了解一些`我想知道`是不是默认就调 用一次 ? 还有个问题啊`我想加个音乐`虽然加成功了`但是`我一直不明白加在哪个函数里 `运行就有音乐?看过孙鑫的教程后来忘了`各位高手各抒已见,互相学习 LZ需要系统地学习一下。 CTestApp是基于WinApp的,WinApp封装了程序的主入口WinMain,WinMain就和c语言的main函数地位一样,是Win32程序的入口。在MFC的封装中,一个程序启动,Windows调用WinMain,这个WinMain函数现在由MFC事先写好藏好了,你不能也不需要修改,在这个预定义的WinMain里面会调用CWinApp的InitInstrance函数。你仔细看你CTestApp::InitInstrance函数,在这里一个CMainFrame的对象被创建,文档模板被创建,主窗口通过ShowWindow(SW_SHOW)被显示出来。 CMainFrame是个框架,是你整个应用程序的主窗口,他负责管理应用程序的菜单,工具栏,状态栏等。中间的区域,成为客户区,由View类来管理,View类也是一个窗口,他是MainFrame的子窗口。OnDraw函数负责绘制客户区的内容,该函数会被多次调用,他可以被你自己调用,比如你调用View类的UpdateWindow,或者在Document类中调用UpdateAllViews等等,MFC自动会调用OnDraw。他还会被Windows调用,Windows在需要刷新窗口的时候发送给窗口WM_PAINT消息,MFC事先已经预定义了,在响应WM_PAINT消息的时候会调用OnDraw。何时Windows会发送WM_PAINT呢,比如窗口从最小化还原,比如窗口被用户改变了 大小等等。这部分内容最好看看Windows GDI,Windows GDI是Windows操作系统整个可视化界面的基础。

MFC如何在文档(CXXXDoc)类或框架(CMainFrame)类中获得视类(CMyView

MFC如何在文档(CXXXDoc)类或框架(CMainFrame)类中获得视类(CMyView)指针 在文档类中只要使用(多文档的,单文档的更简单一点儿) POSITION pos=this->GetFirstViewPosition();//要写在文档类中,在其他类中把this换成文档指针就可以了 while(pos) { CView *pView=this->GetNextView(pos); } 而在框架类中只要选取得文档对象,然后再使用上面的代码 以下是从一个对象得到另一个对象有方面(摘自MFC深入浅出) 从一个对象得到另一个对象的方法 本对象要得到的对象使用的成员函数 CDocument对象视列表 GetFirstViewPosition,GetNextView 文档模板 GetDocTemplate CView 对象文档对象 GetDocument 边框窗口 GetParentFrame CMDIChildWnd或 CFrameWnd 对象活动视 GetActiveView 活动视的文档 GetActiveDocument CMDIFrameWnd对象活动文档边框窗口 MDIGetActive 在框架类中使用 GetActiveView(); 在文档类中(CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView(); MFC中怎么在CMainFrame下获得View类的指针 使用GetActiveView()函数 MFC中普通类如何获取view类的指针? 在普通类(Generic class)中怎么得到view类的指针?我试过这样: CMainFrame *p=(CMainFrame*)AfxGetMainWnd(); CView *pv=p->GetActiveView(); 按照你的用法应该就是可以的! 是不是在这样用时,View还没有创建完成啊,所以pv才是空的。 CMainFrame *m_pfm = (CMainFrame*)AfxGetApp()->m_pMainWnd; ...*m_pView = (...*)m_pfm->GetActiveView(); 少一句:AfxGetApp() CMainFrame *p=(CMainFrame*)AfxGetApp()->m_pMainWnd;

c面向对象程序设计MFC简单计算器实验报告

计算机与信息工程学院 《程序设计基础》课程设计报告 题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东 学生学号:2011508154 专业班级:电子信息工程(1)班 指导教师:高攀

1 课程设计的题目 编写一个能实现简单功能的计算器 2 题目要求 1. 有一个计算器图形。 2. 能实现加、减、乘、除及乘方的运算。 3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色 例如:输入数字1 时,在计算器图形上的1键变为红色。 4. 屏幕、图形颜色、形状自定 3 总体设计 3.1 总体框架 图1 系统框架

3.2 系统功能说明 在VC++6.0中绘制计算器界面,各控件的设置 对0~9控件设定相应的ID和其他属性: 图2 “1”控件设置 对“+、-、*、\”控件设定相应的ID和其他属性: 图2 “+”控件设置 对其它控件设定相应的ID和其他属性: 图3 其它控件设置

主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。 4 程序详细设计 4.1系统主调模块 图5 程序流程图

4.2各模块详细设计 4.2.1 建立的变量,控件的命名,对应的消息处理函数对应表 double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。 double m_Dis; //Edit控件上需要显示的数字 BOOL point_flag; //小数点表示位,判定是否是小数,是小数为1,不是小数为0。 double numfirst; //保存计算过程中的前一个数字, double numsecond;//保存计算过程中的第二个数字 char op;//记录当前的计算符号,可以为’+’,’-’,’*’,’/’,’=’,’c’,’n’ 变量初始化: poz=1; m_Dis = 0.0; numfirst=0; numsecond=0; op=0;

MFC程序的启动过程与相关函数的执行顺序

MFC程序的启动过程与相关函数的执行顺序 1、创建Application object对象theApp 程序一开始生产一个(且只有一个)Application object对象theApp,也即一个CWinApp 对象,这个全局对象一产生,便执行其构造函数,因为并没有定义CMyWinApp构造函数,所以即执行CWinApp类的构造函数。该函数定义于APPCORE.CPP第75行,你可以自己搜出来啃一啃,因此,CWinApp之中的成员变量将因为theApp这个全局对象的诞生而获得配置与初值。 2、WinMain登场 用SDK编程序时,程序的入口点是WinMain函数,而在MFC程序里我们并没有看到WinMain函数,哦!~ 原来她是被隐藏在MFC代码里面了。当theApp配置完成后,WinMain 登场,慢!细看程序,并没连到WinMain函数的代码啊!这个我也不知道,MFC早已准备好并由链接器直接加到应用程序代码中了,原来她在APPMODUL.CPP里面,好,我们就认为当theApp配置完成后,程序就转到APPMODUL.CPP来了。那执行什么呢?看看下面从APPMODUL.CPP摘出来的代码: extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // call shared/exported WinMain return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow); } _tWinMain函数的“_t”是为了支持Unicode而准备的一个宏。 _tWinMain函数返回值是AfxWinMain函数的返回值,AfxWinMain函数定义于WINMAIN.CPP第21行,稍加整理,去芜存菁,就可以看到这个“程序进入点”主要做些什么事: int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { int nReturnCode = -1; CWinApp* pApp = AfxGetApp(); AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow); pApp->InitApplication(); pApp->InitInstance() nReturnCode = pApp->Run();

MFC聊天系统设计报告

客户/服务器模式下的网络聊天系统的设计与实现 摘要: 计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,我们这一次的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。在课程设计中,系统开发平台为Windows7,程序设计设计语言采用Visual C++。 关键字:聊天软件;网络通讯;MFC;课程设计;Visual C++ 第一章引言 近年来,随着全球信息化技术的发展,聊天软件也得到了快速的发展,而且规模越来越大,功能也越来越强。即时聊天软件使人们的沟通突破了时空和级别的界限,使陌生人之间的沟通突破了环境界限,使自我与外界的沟通突破心理界限。聊天软件的广泛应用,已经不仅仅是一种技术工具,它成为了人们交流的一种重要方式,并构建起一种新的社会关系。目前的聊天软件—般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟。本文在VC开发环境下设计和实现了一种聊天软件,可以实现在线用户的即时聊天和文件传输功能。 第二章设计依据及框图 2.1 设计平台 本课程采用Visual C++6.0平台编程。MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。应用程序向导通过创建和继承MFC库的基本类以及派生出的新类生成一个应用软件。MFC类是一组预先定义的C++。应用程序向导通过创建和继承MFC库的基本类以及派生出的新类生成一个应用

mfc各种类

1 必备基础知识概述 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 )的主要组成: u 一个App (对应类CAApp )可以包含多个文档模版(CDocTemplate ),但是MFC AppWizard (无论是SDI 还是MDI )都只是默认生成一个。但是在实际开发中一个文档模版不够,需要自己手工添加(在后面实际项目例子提供示例)。这个结构是通过MFC 中CWinApp 的成员变量CDocManager* m_pDocManager 实现的,我们的CAApp 正是继承自MFC 提供的 CWinApp 类。 u CDocManager 类则拥有一个指针链表CPtrList m_templateList 来维护这些文档模版。这些文档模版都是在CAApp ::InitInstance ()中通过 AddDocTemplate(pDocTemplate) 。 u CDocTemplate 拥有3 个成员变量,分别保存着Document 、View 、Frame 的CRuntimeClass 指针,另外持有成员变量m_nIDResource ,用来指定这个Document 显示时候采用的菜单资源。这 4 份数据都在 CAApp ::InitInstance ()中CDocTemplate 的构造函数中指定。在Document 中拥有一个回指CDocTemplate 的指针 (m_pDocTemplate )。 u 一个文档可以有多个视图,由Document 中成员变量CPtrList m_ViewList 维护。 u CFrameWnd 拥有一个成员变量CView* m_pActiveView 指向当前活动的View 。

MFC课程设计报告-贪吃蛇

MFC课程设计报告 MFC实现贪食蛇小游戏 1.需求分析,系统功能 贪吃蛇游戏需求分析 贪吃蛇游戏作为一款经典小游戏,版本多样,娱乐性也很高,适合在闲暇时放松心神。并且可在多个平台上实现,程序简单易懂,非常适合MFC初学者学习制作。 贪吃蛇游戏功能介绍 一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇向上接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。并且可以在游戏开始前自由选择游戏难度,游戏过程中可暂停游戏,并有积分系统,且积分每满一定值,蛇的运行速度会逐步增加。 2. 分工情况 为在设计过程中实现小组成员能力最大化,进行了以下分工: 1、张施展:负责前期系统需求分析,系统结构设计,图标设计,界面美化调整工作,以及 课程设计报告的撰写。 2、张清扬:负责主要程序的编写工作,菜单的设计及代码编写工作。 3、资料收集,程序调试共同进行。 3. 程序及系统结构设计 贪吃蛇程序设计思路 1、方案讨论 贪吃蛇游戏作为一款经典的休闲类小游戏,深受同学喜爱,因此我们将贪吃蛇作为此次MFC课程设计题目。在最初的方案中,我们倾向于单文档(SDI)的形式设计,但最初尝试都因缺少一些文件等情况而失败。考虑到windows中自带小游戏大多采用对话框形式,为能更好的与同学们的使用习惯相一致,最终决定使用对话框(Dialogue)的形式。 2、数据结构

在数据结构的选取,我们选择了链表,链表具有用多少空间就开多少空间的优点,使程序执行更稳定,高效。 游戏控制模块框 函数成员

贪吃蛇程序整体间调用关系

MFC程序结构分析

主题: MFC深入浅出 1.MFC深入浅出 MFC概述 2. 3. 1.MFC是一个编程框架 2. 3.MFC (Microsoft Foundation Class Library) 中的各种类结 合起来构成了一个应用程序框架,它的目的就是让程序员在此基础 上来建立Windows下的应用程序,这是一种相对SDK来说更为简单 的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了 用户接口的标准实现方法,程序员所要做的就是通过预定义的接口 把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++ 提供了相应的工具来完成这个工作:AppWizard可以用来生成初步 的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用 户接口;ClassWizard用来协助添加代码到框架文件;最后,编译, 则通过类库实现了应用程序特定的逻辑。 4. 5. 6. 7. 1.封装 2. 3.构成MFC框架的是MFC类库。MFC类库是C++类库。这 些类或者封装了Win32应用程序编程接口,或者封装了应用 程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO 数据访问的功能,等等,分述如下。 4. 5.(1)对Win32应用程序编程接口的封装 6. 7.用一个C++ Object来包装一个Windows Object。例 如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就 是前者的窗口句柄。 8. 9.(2)对应用程序概念的封装

Visual C++6.0 Windows应用程序开发

Visual C++6.0 Windows应用程序开发 1.Visual C++ 6.0的特点 Visual C++ 6.0开发环境是由在Win32环境下运行的一套集成开发工具所组成,包括文本编辑器(Text Editor),资源编辑器(Resource Editor),项目建立工具(Project build Facilities),优化编辑器(Optimizing Compiler),增量连接器(Incremental Linker), 源代码浏览器(Source code Browser),集成调试器(Integrated Debugger)等。 在Visual C++ 6.0中可以使用各种向导(Wizards),MFC(Microsoft Foundation Class Library)和活动模板库(Active Template Library或ATL)来开发Windows应用程序。向导实质上是一种计算机辅助程序设计,用于帮助用户自动生成各种不同类型应用程序风格的基本框架。 2.Visual C++ Windows应用程序的开发 本节将介绍使用MFC(Microsoft Foundation Class Library)来开发Windows应用程序。MFC是各种类结合起来构成的一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,从而大大减轻了开发者的工作量。下面将简单介绍基于MFC的应用程序开发。 2.1新建一个工程 2.1.1 启动Visual C++6.0。 [开始]---[程序]---[Microsoft Visual Studio6.0]—[Microsoft Visual C++ 6.0]. 2.1.2 从[文件](File)菜单中选[新建](New)。 在“新建”对话框中,单击[工程](Projects)页面标签,选择“MFC AppWizard(exe)”。在“位置”(Location)栏中,选择一个保存位置,在“工程名字”(Project Name)栏中,输入该项目的名称,这里输入“Win32App”,选择[OK]按钮,如下图所示:

深入浅出MFC学习笔记(第三章MFC六大关键技术之仿真类型识别,动态创建)

第三章:MFC六大关键技术之仿真:类型识别 深入理解MFC的内部运行原理,是本次学习《深入浅出MFC》的主要目的。要模仿的六大技术包括: 1:MFC程序的初始化过程。 2:RTTI(Runtime type identification)运行时类型识别。 3:Dynamic creation 动态创建 4:Persistence永久保存 5:消息映射 6:消息传递。 RTTI(运行时类型识别) IsKindOf能够侦测某个对象是否属于某种类。即判断某一对象所属的类是否是父类或当前类; 要达到动态类型识别的能力,必须在构建类继承体系时记录必要的信息,这被称为类型型录表。MFC以链表的方式建立了此表。 类型型录表的每个元素为CRuntimeClass类型,其定义为: 1class CRuntimeClass 2 3{ 4 5public: 6 7LPCSTR m_lpszClassName;//对象所属类名 8 9 Int m_nObjectSize;//对象大小 10 11UINT m_wSchema;//模式号 12

13 CObject *(PASCAL*m_pfnCreateObject)();//构建函数抽象类为NULL 14 15 CRuntimeClass *pBaseClasss;//基类CRuntimeClass对象指针。 16 17 Static CRuntimeClass *pFirstClass;//链表头指针。 18 19 CRuntimeClass *m_pNextClass;//下一指针。 20 21}; MFC使用此类作为每个类的成员变量。使用宏定义为每个类定义了自己的CRuntimeClass成员变量。 DECLAR_DYNAMIC和IMPLENMENT_DYNAMIC宏 使用这两个宏将CRuntimeClass对象不知不觉放到类之中。 DECLARE_DYNMIC宏定义如下: 22#define DELCARE_DYNMIC ( class_name ) \ 23 24public:\ 25 26static CRuntimeClass class##class_name \ 27 28virtual CRuntimeClass *GetRuntimeClass()const; ##用来告诉编译器把两个字符串连接起来。 如果使用这个宏:DELCARE_DYNMIC(CView); 那么预编译器将生成下列代码: 29public: 30 31static CRuntimeClass classCView;

“深入浅出MFC(第2版)(附光盘)”

“深入浅出MFC(第2版)(附光盘)”的全部评论 1.现在有很多人说C/C++已经没落了,在不久的将来终将退化到现在汇编语言(Assembly)的地位,基于C++的MFC自然也不能避免被淘汰的命运。我不否认C++/MFC面对最新的基于动态语言的Web应用显得是多么的力不从心,也不否认大红大紫的Java、Perl、C#等后辈抢夺了MFC无数的风头,但是无论是出于对曾经在Win32历史上扮演过至关重要的角色的颇具神秘色彩的MFC的仰慕,还是出于希望深入理解编程语言与操作系统的交互关系的目的,抑或是为了能更有效的编写Win32应用程序,研究MFC内部运行机理都是必要的。 其实随着现在嵌入式开发的增长,C/C++的使用比例又有了一定程度的增加,这在今年的TIOBE排行榜上也可以得到印证。而且有很多企业以前的系统都采用的是MFC,有大量的代码需要维护, 所以阅读侯俊杰先生所著的《深入浅出MFC第二版》(英文名Dissecting MFC 2nd)之旅。一个多月断断续续的研读,在合上此书最后一页的时候,我有了一种豁然开朗的感觉。以前也看过一本介绍MFC程序设计的书籍,不过多是以例子为主,尽管有能力编写图形界面了,不过却是知其然不知其所以然——对于通过VC向导生成的代码有好多不明所以的地方,所幸MFC的使用者只需要按部就班地修改指定的函数体就行了,其余的交给IDE(Integrated Development Environment 集成开发环境)好了——此所谓第一种层次吧。 不过VC++相比其它的RAD(Rapid Application Development 快速应用程序开发)工具(如VB)却是有着本质的不同。在VC++中,虽然使用者可以同VB一样通过IDE完成大部分的工作,但是VC++并不掩饰反应程序运行机理的代码;而在VB中程序员能看到的只有自己添加的代码。很难说那种方式一定最好吧,毕竟各有各的用户群。VB针对入门级的程序员,以简单快速的开发方式吸引大家上手;VC++则面向系统级的程序员,提供高率的编译代码以及访问底层系统属性的能力。透过VC++暴露给程序员的代码,侯俊杰先生引领读者将MFC的各项重要机制一一“剖膛破肚”。令我大开眼界的是MFC的框架竟然能在编译器不提供RTTI(运行时类型信息)支持的情况下,完成了该框架所必须的RTTI功能。MFC将Macro(宏、巨集)的功能简直发挥到了极致。尽管相较于Java、C#等面向对象领域的后起之秀来说,MFC的宏确实显得有些笨拙和缺乏可读性,但是在当时的环境之下,通过宏来实现却不得不说是一种优雅。 剖析MFC让我领略到一个应用程序框架的结构,能被成为框架而不是仅仅是类库的东西,关键在于类与类之间绝不是简单独立的关系。在框架中,类和类必须 通力协作才能完成所需的功能。也就是说,我们在使用框架的时候绝对可以像使用类库一样随心所欲——这是当然的咯,要得到框架的服务,自然要遵循人家的游戏规则。这就是很多习惯了字符环境下编程的C程序员过渡到 MFC框架下一时间难以适应的原因。我不是那种在理解了原理之后就忘记当初初试MFC的痛苦经历的人,也许正是通过不断的挫折和积累,让我在阅读《深入浅出MFC》时不断能从以前的实践中找到书中所述要点的印证,不时地得到新的理解和启示,同时也鼓励我继续地把这本书好好的研读下去。 如果必须要为C程序员做一个关于应用程序框架的恰当的比喻的话,我想可以把这个框架理解成main函数中传入命令行参数的机制:为了从命令行中获取信息,你需要定义argc, argv 两个参数,OS会自动帮你填入值;同样的道理,为了捕捉鼠标事件、按钮的点击事件并设置

MFC简单计算器

信息科学与技术学院 《程序设计基础》课程设计报告 题目名称:60.编写一个能实现简单功能的计算器学生姓名:李海东 学生学号:2011508154 专业班级:电子信息工程(1)班 指导教师:高攀

1

1 课程设计的题目 编写一个能实现简单功能的计算器 2 题目要求 1. 有一个计算器图形。 2. 能实现加、减、乘、除及乘方的运算。 3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色 例如:输入数字1 时,在计算器图形上的1键变为红色。 4. 屏幕、图形颜色、形状自定 3 总体设计 3.1 总体框架 图1 系统框架 开始 结束 键入第一个按钮 键入第二个按钮 显 示 结 果 加 法 减 法 乘 法 除 法 乘 方 清 零

3.2 系统功能说明 在VC++6.0中绘制计算器界面,各控件的设置 对0~9控件设定相应的ID和其他属性: 图2 “1”控件设置 对“+、-、*、\”控件设定相应的ID和其他属性: 图2 “+”控件设置 对其它控件设定相应的ID和其他属性: 图3 其它控件设置 1

2 主要使用到Layout 菜单中的Align 功能对各个按钮进行对其,使界面更加整洁。拖出的控件有上面的一个Edit 控件用于显示数字,Button 控件用于处理鼠标的消息。 4 程序详细设计 4.1系统主调模块 图5 程序流程图 实现文件.cpp 显示计算器界面 开始执行 工程全局对象 资源文件.rc 模块定义文件.def 头文件.h 执行_twinmain() Afxmain() 创建窗口 实现窗口类注册 Set window V oid clc::onpaint() V oid cal::onCE() 点击鼠标发出消息 V oid clce::onmouse() 等待消息处理 V oid clc::onMum0() V oid clc::onAdd() 文本框中显示结果 程序运行结

编程入门教程

编程入门教程 编程入门教程由勤快学基础教程https://www.wendangku.net/doc/6618436175.html,梳理的一本面向程序开发入门初学者的编程入门教程,是一个涵盖了游戏、PLC、VB、数控、JAVA、APP、Matlab、C语言、Shell、IOS、Android安卓等手机和PC编程的入门教程。 1.编程入门教程 1.1.游戏编程入门 游戏编程入门适用于任何对C++语言有基本了解的读者阅读,适宜作为读者进入游戏开发领域的技术入门学习用书。 游戏编程入门介绍如何设计和构建自己的电脑游戏。游戏编程入门不是泛泛地介绍编程理论,而是引导读者开发一个“即插即用”的游戏引擎,可以增强和重用这个游戏引擎以开发各种游戏。书中包括了7个完整游戏的详尽解释以及示例代码,使读者准备好开始自己的游戏项目开发。如果读者喜爱玩游戏,那么只需在学习了如何开发它们之后,就可以玩上自己开发的游戏了。 光盘内容:Bloodshed Dev-C++开发环境;在游戏编程入门中开发的示例和游戏的完整源代码和可执行程序文件;C++语言和Windows编程的入门指导。 1.2.plc编程入门 可编程序控制器,英文称Programmable Controller,简称PC。但由于PC容易和个人计算机(Personal Computer)混淆,故人们仍习惯地用PLC作为可编程序控制器的缩写。它是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用可编程序的存储器,用以在其内部存储执行逻辑运算、顺序控制、定时/计数和算术运算等操作指令,并通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。PLC 是微机技术与传统的继电接触控制技术相结合的产物,它克服了继电接触控制系统中的机械触点的接线复杂、可靠性低、功耗高、通用性和灵活性差的缺点,充分利用了微处理器的优点,又照顾到现场电气操作维修人员的技能与习惯,特别是PLC的程序编制,不需要专门的计算机编程语言知识,而是采用了一套以继电器梯形图为基础的简单指令形式,使用户程序编制形象、直观、方便易学;调试与查错也都很方便。用户在购到所需的PLC后,只需按说明书的提示,做少量的接线和简易的用户程序编制工作,就可灵活方便地将PLC应用于生产实践。 1.3.电脑编程入门 编辑程序让电脑执行的过程就叫编程很多软件都可以编程具有代表性的计算机语言有Java,BASIC C,C++,VB,VF,SQL,网页编程JSP,ASP,PHP,软件是eclipse,Microsoft Visual

MFC初始化机制

C**App theApp; //这个全局变量就是代表一个程序,并且它是在WinMain函数执行之前就创建了.然后执行其构造函数 //但是这个类是C**App::public CWinApp的,所以要先执行其父类的构造函数. CWinApp::CWinApp() { ...... AFX_MODULE_STATE *pModuleState = AfxGetModuleState(); pModuleState->m_pCurrentWinApp = this; ...... } //由于这个构造函数被派生类C**App继承过来了,所以这个this就是theApp,然后还会执行一些相关的信息 //然后就是WinMain函数开始执行了. int AFXAPI AfxWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) { CWinThread *pThread = AfxGetThread(); CWinApp *pApp = AfxGetApp(); if( pApp != NULL && !pApp->InitApplication() ) goto InitFailure; if( !pThread->InitInstance() ) { if( pThread->m_pMainWnd != NULL ) { TRACE0("......"); pThread->m_pMainWnd->DestroyWindow(); } nReturnCode = pThread->ExitInstance(); goto InitFailure; } nReturCode = pThread->Run(); //Run()函数就是开始执行消息循环的函数. } //WinMain函数的主要作用就是来调用InitApplication,InitInstance,Run三个函数. CWinThread *AFXAPI AfxGetThread() { AFX_MODULE_THREAD_STATE *pState = AfxGetModuleThreadState(); CWinThread *pThread = pState->m_pCurrentWinThread; if( pThread == NULL ) { pThread = AfxGetApp();

vc数据类型详解

VC++常用数据类型及其操作详解 -------西安邮电学院计算机系 徐兆元() 2004/08/03 目录 一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ●CString 与BSTR 型转换 ●V ARIANT 型转化成CString 型 2.3 BSTR、_bstr_t与CComBSTR 2.4 V ARIANT 、_variant_t 与COleVariant 附录CString及字符串转及操作详解 参考书籍:CSDN,<> 一.VC常用数据类型列表

说明: (1)-------表示省略 (2)1Byte=8Bit, 字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节, 64位中1字=8字节.不要搞混这些概念. 二.常用数据类型转化及操作 2.1 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里) (1)将数学类型转换为字符串可以用以下一些函数: 举例: _CRTIMP char * __cdecl _itoa(int, char *, int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制 如以下程序: int iTyep=3;

char *szChar; itoa(iType,szChar,2); cout<

深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建)

软件英才网软件行业驰名招聘网站第三章:MFC六大关键技术之仿真:类型识别 深入理解MFC的内部运行原理,是本次学习《深入浅出MFC》的主要目的。要模仿的六大技术包括: 1:MFC程序的初始化过程。 2:RTTI(Runtime type identification)运行时类型识别。 3:Dynamic creation 动态创建 4:Persistence永久保存 5:消息映射 6:消息传递。 RTTI(运行时类型识别) IsKindOf能够侦测某个对象是否属于某种类。即判断某一对象所属的类是否是父类或当前类; 要达到动态类型识别的能力,必须在构建类继承体系时记录必要的信息,这被称为类型型录表。MFC以链表的方式建立了此表。 类型型录表的每个元素为CRuntimeClass类型,其定义为: 1class CRuntimeClass 2 3{ 4 5public: 6 7LPCSTR m_lpszClassName;//对象所属类名 8 9 Int m_nObjectSize;//对象大小 10

软件英才网软件行业驰名招聘网站11UINT m_wSchema;//模式号 12 13 CObject *(PASCAL*m_pfnCreateObject)();//构建函数抽象类为NULL 14 15 CRuntimeClass *pBaseClasss;//基类CRuntimeClass对象指针。 16 17 Static CRuntimeClass *pFirstClass;//链表头指针。 18 19 CRuntimeClass *m_pNextClass;//下一指针。 20 21}; MFC使用此类作为每个类的成员变量。使用宏定义为每个类定义了自己的CRuntimeClass成员变量。 DECLAR_DYNAMIC和IMPLENMENT_DYNAMIC宏 使用这两个宏将CRuntimeClass对象不知不觉放到类之中。 DECLARE_DYNMIC宏定义如下: 22#define DELCARE_DYNMIC ( class_name ) \ 23 24public:\ 25 26static CRuntimeClass class##class_name \ 27 28virtual CRuntimeClass *GetRuntimeClass()const; ##用来告诉编译器把两个字符串连接起来。 如果使用这个宏:DELCARE_DYNMIC(CView); 那么预编译器将生成下列代码:

相关文档
相关文档 最新文档