65.9K
CodeProject 正在变化。 阅读更多。
Home

SoftG Application Framework 1.62

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (5投票s)

2009 年 5 月 13 日

MPL

3分钟阅读

viewsIcon

30170

downloadIcon

434

自动化框架应用程序开发,实现软件功能与软件框架分离。支持插件,支持主题

引言

核心技术基于Microsoft COM技术。

简单介绍

  1. 新的软件,软件功能和软件框架设计分离
  2. COM技术 + WTL设计
  3. 自动化框架应用程序开发,支持,支持宏语言开发
  4. 支持插件设计
  5. 32位和64位版本
  6. 支持可定义主题,主题
  7. 内置多国语言包,包括语言切换
  8. UNICODE编程
  9. 内置程荣应用程序框架“向导,可以生成MFC ATL WTL项目应用程序
  10. 自动保存窗口坐标等功能

主框架

一个应用程序可以有多个主框架。每个主框架可以是单文档,单文档窗口网格,文档部分,文档窗口网格,点。框架有序集合,菜单栏和命令,组成,也可以添加点窗口或网格页面文档。主框架设置为IMainFrames 统一管理。
主框架窗口坐标自动记忆。

程荣应用程序框架的应用程序管理界面
IArtApp 接口是程荣应用程序框架的管理器,并且是程序执行之前创建的第一个 接口。如果无法创建程荣应用程序框架,它将无法正常工作。

集合顺序

集合ICommandBars 接口命令。有IMenuBar 菜单栏和命令ICommandBar 组成。命令侧边栏,也称为命令。食物已成为菜单命令ICommandBar 栏,菜单项和有序的按钮,统称为命令接口名称为ICommandItem: ICommandItem 接口可以更改顺序。

命令处理器

命令处理器INotifyCommand 接口,用户界面处理INotifyCommand 必须实现主框架,命令,菜单栏,弹出菜单命令。
主框架,命令,以及有序的命令INotifyCommand 可以拥有接口。

命令处理器集

命令处理器INotifyCommands 接口用于管理所有命令处理器。主框架,集合INotifyCommands 接口带有命令。

用户

  1. 下载SetupSoftGFramework.exe
  2. 安装...
  3. 注册类型库

    Regsvr.jpg

  4. 安装向导到 Visual Studio 2005 或 Visual Studio 2008。

    Setup_Wiard.jpg

  5. 运行 Visual Studio 2005 或 Visual Studio 2008。
  6. 将“SoftG Frame\Include”添加到“Tools\Options\Projects and Solutions\VC++ Directories
  7. 新建项目
  8. 点击“SoftG Frame”\"MFC Application”。输入项目名称“MyProject”。点击 OK。
  9. 根据指南项目

    ApplicationSettings.jpg

    GeneratedClass.jpg

    Language.jpg

  10. 项目信息。

    MyProject.jpg

文件名 描述
MainCommand.cppMainCommand.h

新的命令处理模式。

