mfc 封装 theapp winmain afxGetapp

本文通过实例代码详细介绍了MFC中如何封装TheApp和WinMain,以及如何使用afxGetApp获取应用程序实例。通过创建ModuleState类、全局对象和自定义的GblGetModuleState函数,确保在WinApp的构造函数中正确设置当前App的指针。实验结果显示,MFC程序可能存在多个全局对象,但关键在于关注如何正确封装和管理这些对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决疑惑:afxGetApp () 获得theApp 的指针的过程

 

基本上是这样的

一,定义

     class ModuleState
      {
     public:
     WinApp*  m_pcurrentApp;
      HINSTANCE m_hCurrentInst;


      };

 

二,生成全局对象

       ModuleState  state;(这个对象应该比theapp 生成的早点。自己这样认为的,没做实验验证迟了的后果)

 

三   全局函数 GblGetModuleState    (类似afxGetModuleState 或者 AfxGetApp.    自己写的么,就不使afx 了!)

         ModuleState* GblGetModuleState()
        {
               return &state;
         }

 

 

四, 在WinApp的构造函数中,初始化state的m_pcurrentApp

     WinApp::WinApp()
      {
               GblGetModuleState()->m_pcurrentApp = this;
       }

五,为了验证是否是自己的Myapp:public Winapp生成的 theapp

      使用两个虚函数 winapp::Instance(){cout<<"in winapp";}

                             myapp::Instance(){cout<<"in myapp";}

 

      int main()
       {
             WinApp* pApp = GblGetModuleState()->m_pcurrentApp ;
            pApp->InitInstance ();
             int c;
           scanf("%d",&c);        //完全是为了让程序停下来,看看输出的结果
          return 0;
         }

 

 

 

 

结论  : 1,mfc 程序中当然不可能只有一个 theapp 全局对象,我们关注的太紧密,自己就短视了。

        

              2,这完全是自己做的一个 小实验。类似 mfc 的封装过程 。

 

附上实验代码 (本来相传附件的,没找到在哪操作。知道的给我说说)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值