C++ Windows对象和MFC对象的区别
请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?

请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?https:///is/RSrpgsX/?=请问目前做windows桌面应用程序https:///is/RSrbCFq/?=请问目前做windows桌面应用程序qt好些吧,C#涉及微软.net体积巨大。
qt就几个dll,打个安装包都容易些。
还有就是qt跨平台,小到ARM版,大到Windows,linux电脑都可以跑。
MFC微软自己都不玩了,难用,bug多。
其实提问的人把顺序都排好了,反过来就是在win下开发选择的顺序。
mfc比较古老,基本只是winapi的一层很薄封装,用起来挺累的。
除非是维护古老的mfc程序,比如你维护腾讯的qq, 用mfc应当几乎是必须的,其他情况并不推荐。
qt方案是个重量级选择,因为qt很庞大,几乎覆盖了桌面所有领域,ui只是其中一个小部分。
但qt ui组件并不是属于原生方案,类似现在的flutter的方式,那些控件几乎都是自己渲染出来的,模仿了特定平台风格罢了。
快速建模和概念演示用qt的qml很不错,另外qt用于商业领域并不是免费的,做产品需要还是考虑一下它的重量和价钱。
c#的winforms是ms的原生UI方案。
根红苗正并且易用轻量,没有跨平台需求和不想折腾的话,用来做win桌面程序是最轻松和放心的方案。
值得一提就是如果应用中有很多需要展示web页面,或者嵌入了页面而不需要原生UI,用nodejs的方案会更方便,vscode用的就是electron,它其实就是内嵌了一个chrome浏览器,引出了一套js api 罢了。
而微信的电脑版用的是和electron类似的框架叫nwjs。
大部分跨平台方案因为都不是原生UI,体验上多少会差一些,比如操作不方便,压力大时反应慢,吃内存,包巨大等等就我个人来说,大部分时间都在mac下工作,即使偶尔开发win 桌面小应用,一般也是用mingw编译成exe/dll, 在Mac上用wine做业务逻辑测试。
mfc 知识点总结

mfc 知识点总结MFC库的基本组成包括以下几个部分:1. CObject类:是所有MFC类的基类,提供了对象的基本功能,包括内存管理、类型信息、对象的打印和序列化等。
2. CWnd类:是窗口类的基类,封装了Windows窗口的创建、显示、消息处理等功能。
3. CFrameWnd类:是框架窗口类,派生自CWnd类,封装了应用程序的主窗口,提供了菜单、工具栏、状态栏等UI组件。
4. CDocument类和CView类:分别是文档类和视图类,用于管理应用程序中的文档和视图。
文档类负责文档的打开、保存、关闭等操作,视图类负责文档内容的显示和交互。
5. CWinApp类:是应用程序类的基类,封装了应用程序的初始化、消息循环、资源管理等功能。
MFC库提供了丰富的类和函数,用于处理Windows应用程序的各个方面,下面将对MFC的一些重要知识点进行总结。
1. 消息处理在MFC应用程序中,窗口的消息处理是至关重要的。
MFC提供了消息映射机制来进行消息处理。
通过DECLARE_MESSAGE_MAP宏和BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 宏,在类中声明消息处理函数并将消息与处理函数进行映射。
例如:```cpp// 声明消息处理函数afx_msg void OnMouseMove(UINT nFlags, CPoint point);// 映射消息到处理函数BEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()```2. 对话框对话框是Windows应用程序中常用的界面元素,用于与用户进行交互。
MFC提供了CDialog类和CDialogEx类来封装对话框。
开发者可以使用资源编辑器创建对话框模板,然后通过类向导生成对话框类。
对话框类中可以处理控件的事件,并通过DoModal函数或Create函数来显示对话框。
MFC原理结构说明

MFC原理结构说明MFC(Microsoft Foundation Classes)是一种在Windows平台上开发图形用户界面(GUI)的框架。
MFC提供了一组类、函数和宏,用于简化Windows应用程序开发过程。
本文将对MFC的原理和结构进行详细说明。
一、MFC的原理1. 类与对象:MFC使用面向对象的编程模型,所有的窗口、控件、消息处理程序等都是通过类来定义和创建的。
每个MFC应用程序都包含一个CWinApp类的对象,这个对象是整个应用程序的入口点。
2. 消息映射机制:在MFC中,消息是Windows事件的一种表示。
MFC使用消息映射机制来处理这些消息。
消息映射机制是程序员在类中定义的一种技术,它将特定消息与对应的消息处理函数关联起来。
当收到消息时,MFC会自动调用相应的消息处理函数进行处理。
3. 消息与事件:在MFC中,消息是Windows事件的抽象表示,而事件是用户界面中的交互行为。
MFC提供了一系列预定义的消息类型,如鼠标点击、按键、窗口关闭等,程序员只需要在类中覆盖对应的消息处理函数,就可以处理这些消息。
4. 窗口类和控件类:在MFC中,窗口类和控件类是界面元素的基础。
MFC提供了一组窗口类(如CWnd、CFrameWnd)和控件类(如CButton、CEdit),程序员可以通过继承这些类来创建自定义的窗口和控件。
5. 文档视图模型:MFC中引入了文档视图模型(Document-View Model)的概念,用于实现应用程序的数据和界面的分离。
文档类(CDocument)管理应用程序的数据,视图类(CView)用于显示数据,而框架窗口类(CFrameWnd)则用于协调文档和视图之间的交互。
二、MFC的结构1. 应用程序类(CWinApp):应用程序类是MFC应用程序的入口点,它派生自CWinApp类。
应用程序类负责初始化应用程序的环境,包括注册窗口类、创建主窗口、加载并运行消息循环等。
MFC类库的基本类

