ここで説明されている記事とまったく同じことをしようとしています:「C++ MFC Feature Pack --> CDialog に複数の CDockablePanes を作成する」
私は彼の手順に従い、CDockablePane をドッキング解除して移動できるようになりましたが、ドッキングすると同じクラッシュが発生します。彼自身の回答では、彼は自分でダミーウィンドを作成したため、MFC は作成と GetTopLevelFrame() の呼び出しをスキップしたと述べています。そして、これは私が混乱した場所です.dummywndを正確に作成するにはどうすればよいですか?
2 番目の質問は、CMyFrame と CDialog の間でデータを交換するにはどうすればよいですか?
質問をして回答した人は、何年も活動がなく、連絡が取れないようです。誰でも助けてくれますか、何かアイデアがありますか?
ありがとう、
編集:
私はプログラムを壊し、他の著者が説明したように正確にトレースバックしました。上記のダミー ウィンドウは、実際には afxdragframeimpl.cpp にあります。
void CMFCDragFrameImpl::MoveDragFrame(BOOL bForceMove)
作成する場所:
m_pWndDummy = new CDummyDockablePane;
そして呼び出します:
m_pWndDummy->CreateEx(0, _T(""), AFXGetTopLevelFrame(m_pDraggedWnd), CRect(0, 0, 0, 0), FALSE, AFX_DUMMY_WND_ID, WS_CHILD);
はい、ダイアログで CFrameWndEx を子ウィンドウとして作成し、その CFrameWndEx に子 CDockablePane を追加しようとしています。
基本的に、いくつかのコントロールを備えた MFC ダイアログ A があり、このダイアログ A 内にいくつかのティアオフ タブ XYZ が必要であり、ティアオフ タブ XYZ のそれぞれにいくつかのコントロールを追加する必要があります。したがって、これは、切り離された各 tabsXYZ が実際には 1 つの子 dialogB であることを意味します。これは、dialogA 内で CDockablePanes (実際には CPaneDialog) を使用しようとするところに来ます。