每个MFC程序都包含一个CWinApp类的实例. 它实现主事件循环并把事件分发给MFC中其他类.
10.1 成员变量
m_pszAppName 应用程序名称
m_hInstance 当前实例的句柄
m_hPrevInstance 上一个实例的句柄
m_lpCmdLine 用于调用的命令行的一个拷贝
m_nCmdShow 指定窗口初始时的显示方式
m_bHelpMode 如果应用程序处于Help文档模式则为TRUE
m_pActiveWnd 如果应用程序是OLE服务方式并且当前处于活动状态.则它指向容器主窗口
m_pszExeName EXE文件的名称
m_pszHelpFilePath 程序的Help文件的路径
m_pszProfileName 应用程序的INI文件的名称
m_pszRegistryKey 应用程序的注册表键值
常用函数如:
AfxGetApp 返回指向应用程序的CWinApp对象的指针.
AfxGetInstanceHandle 返回应用程序的实例的句柄.
GfxGetResoureHandle 返回程序的资源的句柄.
AfxGetAppName 返回应用程序的名称.
10.2 图标和光标
载入图标使用CWinApp类的 LoadStandardIcon 和 LoadIcon 函数
LoadStandardIcon 载入系统定义的图标. 如 IDI_APPLICATION
IDI_HAND IDI_QUESTION IDI_EXCLAMATION IDI_ASTERISK
LoadIcon 载入自定义图标 .
两个函数都接收一个图标ID做参数. 如:
CApp theApp; //全局CWinApp对象
//在某函数内:
HICON hico = theApp.LoadIcon(IDI_XXXXX);
HICON hico1 = theApp.LoadStandardIcon(IDI_HAND);
//然后就可以用图标句柄 hico 操作图标了. 如在CStatic中 cs.SetIcon(hico);
载入光标也和图标类似. 用CWinApp的成员函数 LoadCursor 和 LoadStandardCursor(系统光标) .
系统光标定义有: IDC_ARROW(正常箭头) IDC_IBEAM(文本插入I形光标) IDC_WAIT(沙漏)等等.
要显示沙漏形光标.CCmdTarget类提供了两个函数: BeginWaitCursor和 EndWaitCursor.
这两个函数要在同一个消息处理器函数中调用.否则不能正常工作.要修改显示的缺省的沙漏图标可以
重载 CWinApp::DoWaitCursor来完成.
10.4 应用程序功能 (使用文档模板)
class CApp : public CWinApp {
public:
BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};
CApp app;
class CWindow : public CFrameWnd {
DECLARE_DYNCREATE(CWindow)
};
IMPLEMENT_DYNCREATE(CWindow, CFrameWnd)
class CDoc : public CDocument {
DECLARE_DYNCREATE(CDoc)
public:
void Serialize(CArchive & ar) {
( (CEditVieW*) m_viewList.GetHead() ) -> SerializaRaw(ar);
}
};
IMPLEMENT_DYNCREATE( CDoc, CDocument)
class CEdView : public CEditView {
DECLARE_DYNCREATE(CEdView)
};
IMPLEMENT_DYNCREATE(CEdView, CEditView)
BOOL CApp::InitInstance(){
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_STANDARD,
RUNTIME_CLASS(CDoc),
RUNTIME_CLASS(CWindow),
RUNTIME_CLASS(CEdView) );
AddDocTemplatet (pDocTemplate);
if(m_lpCmdLine[0] == '{fckeditor}') OnFileNew();
else OpenDocumentFile(m_lpCmdLine);
return TRUE;
}
BEGIN_MESSAGE_MAP(CApp, CWinApp)
ON_COMMAND (ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND (ID_FILE_OPEN, CWinApp::OnFineOpen)
END_MESSAGE_MAP()
上边的代码可以工作.其中在CApp::InitInstance函数中调用:
AddDocTemplatet (pDocTemplate);
它使CWinApp的模板列表中增加了一个新的文档模板.该模板指定如下内容:
1. 这个模板的一组资源 . (本例中ID号为 IDR_STANDARD)
2. 文档类
3. 窗口类
4. 视图类