MFC类库是一个层次结构,主要有CObject类、应用程序类、可视对象类、绘图和打印类、通用类、数据库类、Internet和网络类、OLE类。
(1)CObject类CObject类是MFC的抽象基类,MFC中的大多数类是从CObject类派生出来的。
它是MFC 中多数类和用户自定义的根类,该类为程序员提供了希望融入所编写程序的许多公共操作,包括对象的建立和删除、串行化支持、对象诊断输出、运行时信息以及集合类的兼容等。
CObject类的声明在Afx.h中。
(2)应用程序结构类该类主要用于构造框架应用程序的结构,提供了多数应用程序公用的功能.编写程序的任务是填充框架,添加应用程序专有的功能。
1.应用程序和线程支持类CWinThread类是所有线程的基类,窗口应用程序类CWinApp类就是从该类中派生来的。
每个应用程序有且只有一个应用程序对象,在运行程序中该对象和其他对象相互协调,该对象从CWinApp中派生出来。
该类封装了初始化、运行、终止应用程序的代码。
2.命令相关类CCmdTarget类是CObject的子类,它是MFC所有具有消息映射属性的基类。
消息映射规定了当一对象接收到消息命令时,应调用哪个函数对该消息进行处理。
程序员很少需要从CCmdTarget类中直接派生出新类,往往都是从它的子类中派生出新类。
如窗口类(CWnd)、应用程序类(CWinApp)、文档模板类(CDocTemplate)、视类(CView)及框架窗口类(CFrameWnd)等。
3.文档类文档对象由文档对象模板创建,用于管理应用程序的数据。
视图对象表示一个窗口的客户区,用于显示文档数据并允许读者与之交互。
有关文档/视结构的类如下:①CDocTemplate类:文档模板的基类。
文档模板用于协调文档、视图和框架窗口的创建。
②CSingleDocTemplate类:单文档界面(SDI)的文档模板。
③CMultiDocTemplate类:多文档界面(MDI)的文档模板。
MFC各类库详解

