4

私はまだ MFC のデータ取得プログラムに取り組んでおり、Document/View アーキテクチャでの作業に行き詰まっています。基本的に、アプリケーションにいくつかのウィンドウが必要です。1 つは高速カメラから記録されたビデオを表示するために使用され、もう 1 つは DAQ システムからのデータを表示するプロットを持っており、もう 1 つはカメラと DAQ などを構成するためのコントロールを持っています。

したがって、実際には、通常は異なるソースからのデータの一部を表示するモードレス ウィンドウが多数あります。さて、アプリケーション ウィザードを使用して、Doc/View と混同してしまいます。無効にすることはできますが、技術的には無効ではありません。それはさておき、モードレスのダイアログとフォームビューを開こうとしましたが、すべて成功しませんでした。ほとんどの場合、新しいビューを開く方法がわかりません。ドキュメントはあまり役に立ちません。リボン ボタン コマンドからモーダル プロット ダイアログを開くことができました。

私のアプリケーションを Doc/View アーキテクチャに適合させたり、別のアプリケーション内からモードレス ダイアログや FormView を開いたりするのに役立つ洞察を持っている人はいますか? 私は Microsoft Visual Studio 2010 を使用しており、MFC と C++ を使用しています。

編集:

そこで、MDI を使用して、表示するすべてのデータを処理する 1 つのドキュメントを作成します。私が今立ち往生しているのは、私が望む複数のウィンドウを作成する方法です。CFormView をドキュメントのグラフ ビューにサブクラス化し、メニュー ボタンをクリックしたときにそのウィンドウを作成しようとしています。次のように、モーダルダイアログでそれを行うことができました:

void CDAQUniversalApp::OnScopebtn()
{
    // TODO: Add your command handler code here
    CScopeDlg dlg = new CScopeDlg(); //CScopeDlg is Subclass of CDialog
    dlg.DoModal();
}

それは機能しましたが、私が望むものではなかったので、これを試しましたが、まったく機能しませんでした:

    m_pScopeTemplate = new CMultiDocTemplate(
        IDD_SCOPEFORMVIEW,
        RUNTIME_CLASS(CDAQUniversalDoc),
        RUNTIME_CLASS(CMDIChildWnd),
        RUNTIME_CLASS(CScopeFormView)); //Subclass of CFormView
    if (!m_pScopeTemplate)
        return FALSE;

void CDAQUniversalApp::OnScopebtn()
{
    // TODO: Add your command handler code here
    CMDIChildWnd* pFrame = NULL;
    pFrame = DYNAMIC_DOWNCAST(CMDIChildWnd, CWnd::GetActiveWindow());
    CMDIChildWnd *pScopeFrame = (CMDIChildWnd*)m_pScopeTemplate->CreateNewFrame(pFrame->GetActiveDocument(), NULL);
    if (pScopeFrame == NULL)
        return;
    m_pScopeTemplate->InitialUpdateFrame(pScopeFrame, pFrame->GetActiveDocument(), TRUE);

}

これにより、未処理の例外が発生します。私は本当に、ドキュメンテーション コードのほとんど役に立たないさまざまなセクションを見つけて、必要と思われるものに変更することで、その時点まで自分の道を力ずくで突き進んだだけです。

4

1 に答える 1

3

さまざまなウィンドウ (ビデオ表示、データ表示、構成用) は、実際には、データを管理する単一のドキュメントのすべてのビュー (さまざまなビュー クラス) です (DAQ がビデオ データで動作すると仮定しますか?)。

アプリケーションを MDI アプリにパックして、メイン ウィンドウを作成し、これらすべての異なるビューをサブウィンドウとして使用することをお勧めします。したがって、1 つのドキュメント (または MDI の複数のドキュメント) に対して複数のビューがあります。

アプリケーションが従来のドキュメント/ビュー アーキテクチャ (たとえば Word など) に適合しない場合、MFC は苦痛になる可能性がありますが、アプリケーションをこのフレームワークに適合させるにはこれが最善の方法だと思います。

于 2011-05-08T22:01:05.837 に答える