当前位置: 首页 > news >正文

沈阳模板建站哪家好ui培训学费一般多少

沈阳模板建站哪家好,ui培训学费一般多少,青岛app软件开发,有关做有机肥的企业网站MFC程序开发所谓是非常简单#xff0c;但是对于我们逆向人员来说#xff0c;如果想要逆向MFC程序#xff0c;那么我们就必须了解它背后的机制#xff0c;这样我们才能够清晰地逆向出MFC程序#xff0c;今天这篇文章就来带领大家了解MFC的第一大机制#xff1a;程序启动机…MFC程序开发所谓是非常简单但是对于我们逆向人员来说如果想要逆向MFC程序那么我们就必须了解它背后的机制这样我们才能够清晰地逆向出MFC程序今天这篇文章就来带领大家了解MFC的第一大机制程序启动机制 首先我们创建一个单文档架构程序我们来观察一下 这里我创建的项目名称为MFCApplication1 我们发现一共有三个类这里有一些是MFC自动为我们写好的类类名称通常为项目名称继承了MFC库中的一些类我们只看MFC库中的类我们发现大致三个类 CFrame类这个类是框架窗口类封装了框架窗口的操作 CWinApp类这个类是应用程序类封装了流程的操作 CDocument类这个类是文档类封装了数据的处理例如存储转换等 CView类这个类是视图类封装了视图窗口的操作 我们主要讲解的是CFrame类和CWinApp类 这里我创建好的项目我们先来看看部分源代码 CMFCApplication1.h // MFCApplication1.h: MFCApplication1 应用程序的主头文件 // #pragma once#ifndef __AFXWIN_H__#error include pch.h before including this file for PCH #endif#include resource.h // 主符号// CMFCApplication1App: // 有关此类的实现请参阅 MFCApplication1.cpp //class CMFCApplication1App : public CWinApp { public:CMFCApplication1App() noexcept;// 重写 public:virtual BOOL InitInstance();virtual int ExitInstance();// 实现afx_msg void OnAppAbout();DECLARE_MESSAGE_MAP() };extern CMFCApplication1App theApp; MianFrm.h // MainFrm.h: CMainFrame 类的接口 //#pragma onceclass CMainFrame : public CFrameWnd {protected: // 仅从序列化创建CMainFrame() noexcept;DECLARE_DYNCREATE(CMainFrame)// 特性 public:// 操作 public:// 重写 public:virtual BOOL PreCreateWindow(CREATESTRUCT cs);// 实现 public:virtual ~CMainFrame(); #ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext dc) const; #endifprotected: // 控件条嵌入成员CToolBar m_wndToolBar;CStatusBar m_wndStatusBar;// 生成的消息映射函数 protected:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);DECLARE_MESSAGE_MAP()}; 看完这部分源码之后我们来自己实现不用MFC自动帮我们实现的类来加深我们的理解 我们创建一个控制台应用修改项目属性 常规MFC的使用在静态库中使用MFC连接器-系统-子系统窗口 接下来我们删除掉main.cpp中的所有代码我们来自己仿照MFC写一个窗口 #include afxwin.hclass CMyFrameWnd:public CFrameWnd{ public: }class CMyApp:public CWinApp{ public:CMyApp(){};//必须要重写虚函数virtual BOOL InitInstance(){CMyFrameWnd* pFrame new CMyFrameWnd;pFrame-Create(NULL,LFirstMFC);m_pMainWnd pFrame;pFrame.ShouWindow(SW_SHOW);pFrame-UpdateWindow();return TRUE;} };CMyWinApp theApp;这里的CMyFrameWnd由于只是一个框架类我们不需要做任何操作只是继承MFC的框架类就可以了狗仔函数会调用CFrameWnd中写好的构造函数 接下来我们创建一个自己的应用程序类继承MFC的CWinApp类这里我们写一个空的构造函数当构造的时候就会调用父类的构造函数了 我们在自己的应用程序类中还必须重写虚函数InitInstance在这个函数中我们创建窗口显示窗口 最后我们还需要一个应用程序类全局变量theApp 当我们写好这些之后我们运行发现窗口已经神奇的创建好了 我们在创建Win32应用程序的时候需要做的几个步骤 定义窗口类创建窗口注册窗口刷新窗口显示窗口 但是在我们这样实现了MFC之后我们貌似少做了很多操作几行代码就完成了窗口的创建甚至我们连WinMain函数都没有看见那么MFC的程序启动机制到底是怎样的呢我们首先就来深究一下MFC的程序运行机制 我们知道在C中全局变量的构造是优先于main函数的那么我们少做的很多操作肯定就是在这里全局变量的构造函数中了 我们在我们自己的应用程序类的构造函数上下断点我们跟到CWinApp的构造函数中来看看 这里我就写伪代码了 我们应用程序类的父类CWinApp的构造函数 CWinApp::CWinApp(LPCTSTR lpszAppName){//首先判断lpszAppName是否为空做了一些操作我们没必要关注//AFX_MODULE_STATE这个结构体是MFC中的 程序模块状态信息结构体//这里是获取当前应用程序模块状态信息AFX_MODULE_STATE* pModuleState _AFX_CMDTARGET_GETSTATE();//这里是获取当前程序线程状态信息可以看出来当前程序状态信息是模块状态信息中的一个成员AFX_MODULE_THREAD_STATE* pThreadState pModuleState-m_thread;//这里是给线程信息的某个成员赋值给的是this指针也就是theApp的地址pThreadState-m_pCurrentWinThread this;//这里是给theApp的成员赋值我们自己的应用程序类没有写成员这里都是CWinApp中写好的我们只是继承过来了//获取当前应用程序线程句柄m_hThread ::GetCurrentThread();//获取当前应用程序线程IDm_nThreadID ::GetCurrentThreadId();//给当前应用程序模块状态信息的某个成员赋值//不难看出这里保存的是当前应用程序类的地址也就是theApp的地址pModuleState-m_pCurrentWinApp this;//之后就是一些给类中的其他成员赋初值很多都是NULL我们不再关注}但是跟完构造函数后我们也没有找到WinMain更没有找到注册窗口等操作 既然在应用程序类的构造中我们没有找到我们来看看接下来我们写的pFrame-Create(NULL, LFirstMFC);这一段代码但是这一段代码很明显是框架类的方法我们猜测很多操作就在这里完成 我们在这一段代码上下断点断下来之后我们F11跟进然后查看调用对战我们就发现了wWinMian和AfxWInMain由于我们写过win32程序我们知道底层就是wWinMain函数我们就跟到这个函数中来看 这里还是写伪代码 _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,_In_ LPTSTR lpCmdLine, int nCmdShow) {//我们发现在wWinMain函数中做了转发而且根据名称来看是MFC的wWimMain函数我们跟进去看看//这里注意有些人到这里就不会往进去跟了我们在这行代码上下断点然后去掉之前的断点重新调试就能跟进去了return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow){//这里根据名称来看是获取当前应用程序线程信息我们跟进去看看CWinThread* pThread AfxGetThread(){//这里跟前面的应用程序类的构造函数中一样获取当前应用程序的模块状态信息AFX_MODULE_THREAD_STATE* pState AfxGetModuleThreadState();//取出得到的模块状态信息中的成员-当前线程CWinThread* pThread pState-m_pCurrentWinThread;//返回线程return pThread;}//这里根据名称来看是获取了当前应用程序的应用程序类的地址我们还是跟进去看看CWinApp* pApp AfxGetApp(){//这里afx开头的函数return afxCurrentWinApp{//这里可以肯定是返回了应用程序类地址return pResult _afxBaseModuleState.GetData();}}这里这两步跟完之后大家有没有发现这里实现了C的多态CWinThread是爷类指针指向派生类类对象CWinApp是父类的指针指向了派生类对象theApp是我们自己实现的应用程序类嘛//下一步执行了这个函数在源代码中是在if的条件中实现的这里直接拉出来了AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow){//根据名称这个是初始化的函数pApp-m_hInstance hInstance;hPrevInstance; // Obsolete.pApp-m_lpCmdLine lpCmdLine;pApp-m_nCmdShow nCmdShow;pApp-SetCurrentHandles();}程序启动初始化操作 虚函数我们可以重写貌似是关于文档的一些初始化操作pApp-InitApplication()//接下来这个函数也是在if条件中进行的这里直接拉出来pThread-InitInstance(){这是虚函数我们在我们自己的类中已经实现}} }代码跟到这里我们已经解决了很多前面我们提出来的问题WinMain函数等但是还有一个问题消息循环呢我们知道如果没有消息循环那么这个窗口根本运行不了那既然我们能够关闭窗口等操作那肯定是已经写好了消息循环我们来接着上面的代码来跟 上面的函数紧接着我们就看到了一行代码 这就是MFC的消息循环我们来跟进去看一下 pThread-Run(){//这里也相当于做了转发在转发之前有一些判断这里省略int CWinApp::Run(){//跟到这里之后我们就发现了消息循环for (;;)//死循环{//这里的PeekMessage是到消息列表中检查是否有消息while (bIdle !::PeekMessage((pState-m_msgCur), NULL, NULL, NULL, PM_NOREMOVE)){//这里是说如果没有消息的话就会进行空闲操作比如刷新窗口检查定时器等等if (!OnIdle(lIdleCount))bIdle FALSE;}//死循环里面还有一个do——while循环我们来看看do{//这里如果是WM_QUIT消息才会返回false才会进去退出程序if (!PumpMessage(){//在这个PumpMessage中发现了翻译消息派发消息if (pState-m_msgCur.message ! WM_KICKIDLE !AfxPreTranslateMessage((pState-m_msgCur))){::TranslateMessage((pState-m_msgCur));::DispatchMessage((pState-m_msgCur));}})return ExitInstance();if (IsIdleMessage((pState-m_msgCur))){bIdle TRUE;lIdleCount 0;}} while (::PeekMessage((pState-m_msgCur), NULL, NULL, NULL, PM_NOREMOVE));}} } 至此我们的消息循环就跟踪完了这里再总结一下MFC的程序启动机制 首先是theApp也就是我们自己的窗口类CMyApp的构造也就是CWinApp的构造在构造函数中 将theApp的地址保存到了当前应用程序线程状态信息中将theApp的地址保存到了当前应用程序的模块状态信息中 然后进入了WinMain函数在WinMain函数中 利用全局函数AfxGetThread()获取到了theApp的地址利用theApp调用虚函数 InitApplication进行文档类的一些初始化操作利用theApp调用虚函数 InitInstance也就是我们重写的虚函数创建窗口利用theApp调用虚函数 Run 消息循环在消息循环中我们跟踪到了获取消息翻译消息派发消息等利用TheApp调用退出函数
http://www.w-s-a.com/news/851282/