1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.封装构成MFC框架的是MFC类库。
MFC类库是C++类库。
这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。
(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。
例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。
MFC把许多类似的处理封装起来,替程序员完成这些工作。
另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。
文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。
(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。
MFC与.NET及调用WinForm

Windows 窗体/MFC 编程差异
命令
MFC 有命令的概念。菜单栏、工具栏和上下文菜单都可以调用相同的命令, 例如,“剪切”和“复制”。在 Windows 窗体中,命令是特定 UI 元素(如 菜单项)上的紧绑定事件;因此,必须将所有命令事件显式挂钩。在 Windows 窗体中也可以用单个处理程序处理多个事件。有关更多信息,请参 见将多个事件连接到 Windows 窗体中的单个事件处理程序。
创建 MFC 宿主应用程序
创建新 MFC 应用程序项目。
从“文件”菜单中,选择“新建”,然后选择“项目”。在“Visual C++”文件夹中,选 择“MFC 应用程序”图标。 在“名称”框中,输入 MFC01。将解决方案的设置更改为“添入解决方案”。单击“确 定”。将出现“MFC 应用程序向导”。 在“MFC 应用程序向导”中,选择“应用程序类型”。选择“基于对话框”。接受保留 默认设置并单击“完成”。这将创建带有 MFC 对话框的 MFC 应用程序。
配置项目。
在“解决方案资源管理器”中,右键单击 MFC01 项目节点,并从上下文菜单中选择“属 性”。将出现“属性页”对话框。 在“属性页”对话框中的“配置属性”树控件中,选择“常规”,然后在“项目默认值” 部分中,将“公共语言运行库支持”设置为“公共语言运行库支持 (/clr)”。单击“确定”。
创建一个字符与窗体控件绑定
添加到 BOOL CMFC01Dlg::OnInitDialog() m_MyControl.GetControl()->textBox1->Text = "hello"; 双击“确定”按钮 void CMFC01Dlg::OnBnClickedOk() { AfxMessageBox(CString(m_MyControl.GetControl()->textBox1->Text)); OnOK(); }
各种编程语言的区别及联系

java:分三大平台java se <j2se>,java ee<j2ee>,java me<j2me>java se是java ee和java me的基础java ee是目前位置企业级开发平台中最牛的java me是用来开发移动嵌入式程序的,例如手机游戏java 的优点是非常适合用于开发大型企业级项目,我们曾为网通公司开发过的上千万级的项目,用的后台程序就是java ee。
java的主要领域还有开源技术,那要学的东西就太多了比如<Spring,Ibatis,DWR,Hibernate,Tapestry等>缺点是要学的技术太多,二是在底层开发中不行C:经久不衰的语言主要应用在嵌入式编程,硬件驱动程序设计中说白了是计算机底层的编程设计优点是可以嵌入汇编,可以直接与硬件打交道,做底层开发缺点是在企业级开发中,几乎无用武之地我朋友是做这个的,在XX这种小地方,年薪也能达到10万以上与北京的java程序员收入差不多在北京的话,年薪20万不是大问题。
c++:我非常钦慕的语言,又AT&T的贝尔实验室研发主要开发工具是微软的Visual C++和Borload的BCB〔Borload C++ Builder优点在于含有大量的库,如MFC,可直接调用windows库函数干很多事情其中的消息处理机制令我感觉尤为经典缺点是,要想精通真不容易主要领域一是做桌面程序,像QQ,迅雷这种桌面软件领域二是做游戏后台开发,大部分游戏〔包括魔兽等后台语言就是使用C++精通的话,收入和C程序员差不多vc :刚说过了,vc全名是〔Microsoft Visual C++是微软研发的一种开发C++的开发工具〔IDEvc++:同vc注意c++是语言,vc++是工具,是一门使用c++语言的工具,记清楚,以后不要问这样肤浅的话。
以上几种,对比一下学java,学的不仅仅是技术,而是一种思想架构项目的思想所以java是培养架构师,培养System Designer,Project Manager的c语言和c++只能培养技术专家,资深程序员vb:曾经很流行的一种桌面程序开发技术微软研发的〔Visual Basic是一种工具,用的语言是BasicBasic是比尔盖兹发家致富的一大工具主要用来做桌面程序,C/S系统后来因为Delphi的冲击,被强占一部分市场现在有了.NET,基本上VB被淘汰是时间问题顺带一提.NET.NET : Microsoft Visual .NET最新出了2005版〔2007出的微软用来抗衡Java的新产品主要市场是企业级开发,和SUN的java ee竞争尤为劲烈在企业级开发里,基本上是java ee和.net平分秋色,其他的靠边站在C/S B/S里表色都还算不错用的语言有Basic c++不过,目前在.NET平台里最流行的还是C#语言的开发 winform,技术都是使用c#其他我认为比较好的语言Ruby:我非常欣赏的语言Ruby On Rails,我们当前正在用这个技术做项目,算是新的尝试感觉将来会取代java的地位flex :互联网客户端程序开发利器,非常好用delphi:曾红极一时的语言,跟VB一样现在不知怎样,因为我没有用过XML:不管学什么技术,只要不是底层开发,则XML一定要学,不会XML就别说自己会编程数据库:首推Oracle,再推还是Oracle,做企业级开发,互联网开发都必须学的东西。
mfc2019 类库参考手册

mfc2019 类库参考手册MFC 2019 类库参考手册一、概述MFC(Microsoft Foundation Class)是微软公司为了简化Windows 应用程序开发而开发的类库。
本手册将详细介绍MFC 2019类库的各个模块,包括类的定义、成员函数、属性和示例等内容,为开发人员提供全面且准确的参考。
二、基础类1. CObject类CObject类是MFC类库的基类,所有MFC类都从该类派生。
本节将介绍CObject类的成员函数、构造函数和析构函数。
2. CWnd类CWnd类封装了Windows窗口的操作。
本节将介绍CWnd类的常用成员函数,如Create、ShowWindow和SendMessage等。
3. CWinApp类CWinApp类是一个应用程序对象类,每个MFC应用程序都必须拥有一个CWinApp类的派生类。
本节将介绍CWinApp类的初始化、消息循环和资源管理等功能。
三、窗口和控件类1. CFrameWnd类CFrameWnd类是MFC应用程序的主框架窗口类,它提供了标题栏、菜单、工具栏和状态栏等功能。
本节将介绍CFrameWnd类的创建和布局等操作。
2. CDialog类CDialog类是MFC应用程序中常用的对话框类,用于创建模态或非模态对话框。
本节将介绍CDialog类的创建和消息处理等方法。
3. CButton类CButton类封装了Windows中的按钮控件,提供了按钮的创建、属性设置和消息处理等功能。
本节将介绍CButton类的常用成员函数,如Create、SetCheck和EnableWindow等。
4. CEdit类CEdit类封装了Windows中的编辑框控件,可用于接受用户的输入和显示文本内容。
本节将介绍CEdit类的创建、文本操作和消息处理等方法。
四、绘图和界面类1. CDC类CDC类提供了对设备上下文的封装,用于进行绘图和界面操作。
本节将介绍CDC类的绘图函数,如LineTo、Rectangle和TextOut等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++ Windows对象和MFC对象的区别
windows对象并不是我们平时所说的“面向对象”程序设计中的“类的对象”,而是一种windows资源实体,如画笔、字体等,
如果想要去使用这些windows对象我们需要用句柄来标识它们。
(好比在共产主义社会,句柄就像车钥匙,windows资源实体就是国家的大车库,按需去取,那些车只有配上你的车钥匙才能用)
而MFC对象则是真正的“面向对象”思想中的“类的对象”(必须用构造函数去创建)。
在windows编程中,除了普通的“类的对象”外,用得最多的“C++类的对象”应该是MFC对象了(如果你是用MFC编程的话),
MFC对象是指“封装了windows对象的C++对象”(也就是MFC对象中有一个控制window对象的控制器,那么控制器想工作就得和一个window对象链接起来,这样就能控制器就能控制这个对象了)。
就拿CWnd类来说,我们定义一个CWnd类的对象myWnd后,我们不能直接对它进行显示移动等操作(相当于我们还不能使用它),为什么呢?
因为我们还没有给它封装一个相应的windows对象(注意:CWnd类有一个成员变量HWND m_hWnd ),所以我们要调用成员函数Create()。
而这个Create()的功能就是建立一个windows窗口类实例(它也是windows对象的一种,同样我们也是用句柄来标识它,这里我们用HWND类型句柄)并把这个窗口实例的句柄链到CWnd类的对象的成员变量m_hWnd上)。
当然,这里之所以用Create()这一个函数就能实现的功能,在用API函数来实现就比较麻烦,但可以让我们更清楚地了解这一过程:
CWnd myWnd; //定义一个窗口类(CWnd)的对象
HWND hWnd; //定义窗口句柄hwnd
hwnd=CreateWindows(……);//调用API函数CreateWindows(……)建立一个windows窗口类实例,返回的是一个句柄,并把这个句柄赋给hWnd句柄。
myWnd.Attach(hwnd); //将窗口实例的句柄链到CWnd对象myWnd上。
……
Destrory Window(hwnd);
正为为很多人不知道其中的细节,所以在学习MFC Windows编程的时候,总是想不
通为什么创建了一个MFC类的对象还要调用那么多初始化之类的函数,才能调用其它功能函数。
而我们在平时创建一个C++对象之后总是能直接调用它的成员函数。
所谓Windows对象是Win32下用句柄表示的Windows操作系统对象;
所谓MFC对象就是C++对象,是一个C++类的实例.
一个MFC窗口对象是一个C++ CWnd类(或派生类)的实例,是程序直接创建的。
在程序执行中它随着窗口类构造函数的调用而生成,随着析构函数的调用而消失。
而Windows窗口则是Windows系统的一个内部数据结构的实例,由一个“窗口句柄”标识,Windows系统创建它并给它分配系统资源。
Windows窗口在MFC窗口对象创建之后,由CWnd类的Create成员函数创建,“窗
口句柄”保存在MFC窗口对象的m_hWnd成员变量中。
Windows窗口可以被一个程序销毁,也可以被用户的动作销毁。
MFC窗口的创建和windwos窗口的创建是有区别的,
MFC Object通过构造函数由程序直接创建;
Windows Object由相应的SDK函数创建。
MFC中,使用这些MFC 对象,一般分两步:
1、创建一个MFC 对象(在STACK中创建或者在HEAP中创建),这时MFC 对象的句柄实例变量为空也就是此时它不是一个有效的句柄。
2、调用MFC 对象的成员函数创建相应的Windows 对象,MFC的句柄变量
存储一个有效句柄(这个句柄控制着Windows 对象)。
当然,可以在MFC 对象的构造函数中创建相应的Windows对象(给MFC对象的句柄变量实例化),
MFC的GDI类就是如此实现的,但从实质上讲,MFC 对象的创建和Windows 对象的创建是两回事。
无论是控制windows窗口的属性还是它的状态,两者基本上没有什么不同,SetWindowText(...),SetIcon(...),SetMenu(...),只不过window 对象多了一个
句柄的参数罢了。