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