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

xxdd 发布于 2013/04/09 10:47
阅读 102
收藏 0

#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;
}

加载中
0
子矜
子矜

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

 pApp->InitInstance();
 pApp->Run();
子矜
子矜
对啊 严格的说其他地方已经用到了的 你把顶上那句删掉应该编译不过。。。
xxdd
xxdd
仅仅是为了在其它地方也可以用这个App?
返回顶部
顶部