1

現在、MDI MFC アプリを使用しており、アプリにコンソール/コマンド ライン機能を追加したいと考えています。QuickWin (以下を参照) から取得したい唯一の機能は、そのテキスト領域と、入力をキャプチャするプロセス機能を使用することです。ポップアップ ダイアログまたはドック バーに追加できれば、すばらしいことです。そして、このようなドキュメント クラスのない SDI アプリケーションの src コードを取得しました (リンク:http://www.codeproject.com/.../QuickWin-... ):

私の質問は: アプリを MDI アプリに追加できますか? また、MainFrm.cpp/MainFrm.h のようなソースまたはヘッド ファイルと CQuickWinApp/CQuickView のようなクラスを処理する方法は? (子ウィンドウをポップアップして関数を実装してください:))

ここに画像の説明を入力

QuickWin のメインフレームでは、対処が難しいクライアント領域と関係があります。

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
    // create splitter without views
    m_wndSplitter.CreateStatic(this, 2, 1);

    CCreateContext Context;
    Context.m_pNewViewClass = RUNTIME_CLASS(CQuickView);
    Context.m_pCurrentDoc = NULL;
    Context.m_pNewDocTemplate = NULL;
    Context.m_pLastView = NULL;
    Context.m_pCurrentFrame = this;

    // Create the Stdio QuickView
    m_pStdioView  = (CQuickView*)CreateView(&Context, AFX_IDW_PANE_FIRST);
    if (m_pStdioView == NULL)
    {
        TRACE("Failed to create QuickWin Stdio View\n");
        return FALSE;       // fail to create
    }

    // Create the Stderr QuickView
    m_pStderrView  = (CQuickView*)CreateView(&Context, AFX_IDW_PANE_FIRST);
    if (m_pStderrView == NULL)
    {
        TRACE("Failed to create QuickWin Stderr View\n");
        return FALSE;       // fail to create
    }
    m_pStderrView->SetReadOnly(TRUE);

    ShowSplitter(theApp.m_bShowSplitter);
    return TRUE;
}

マイ MDI アプリで:

MDI アプリには 3 つのドキュメント テンプレートがあります。

//BCGPVisualStudioGUIDemo.cpp

m_pDocTemplateCpp = new CMultiDocTemplate(
    IDR_BCGDEVTYPE_CPP,
    RUNTIME_CLASS(CBCGPVisualStudioGUIDemoDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CBCGPVisualStudioGUIDemoView));
AddDocTemplate (m_pDocTemplateCpp);

m_pDocTemplateWeb = new CMultiDocTemplate(
    IDR_BCGDEVTYPE_WEB,
    RUNTIME_CLASS(CBCGPVisualStudioGUIDemoDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CBCGPVisualStudioGUIDemoView));
AddDocTemplate (m_pDocTemplateWeb);

m_pStartDocTemplate = new CMultiDocTemplate(
    IDR_BCGDEVTYPE0,
    RUNTIME_CLASS(CNetworkMapEditorDemoDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CNetworkMapEditorDemoView));
AddDocTemplate(m_pStartDocTemplate);

アプリにはいくつかのドック バーもあります。

//MainFrm.cpp

    //------------------
    // Create config bar:
    //------------------    

if (!m_wndClassView.Create (_T("config"), this, CRect (0, 0, 200, 200),
        TRUE, 
        ID_VIEW_CLASS,
        WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
    {
        TRACE0("Failed to create Class View bar\n");
        return FALSE;      // fail to create
    }

    //------------------
    // Create output bar:
    //------------------

    if (!m_wndOutputView.Create (_T("output"), this, CRect (0, 0, 200, 100),
        TRUE, 
        ID_VIEW_OUTPUT,
        WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
    {
        TRACE0("Failed to create output bar\n");
        return FALSE;      // fail to create
    }

    //------------------
    // Create help bar:
    //------------------

    if (!m_wndDynamicHelpView.Create (_T("help"), this, CRect (0, 0, 200, 200),
        TRUE, 
        ID_VIEW_DYNAMICHELP,
        WS_CHILD | WS_VISIBLE | CBRS_RIGHT | CBRS_FLOAT_MULTI))
    {
        TRACE0("Failed to create Dynamic Help Bar\n");
        return FALSE;       // fail to create
    }

    //------------------
    // Create watch bar:
    //------------------

    if (!m_wndWatchBar.Create (_T("watch"), this, CRect (0, 0, 300, 100),
        TRUE, 
        ID_VIEW_WATCH,
        WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
    {
        TRACE0("Failed to create watch bar\n");
        return FALSE;      // fail to create
    }

    //------------------
    // Create property bar:
    //------------------

    if (!m_wndPropertiesBar.Create (_T("property"), this, CRect (0, 0, 300, 200),
        TRUE, 
        ID_VIEW_PROPERTIES,
        WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
    {
        TRACE0("Failed to create Properties Bar\n");
        return FALSE;       // fail to create
    }

QuickWin アプリのテキスト関数をアプリのドック バー、ドキュメント テンプレート、またはポップアップ ウィンドウに追加できますか?

4

1 に答える 1

0

QuickWinの機能をアプリケーションに統合するために必要なのは、3つのテキストボックス(stdin、stdout、およびstderr用に1つ)とQuickwinプロジェクトの次のクラスだけです。

  • Cリダイレクト
  • CRedir
  • CParamDlg(光学的綿毛のみ、必須ではありません)

CRedirectクラスは、新しいプロセスの作成と、stdin / stdout / stderrのリダイレクト(CRedirとの組み合わせ)を管理します。

CRedir::OnChildWriteニーズに合わせて変更し、-開始および-終了する必要があります。これらのメソッドは、実際にはコンテンツをビュー/テキストボックス/その他に書き込みます。これをどのように行うことができるかを見てCMainFrame::OnCopyData、理解することは役に立ちます。CQuickView::Append

于 2012-11-22T14:24:48.810 に答える