剖析MFC六大关键技术

发布时间 : 星期四 文章剖析MFC六大关键技术更新完毕开始阅读

virtual BOOL Run();//消息循环 };

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(\窗口类名\窗口实例标题名

\

return 0; }

BOOL CFrameWnd::ShowWnd()//显示更新窗口 {

ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); return 0; }

///////////// CWinApp1::CWinApp1() {

m_pCurrentWinApp=this; }

CWinApp1::~CWinApp1(){}

//以下为InitInstance()函数,MFC中要为CWinApp的派生类改写, //这里为了方便理解,把它放在CWinApp类里面完成! //你只要记住真正的MFC在派生类改写此函数就行了。 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;

//真正的MFC要写一个全局函数AfxGetApp,以获取CWinApp指针。 pApp->InitInstance(); pApp->Run(); return 0; }

代码那么长,实际上只是写了三个函数,一是CFrameWnd类的Create(),第二个是CWinApp类的 InitInstance()和Run()。在此特别要说明的是InitInstance(),真正的MFC中,那是我们跟据自己构造窗口的需要,自己改写这个函数。

大家可以看到,封装了上面两个类以后,在入口函数WinMain中就写几行代码,就可以产生一个窗口程序。在MFC中,因为 WinMain函数就是固定的那么几行代码,所以MFC绝对可以帮我们自动完成(MFC的特长就是帮我们完成有规律的代码),所以我们创造MFC应用程序的时候,看不到WinMain函数。

写到这里,MFC六大关键技术之一:MFC程序的初始化过程(模拟),就差不多写完了。回头看一下,居然写了八千多字,原本以为写完六大关键技术也不用写那么多字,现在还觉得庆幸的是不把文档、视类牵连进去,否则更不知写到何时。

还有五大关键技术没有写,我还应该写下去吗?上面写了八千多字,都是我一个字一个字地敲进去,每个例子都是自己生硬地想出来。用了十多个小时,换来的可能更多是论坛中朋友们的漫骂,讥讽!

联系合同范文客服:xxxxx#qq.com(#替换为@)