技术标签: Windows-MFC mfc
MFC(全称:Microsoft Foundation Classes),微软基础类库。他封装了Windows应用程序的各种API以及相关机制的c++类库。
(1)开发效率高
(2)程序执行效率高,相对C#
(3)迁移性差(仅支持Windows)相对QT
(1)afx.h 将其他MFC头文件包含在内
(2)afxwin.h 包含了各种MFC窗口类,包含了afx.h和windows.h
(3)afxext.h 包含了扩展窗口类的支持,如:工具栏和状态栏
(1)MFC控制台程序:可以调用MFC的控制台程序
(2)MFC库程序
MFC静态库
MFC动态库
MFC扩展库:扩展库只能被MFC应用程序调用
(3)MFC窗口程序
单文档视图架构程序
多文档视图架构程序
对话框应用程序
(1)创建
(2)介绍
双冒号开头函数为win32的API函数,如:
::GetModuleHandle(NULL);
以Afx开头函数为MFC库的全局函数,如:
AfxWinInit(hModule, NULL, ::GetCommandLine()
MFC静态库
(1)创建
MFC动态库
(1)创建
MFC扩展库
(1)创建
(2)说明
扩展库只能被MFC应用调用,而且该库使用动态的MFC库
单文档框架程序
(1)创建
(2)说明
参与架构的类:
应用程序类:负责程序流程
class CMFCSdlApp : public CWinApp
框架窗口类:负责程序主框架
class CMainFrame : public CFrameWnd
视图类:负责窗户口显示
class CMFCSdlView : public CView
文档类:负责数据管理数据
class CMFCSdlDoc : public CDocument
多文档框架程序
(1)创建
(2)说明
参与架构的类:
应用程序类:负责程序流程
class CMFCMdiApp : public CWinApp
多文档主框架窗口类
class CMainFrame : public CMDIFrameWnd
多文档子框架窗口类
class CChildFrame : public CMDIChildWnd
视图窗口类:显示数据
class CMFCMdiView : public CView
文档类:数据管理
class CMFCMdiDoc : public CDocument
对话框应用程序
(1)创建
(2)说明
参数框架类:
应用程序类:管理流程
class CMFCDlgApp : public CWinApp
对话框窗口类
class CMFCDlgDlg : public CDialogEx
(1)CObject类
MFC类绝大部分的父类,提供了MFC类库中的一只些基本机制
对运行时类信息的支持
对动态创建的支持
对序列化的支持
(2)CWinApp类 应用程序类,封装了应用程序,线程等信息
(3)CDocument类 文档类,管理数据
(4)Frame Windows 框架窗口类,封装了窗口程序组成的各种框架窗口
(5)CSplitterWnd 用来完成拆分窗口的类
(6)Control Bars 控件条(工具栏)类
(7)Dialog Boxes 对话框类,封装了各种对话框
(8)View 视图类,封装了各种显示窗口
(9)Control 控件类,封装了各种常用的控件
(10)Exceptions 异常处理类,封装了中常用的各种异常
(11)File 文件类,各种文件的I/O操作
(12)绘图类,包括CDC类和CGdiObject类
(13)数据集合类,CArray/Clist/CMap,封装了相应的数据结构管理
(14)非Cobject类的子列
CPoint,CTime,CString
Win32程序使用MFC,即可以创建一个MFC应用程序
// MFCBase.cpp
#include <afxwin.h>
//框架窗口类
class CMyFrameWnd : public CFrameWnd
{
};
//应用程序类
class CMyWinApp : public CWinApp
{
public:
CMyWinApp()
{
}
virtual BOOL InitInstance();
};
//初始化函数:InitInstance
//退出释放函数:ExitInstance
BOOL CMyWinApp::InitInstance()
{
CMyFrameWnd* pFrame = new CMyFrameWnd;
pFrame->Create(NULL, "MFCBase");
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}
//应用程序类对象,MFC程序入口
CMyWinApp theApp;
(1)程序启动流程
构造theApp对象,掉调用父类CWinApp的构造函数
将theApp对象的地址保存到线程状态信息中
将theApp对象的地址保存到模块状态信息中
进入WinMain函数,调用AfxWinMain函数(打断点,通过调用堆栈进入)
AFX_MODULE_STATE aaa;//当前程序模块状态信息
AFX_MODULE_THREAD_STATE bbb; //当前程序线程状态信息
CWinApp::CWinApp()//构造全局对象CMyWinApp theApp
{
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
//获取全局变量&aaa
AFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread;
//获取全局变量&bbb
pThreadState->m_pCurrentWinThread = this;//将&theApp保存到bbb的一个成员中
AfxGetThread()
{
AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();//获取&bbb
CWinThread* pThread = pState->m_pCurrentWinThread;
return pThread;//返回的为&theApp
}
pModuleState->m_pCurrentWinApp = this;//将&theApp保存到aaa的一个成员中
AfxGetApp()
{
return AfxGetModuleState()->m_pCurrentWinApp;//返回&theApp
}
}
WinMain(...)//程序流程是不是theApp对象指导向哪走
{
AfxWinMain(...)
{
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();//这两代码都是获取&theApp
pApp->InitApplication();//利用theApp对象调用应用程序类成员虚函数 初始化
pThread->InitInstance();//利用theApp对象调用应用程序类成员虚函数 创建并显示窗口
pThread->Run()//利用theApp对象调用应用程序类成员虚函数 消息循环
{
for (;;)
{
while(没有消息时)
OnIdle(..);//利用theApp对象调用应用程序类成员虚函数 空闲处理
do{
if(GetMessage抓到WM_QUIT)
return ExitInstance();
//程序结束前,利用theApp对象调用应用程序类成员虚函数 善后处理。
}while(...)
}
}
}
}
文章浏览阅读256次。本文由 @小刘先森 原创,转载请注明出处。使用PL/pgSQL也有比较久的时间了,写几篇从入门开始学习的文章,方便小伙伴们学习。PL/pgSQL从入门到放弃(1)-入门PL/pgSQL从入门到放弃(2)-变量定义与数据类型PL/pgSQL从入门到放弃(3)-函数PL/pgSQL从入门到放弃(4)-控制结构PL/pgSQL从入门到放弃(5)-游标声明变量上一篇介绍到,PL/pgSQL是块结构的语言。..._plsql实数
文章浏览阅读115次。c++ - Warning C4251 when building a DLL that exports a class containing an ATL::CString member - Stack Overflow_warning c4251
文章浏览阅读1.8k次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达本文转载自:机器之心1980 年,福岛邦彦首次使用卷积神经网络实现了模式识别,他被认为是真正的卷积神经网络发明者。近日,..._卷积 彦
文章浏览阅读167次。C语言 预处理指令和宏定义_c#宏定义和预处理指令
文章浏览阅读2.4w次,点赞2次,收藏18次。问题描述 在客户局点为接入层设备S5700-52P-LI-AC做预配置,配置完成后客户要求修改维护账号huawei的密码为该局点专用密码。修改前AAA下配置如下: aaa authentication-scheme default authorization-scheme default accountin..._华为s1730s交换机重置密码失败怎么办
文章浏览阅读1.7k次。今天聊一聊这支火遍国内外的老蛙24mm F14 2X Macro Probe视频作者:苏科大物理实验(bilibili)以下为图文版,看视频不方便的朋友可以先看看图文!细长的结构,24mm的视角,两倍的微距,老蛙探针式微距镜头可以呈现独特的视觉体验。细长的镜头结构由三部分组成,物镜组、接力镜头组和微距放大镜头组。被拍摄物体经过三组镜头三次成像,最终呈现在相机的感光元件上。第一部分,物镜组..._探针镜头原理
文章浏览阅读43次。第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的改进:根据最新的JDK1.7对全书内容进行了全面的升级和补充;增加了大量处理各种常见JVM问题的技巧和最佳实践;增加了若干与生产环境相结合的实战案例;对第1版中的错误和不足之处的修正等等。第2版不...
文章浏览阅读905次,点赞18次,收藏13次。脏读,就是读到了其他会话还没有提交的修改。下面用例子说明:可以看到,会话 2 修改了 id 为 222 的用户,在还没提交或回滚事务之前,会话 1 就读到了这些改动。脏读的本质就是,还没结束的写操作被读操作分割了。所以,为了解决脏读,就必须让写操作不可被读操作分割(当然,也不能被其他写操作分割),即保证所谓的原子性。不可重复读,就是在同一个事务中,多次读相同的记录但读到了不同的结果。
文章浏览阅读3.9k次。1.下载最新的eclipse javaee版本,下载地址为:http://www.eclipse.org/downloads/,这里注意一定要选择javaee版本,2.Tomcat下载,链接为:http://tomcat.apache.org/3.下载eclipse tomcat插件,下载地址为:http://download.csdn.net/detail/longsheng_eclipse javaee 编译 发布
文章浏览阅读341次,点赞8次,收藏6次。
文章浏览阅读214次。团簇是由多个分子或原子聚集在一起的微观结构,研究团簇的全局最优结构(即能量最低)对于发现新型材料的结构和性能具有重要意义。传统的理论研究方法存在计算时间长、计算效果差等问题,而机器学习作为一个极具前景的多学科交叉领域,能够有效提高模型学习与计算的效率。因此本文针对三维团簇的能量预测和结构寻优问题,采用了多种机器学习方法进行研究。最后,我们对模型进行了灵敏度分析不断改变学习因子的数值,发现模型预测出的能量值波动幅度较低,具有较强的稳定性,证明了建立模型的可靠性、有效性及鲁棒性,
文章浏览阅读676次,点赞8次,收藏10次。学习网站:https://www.runoob.com/html/html-tutorial.html。