相关文章:

  • 摄影素材库网站服装页面设计的网站
  • 如何用国外网站做头条做个游戏app的费用大概多少
  • 网站 形象入口页福州网站建设网络公司排名
  • 免费下载教学设计的网站送网站建设管理信息内容审核制度
  • 外贸专业网站的公司百度旗下13个app
  • 物理组简介 网站建设高师院校语言类课程体系改革与建设 教学成果奖申报网站
  • 爱网站无法登录怎么回事手表网
  • 网站建设公司现在还挣钱吗山西手动网站建设推荐平台
  • 重庆建设工程交易信息网站网站制作公司起名
  • 东莞寮步做网站的有吗企业宣传册制作
  • 做网站的软件是哪个上蔡做网站
  • 前后端分离实现网站开发紧急通知网页升级
  • 河北专业网站建设公司推荐佛山小程序开发平台
  • 网站开发强制开启浏览器极速模式建设网站有什么风险
  • 360全景网站建设常州专业网站建设公司咨询
  • 重庆大渡口网站建设网站增加一体化建设功能的好处
  • 网站开发完整视频网站上传 404
  • 自适应网站做推广北京建设工程招标网
  • 外贸网站设计注意事项网上商城官网入口
  • 正规的营销型网站建设公司微官网是网站吗
  • 南京行业门户网站无锡阿里巴巴做网站
  • 河北省和城乡住房建设厅网站wamp wordpress打不开
  • 在哪个平台做网站比较好自动app优化
  • 有没有能帮人快速网站备案的机构个人学做网站
  • 凌云县 城市建设 网站西安市建网站
  • 织梦xml网站地图公众号公众平台
  • 长春省妇幼网站做四维学校网站系统破解版
  • 安阳免费搭建自己的网站个人网站做商城会怎样
  • 网站建设专家公司排行网站举报有奖平台
  • 程序员不是做网站的公司装修效果全景图