• CWinApp类 功能


    第10章 CWinApp类

    每个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. 视图类

  • 相关阅读:
    解释器模式
    命令模式
    责任链模式
    代理模式
    享元模式
    外观模式
    装饰器模式
    组合模式
    过滤器模式
    js广告浮动
  • 原文地址:https://www.cnblogs.com/tianlangshu/p/1989468.html
Copyright © 2020-2023  润新知