开发者社区> 问答> 正文

这个程序最后声明对象的时候为什么要用指针?? 400 报错

这个程序最后声明对象的时候为什么要用指针?? 400 报错

#include <windows.h>
HINSTANCE hInstance;
class CFrameWnd
{
 HWND hwnd;
public:
 CFrameWnd();   //也可以在这里调用Create()
 virtual ~CFrameWnd();
 int Create();    //类就留意这一个函数就行了!
 BOOL ShowWnd();
};
CFrameWnd::CFrameWnd(){}
CFrameWnd::~CFrameWnd(){}
int CFrameWnd::Create()   //封装创建窗口代码
{
 WNDCLASS wndcls;
 wndcls.style=0;
 wndcls.cbClsExtra=0;
 wndcls.cbWndExtra=0;
 wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
 wndcls.hIcon=LoadIcon(NULL,IDC_ARROW);
 wndcls.hInstance=hInstance;
 wndcls.lpfnWndProc=DefWindowProc;//默认窗口过程函数。
 //大家可以想象成MFC通用的窗口过程。
 wndcls.lpszClassName="窗口类名";
 wndcls.lpszMenuName=NULL;
 RegisterClass(&wndcls);
 hwnd=CreateWindow("窗口类名","窗口实例标题名",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
 return 0;
}
BOOL CFrameWnd::ShowWnd()//显示更新窗口
{
 ShowWindow(hwnd,SW_SHOWNORMAL);
 UpdateWindow(hwnd);
 return 0;
}


class CWinApp1
{
public:
 CFrameWnd* m_pMainWnd;//在真正的MFC里面
 CWinApp1* m_pCurrentWinApp;//指向应用程序对象本身
 CWinApp1();
 virtual ~CWinApp1();
 virtual BOOL InitInstance();//MFC原本是必须重载的函数,最重要的函数!!!!
 virtual BOOL Run();//消息循环
};


/////////////
CWinApp1::CWinApp1()
{
m_pCurrentWinApp=this;
}
CWinApp1::~CWinApp1(){}
BOOL CWinApp1::InitInstance()
{
 m_pMainWnd=new CFrameWnd;
 m_pMainWnd->Create();
 m_pMainWnd->ShowWnd();
 return 0;
}
BOOL CWinApp1::Run()//////////////////////封装消息循环
{
 MSG msg;
 while(GetMessage(&msg,NULL,0,0))
 {
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 return 0;
} //////////////////////////////////////////////////////封装消息循环
CWinApp1 theApp;   //应用程序对象(全局)
int WINAPI WinMain( HINSTANCE hinst, HINSTANCE hPrevInstance,   LPSTR lpCmdLine, int nCmdShow)
{
 hInstance=hinst;


 CWinApp1* pApp=theApp.m_pCurrentWinApp;
 pApp->InitInstance();
 pApp->Run();

//上面为什么要用指针?有什么好处?直接下面这样也能实现啊

 CWinApp1 pApp;
 pApp.InitInstance();
 pApp.Run();
 return 0;
}

展开
收起
爱吃鱼的程序员 2020-06-05 13:32:06 532 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    CWinApp1* pApp=theApp.m_pCurrentWinApp;//theApp是一个全局的App对象,就是说你在其他地方还要用到它的,这里用指针是取它的地址,相当于调用这个全局对象

     pApp->InitInstance();
     pApp->Run();######对啊 严格的说其他地方已经用到了的 你把顶上那句删掉应该编译不过。。。######仅仅是为了在其它地方也可以用这个App?
    2020-06-05 13:32:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
对象的生命期管理 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载