CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

mfc深入浅出问题

楼主sunHarbin()2002-07-07 20:41:26 在 VC/MFC / 基础类 提问

mfc.h  
   
  #define   BOOL   int  
  #define   TRUE   1  
  #define   FALSE   0  
   
  #include   <iostream.h>  
   
  class   CObject  
  {  
  public:  
      CObject::CObject()     {  
                                              }  
      CObject::~CObject()   {  
                                              }  
  };  
   
  class   CCmdTarget   :   public   CObject  
  {  
  public:  
      CCmdTarget::CCmdTarget()     {  
                                                          }  
      CCmdTarget::~CCmdTarget()   {  
                                                          }  
  };  
   
  class   CWinThread   :   public   CCmdTarget  
  {  
  public:  
      CWinThread::CWinThread()     {  
                                                          }  
      CWinThread::~CWinThread()   {  
                                                          }  
   
      virtual   BOOL   InitInstance()   {  
                                                                  cout   <<   "CWinThread::InitInstance   \n";  
                                                                  return   TRUE;  
                                                              }  
      virtual   int   Run()   {  
                                              cout   <<   "CWinThread::Run   \n";  
                                              return   1;  
                                          }  
  };  
   
  class   CWnd;  
   
  class   CWinApp   :   public   CWinThread  
  {  
  public:  
      CWinApp*   m_pCurrentWinApp;  
      CWnd*   m_pMainWnd;  
   
  public:  
      CWinApp::CWinApp()     {  
                                                  m_pCurrentWinApp   =   this;   //***(1)  
                                              }  
      CWinApp::~CWinApp()   {  
                                              }  
   
      virtual   BOOL   InitApplication()   {  
                                                                        cout   <<   "CWinApp::InitApplication   \n";  
                                                                        return   TRUE;  
                                                                    }  
      virtual   BOOL   InitInstance()         {  
                                                                        cout   <<   "CWinApp::InitInstance   \n";  
                                                                        return   TRUE;  
                                                                    }  
      virtual   int   Run()   {  
                                              cout   <<   "CWinApp::Run   \n";  
                                              return   CWinThread::Run();  
                                          }  
  };  
   
   
  class   CDocument   :   public   CCmdTarget  
  {  
  public:  
      CDocument::CDocument()       {  
                                                        }  
      CDocument::~CDocument()     {  
                                                        }  
  };  
   
   
  class   CWnd   :   public   CCmdTarget  
  {  
  public:  
      CWnd::CWnd()       {  
                                    }  
      CWnd::~CWnd()     {  
                                    }  
   
      virtual   BOOL   Create();  
      BOOL   CreateEx();  
      virtual   BOOL   PreCreateWindow();  
  };  
   
  class   CFrameWnd   :   public   CWnd  
  {  
  public:  
      CFrameWnd::CFrameWnd()       {  
                                                        }  
      CFrameWnd::~CFrameWnd()     {  
                                                        }  
      BOOL   Create();  
      virtual   BOOL   PreCreateWindow();  
  };  
   
  class   CView   :   public   CWnd  
  {  
  public:  
      CView::CView()       {  
                                        }  
      CView::~CView()     {  
                                        }  
  };  
   
   
  //   global   function  
   
  CWinApp*   AfxGetApp();  
   
   
  mfc.cpp  
   
  #include   "my.h"     //   it   should   be   mfc.h,   but   for   CMyWinApp   definition,   so...  
   
  extern   CMyWinApp   theApp;  
   
  BOOL   CWnd::Create()  
  {  
      cout   <<   "CWnd::Create   \n";  
      return   TRUE;  
  }  
   
  BOOL   CWnd::CreateEx()  
  {  
      cout   <<   "CWnd::CreateEx   \n";  
      PreCreateWindow();  
      return   TRUE;  
  }  
   
  BOOL   CWnd::PreCreateWindow()  
  {  
      cout   <<   "CWnd::PreCreateWindow   \n";  
      return   TRUE;  
  }  
   
  BOOL   CFrameWnd::Create()  
  {  
      cout   <<   "CFrameWnd::Create   \n";  
      CreateEx();  
      return   TRUE;  
  }  
   
  BOOL   CFrameWnd::PreCreateWindow()  
  {  
      cout   <<   "CFrameWnd::PreCreateWindow   \n";  
      return   TRUE;  
  }  
   
   
  CWinApp*   AfxGetApp()  
  {  
      return   theApp.m_pCurrentWinApp;  
  }  
   
  my.h  
   
   
  #include   <iostream.h>  
  #include   "mfc.h"  
   
  class   CMyWinApp   :   public   CWinApp  
  {  
  public:  
      CMyWinApp::CMyWinApp()       {  
                                                        }  
      CMyWinApp::~CMyWinApp()     {  
                                                        }  
   
      virtual   BOOL   InitInstance();  
  };  
   
  class   CMyFrameWnd   :   public   CFrameWnd  
  {  
  public:  
      CMyFrameWnd();  
      ~CMyFrameWnd()     {  
                                      }  
  };  
   
  my.cpp  
   
  #include   "my.h"  
   
  CMyWinApp   theApp;  
   
  BOOL   CMyWinApp::InitInstance()  
  {  
          cout   <<   "CMyWinApp::InitInstance   \n";  
          m_pMainWnd   =   new   CMyFrameWnd;  
          return   TRUE;  
  }  
   
  CMyFrameWnd::CMyFrameWnd()  
  {  
          cout   <<   "CMyFrameWnd::CMyFrameWnd   \n";  
          Create();  
  }  
   
  //------------------------------------------------------------------  
  //   main  
  //------------------------------------------------------------------  
  void   main()  
  {  
   
  CWinApp*   pApp   =   AfxGetApp();   //***(2)  
   
  pApp->InitApplication();  
  pApp->InitInstance();  
  pApp->Run();  
  }  
  //------------------------------------------------------------------  
   
  我的问题是:  
  (2)处的返回的指针是指向   CWinApp   还是   CMyWinApp  
  还有   CWinApp*   m_pCurrentWinapp;可以被CMyWinApp继承,但构造函数  
  CWinApp::CWinApp()     {  
                                                  m_pCurrentWinApp   =   this;  
                                              }  
  能被CMyWinApp继承吗?  
   
   
   
   
  问题点数:100、回复次数:10Top

