七、使用不带文挡-视结构的MFC应用
文档-视结构的功能是非常强大的,可以适合于大多数应用程序,但是有时我们只需要非常简单的程序,为了减少最终可执行文件尺寸和提高运行速度,我们没有必要使用文挡-视结构,典型的有简单SDI应用和基于对话框的应用。
1、简单SDI应用 此时只需要使用CWinApp和CFrameWnd两个类就完全可以了。由于CWinApp类封装了WinMain函数和消息处理循环,因此任何使用MFC进行编程的程序都不能脱离开该类。实际上使用CWinApp类非常简单,主要是派生一个用户自己的应用类,如CMyApp,然后只需重载CWinApp类的InitInstance()函数:
BOOL CMyApp::InitInstance() { m_pMainWnd=new CMainFrame(); ASSERT(m_pMainWnd!=NULL); //error checking only m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } |
至于所需要的主框架类,则可以直接使用ClassWizard实用程序生成,该类的头文件与实现代码可以与CMyApp类的头文件和实现代码放在一起。注意,这里由一个技巧,由于ClassWizard的使用需要有相应的CLW文件存在,而收工建代码时没有对应的CLW文件,因此不能直接使用,解决办法是进入App Studio实用工具后使用ClassWizard,此时系统会发觉不存在相应的CLW文件,系统将提示你重建CLW文件并弹出相应对话框,这时候你不需要选择任何文件就直接选择OK按钮,这样系统将为你产生一个空的CLW文件,这样就可以使用ClassWizard实用工具了。为了将CWinApp和CFrameWnd的派生类有机地结合在一起,只需在CFrameWnd派生类的构造函数中进行窗口创建即可。典型代码如下:
CMainFrame::CMainFrame() { Create(NULL,"DDE Client Application",WS_OVERLAPPEDWINDOW,rectDefault, NULL,MAKEINTRESOURCE(IDR_MAINFRAME)); } |
采用ClassWizard实用程序生成相关类代码后,所有的类的其它实现和维护就同普通由AppWizard实用程序产生的代码一样了。
2、基于对话框的程序 有些主要用于数据的输入和输出等的应用在使用时没有必要改变窗口大小,典型的如各种联机注册程序,这些使用对话框作为应用的主界面就足够了,而且开发此类应用具有方便快捷的特点,代码也比较短小,如果直接采用各种控制类生成所需要的控制就特别麻烦。在Visual C++ 4.x版本中使用AppWizard就可以直接生成基于对话框的应用。在Visual 1.x中没有此功能,因此这类应用需要程序员自己实现。实际上使用MFC实现基于对话框的应用非常简单,同样只使用两个MFC类作为基类,这两个类为CWinApp类和CDialog类。所使用的对话框主界面同样可以先用App Studio编辑对话框界面,再使用ClassWizard产生相应代码框架,然后修改CMyApp类的声明,增加一个该对话框类的成员变量m_Mydlg,最后修改CMyApp类的InitInstance()函数如下:
BOOL CMyApp::InitInstance() { m_Mydlg.DoModal(); return TRUE; } |