class CMainCommand :
public art::CNotifyCommandImpl<CMainCommand>
{
public:
void OnHelp(UINT nCmdID, art::ICommandItem *pCmdUI);
MyProject.cppMyProject.h

CMyProjectApp 类。添加了“Art::CArtApp”基类。

class CMyProjectApp : public CWinApp,
public art::CArtApp
{
MyProjectDoc.cppMyProjectDoc.h

CMyProjectDoc。无更改

class CMyProjectDoc : public CDocument
{
MyProjectView.cppMyProjectView.h

CMyProjectView 类。添加了“art::CDataViewImpl<CMyProjectView>”基类

class CMyProjectView :
public CView,
public art::CDataViewImpl<CMyProjectView>
{

Using the Code

  1. 初始化“程荣应用程序框架”环境
    HRESULT hr = art::CArtApp::InitArtApp();  //Init IArtApp Interface.
  2. 创建主框架

    调用IArtApp 接口CreateMainFrame 方法创建主框架,并返回IMainFrame 到主框架添加接口,命令处理器INotifyCommand 接口。
    通过IMainFrame 接口put_SDIDataView 属性,添加数据视图。

    bool CMyProjectApp::CreateSDIWindow()
    {
    CMainCommand mc;
     HRESULT   hr = S_FALSE;
     HICON hIcon  = (HICON)::LoadImage(AfxGetResourceHandle(),
          MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
     HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
     hr = GetArtApp()->CreateMainFrame(art::artMainFrameTypeSDI,
          (wireHMENU)hMenu, (long)hIcon, L"Window Name", &m_pMainFrame);
     if (S_OK == hr)
     {
      m_pMainFrame->AddNotifyCommand((art::INotifyCommand*)&mc);
      GetArtApp()->put_AppName(L"Software Name");
    
      CreateTools();
    
      CMyProjectView *pDocView = NULL;
      pDocView = new CMyProjectView();
      m_pMainFrame->put_SDIDataView((art::IDataView*)pDocView);
    
      m_pMainFrame->ShowWindow(SW_SHOW);
      GetArtApp()->Run();
      return true;
     }
     return false;
    } 
  3. 创建CommandBar

    创建三个命令按钮

    void CMyProjectApp::CreateTools()
    {
        ATLASSERT(NULL != m_pMainFrame);
    
        CComPtr<:icommandbars>    pCommandBars;
        CComPtr<:icommandbar>    pCommandBar;
        CComBSTR            bstrTitile;
    
    #pragma warning(disable:4309)
    #pragma warning(disable:4305)
        TBBUTTON tbAdd[] = {
            {0, ID_FILE_NEW,    TBSTATE_ENABLED,
    	TBSTYLE_BUTTON|TBSTYLE_TOOLTIPS, 0L, ID_FILE_NEW},
            {0, 0,                0,                 TBSTYLE_SEP,    0L, 0},
            {1, ID_FILE_CLOSE,    TBSTATE_ENABLED,
    	TBSTYLE_BUTTON|TBSTYLE_TOOLTIPS, 0L, ID_FILE_CLOSE},
            {0, 0,                0,                 TBSTYLE_SEP,    0L, 0},
            {2, ID_HELP,        TBSTATE_ENABLED,
    	TBSTYLE_BUTTON|TBSTYLE_TOOLTIPS, 0L, ID_HELP},
        };
    #pragma warning(default:4309)
    #pragma warning(default:4305)
    
        m_pMainFrame->get_CommandBars(&pCommandBars);
    
        bstrTitile = L"Standard";
        pCommandBars->AddCommandBar(bstrTitile, 1, 16, 16, &pCommandBar);
        pCommandBar->InsertCommand(0, sizeof(tbAdd)/sizeof(tbAdd[0]), (BYTE*)&tbAdd);
        pCommandBar->SetImageList((long)AfxGetResourceHandle(),
    	16, 16, MAKEINTRESOURCEW(IDR_MAINFRAME));
    }
  4. 命令处理

    命令接收INotifyCommand 接口。用户必须实现INotifyCommand,根据方法填充

    方法 描述
    QueryState(UINT nCmdID,
    ICommandItem *pCmdUI);
    查询状态
    NotifyCommand(UINT codeNotify,
    int nCmdID, ICommandItem *pCmdUI);
    NotifyCommandPoint(UINT nCmdID, POINT *pt,
    ICommandItem *pCmdUI, IDispatch *ppmb);
    GetCommandTips(UINT nCmdID, BSTR *bstrTips);
    标准的完整屏幕方法。
    获取命令提示。
    STDMETHODIMP ExpansionCommand
    (UINT nCmdID, ICommandItem *pCmdUI);
    当调用命令时。

  5. ICommandItem 接口
    virtual HRESULT __stdcall get_Caption (BSTR * pVal );
    virtual HRESULT __stdcall put_Caption (BSTR pVal );
    virtual HRESULT __stdcall get_Enable (VARIANT_BOOL * pVal );
    virtual HRESULT __stdcall put_Enable (VARIANT_BOOL pVal );
    virtual HRESULT __stdcall get_Check (VARIANT_BOOL * pVal );
    virtual HRESULT __stdcall put_Check (VARIANT_BOOL pVal );
    virtual HRESULT __stdcall get_Radio (VARIANT_BOOL * pVal );
    virtual HRESULT __stdcall put_Radio (VARIANT_BOOL pVal );
    virtual HRESULT __stdcall get_Visible (VARIANT_BOOL * pVal );
    virtual HRESULT __stdcall put_Visible (VARIANT_BOOL pVal );
    virtual HRESULT __stdcall get_Cmd (unsigned long * nCmdID );
    virtual HRESULT __stdcall put_Cmd (unsigned long nCmdID );
    virtual HRESULT __stdcall get_index (unsigned long * nIndex );
    virtual HRESULT __stdcall get_CommandItemType (enum artCommandItemType * pVal );
    virtual HRESULT __stdcall put_CommandItemType (enum artCommandItemType pVal );
    virtual HRESULT __stdcall get_Width (long * pVal );
    virtual HRESULT __stdcall put_Width (long pVal );
    virtual HRESULT __stdcall get_NotifyCommand (IDispatch * * pNotifyCommand );
    virtual HRESULT __stdcall put_NotifyCommand (IDispatch * pNotifyCommand );
    virtual HRESULT __stdcall get_ItemWindow (wireHWND * phwnd );
    virtual HRESULT __stdcall get_CmdHandle (VARIANT_BOOL * pHandle );
    virtual HRESULT __stdcall put_CmdHandle (VARIANT_BOOL pHandle );
    virtual HRESULT __stdcall get_IconIndex (unsigned long * nIndex );
    virtual HRESULT __stdcall put_IconIndex (unsigned long nIndex );
    virtual HRESULT __stdcall get_Icon (wireHICON * hIcon );
    virtual HRESULT __stdcall put_Icon (wireHICON hIcon );
    virtual HRESULT __stdcall get_Bitmap (wireHBITMAP * hBitmap );
    virtual HRESULT __stdcall put_Bitmap (wireHBITMAP hBitmap );
    virtual HRESULT __stdcall get_ChildCommandBar (ICommandBar * * pCommandBars );
    virtual HRESULT __stdcall put_ChildCommandBar (ICommandBar * pCommandBars );
    virtual HRESULT __stdcall get_ParentCommandBar (ICommandBar * * pCommandBars );
    virtual HRESULT __stdcall IsChildItem (VARIANT_BOOL * pChild );
    virtual HRESULT __stdcall CreateCommandBar (ICommandBar * * pCommandBars );
    virtual HRESULT __stdcall MoveItem (unsigned long nNewIndex );

历史

  • 2009 年 5 月 13 日:初始发布
© . All rights reserved.