1 楼webber84(***闭关修炼中***)回复于 2002-07-07 20:48:41 得分 5

1:应该是指向CWinApp的;  
  2:构造函数不会被继承,但子类的构造函数会自动调用父类的构造函数。Top

2 楼sunHarbin()回复于 2002-07-08 09:31:18 得分 0

pApp->InitApplication();    
  pApp->InitInstance();   怎么调用BOOL   CMyWinApp::InitInstance()  
  pApp->Run();  
  Top

3 楼renren6250(刀客)回复于 2002-07-08 09:53:14 得分 5

1:应该是指向theApp的;  
  AfxGetApp就是取得theApp的对象指针.使pApp指向这个对象指针.  
  theApp是CMyWinApp的对象,当然调用了BOOL   CMyWinApp::InitInstance()  
   
  Top

4 楼nuaawyd(血影狂刀)回复于 2002-07-08 10:00:17 得分 0

我觉得第一个问题   renren6250(刀客)   的对  
  webber84(糕鱼昏)   不对,而他的第二个回答是对的Top

5 楼lahlili()回复于 2002-07-08 11:09:43 得分 5

1.(2)处应该返回theApp对象,即CMyWinApp的实例。使用父类的指针类型,但指向的是子类对象。正是C++多态的运用。  
  2.第二个问题webber84(糕鱼昏)说的是对的Top

6 楼sunHarbin()回复于 2002-07-09 07:58:04 得分 0

to   lahlili()  
  CWinApp::CWinApp()     {  
                                                  m_pCurrentWinApp   =   this;  
                                              }  
  在调用CWinApp的构造函数时,m_pCurrentWinApp   是CWinApp对象,m_pCurrentWinApp   以后再没有被重新赋值,何以是CMyWinApp实例。  
  我好糊涂!!!!  
   
  Top

7 楼virtualmfc(scale)回复于 2002-07-09 08:12:12 得分 85

其实这些都不对,只要大家从C++的对象模型上来考虑,就知道。由于内存布局的原因。父类的this指针就是子类的this指针。这是因为在内存中,首先是存放父类对象的。台湾的高焕堂先生在其《架构设计》一书中曾形象地比喻说是“母子同体”。Top

8 楼sunHarbin()回复于 2002-07-09 18:47:23 得分 0

我还是不十分明白  
  virtualmfc(scale)   《架构设计》有电子版,能否给我一份。  
  我email:   sunnf@wan-bo.com  
   
  Top

9 楼virtualmfc(scale)回复于 2002-07-10 11:07:33 得分 0

上UMLChina上找吧。Top

相关问题

  • 深入浅出MFC
  • 深入浅出mfc?
  • 深入浅出MFC,好书!
  • 关于《深入浅出MFC》
  • 初学《深入浅出MFC》
  • 深入浅出MFC---------------HELP ME!
  • 急需《深入浅出MFC》!!!!!
  • <<深入浅出MFC>>??失望…………………………
  • 关于《深入浅出 MFC》
  • 关于《深入浅出MFC》

关键词

  • c++
  • 函数
  • 指针
  • mfc
  • cmywinapp
  • cwinapp
  • pcurrentwinapp
  • papp
  • initinstance
  • 构造函数

得分解答快速导航

  • 帖主:sunHarbin
  • webber84
  • renren6250
  • lahlili
  • virtualmfc

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo