ユーザがSDIアプリケーションで新しいドキュメントを作成するとき、最初に置くドキュメントの詳細を指定するダイアログを表示する必要があります(考えられるもの:解像度、ビット深度など) OnNewDocument()でこのダイアログを表示するコード(既存のドキュメントを開くときには必要ありません)が、ドキュメントクラスにユーザーインターフェイスコードを配置するだけでは気になりません(また、 CWnd *をダイアログの親として使用する)。
MFCでこれを行うのに適した場所はありますか?MFCで新しいドキュメントを設定する
答えて
あなたはそうです、ドキュメントクラスはUIのための良い場所ではありません。
CDocTemplate::[OpenDocumentFile][1](pszPath)
は、より良い候補者のようになります。
pszPathは== NULLは '新しい文書を作成する' という意味します。
メソッドは仮想である - ちょうどので、私はそれを置くのに良い場所だと思い、このクラスは、ドキュメント、フレームとビューを作成する責任があるCSingleDocTemplate
からCMySingleDocTemplate
を導出し、CMyWinApp::InitInstance().
で、このクラスのインスタンスを使用します> UI操作。
BOOL CMyWinApp::InitInstance()
{
...
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CMySingleDocTemplate(// <--Derives from CSingleDocTemplate
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMyView));
AddDocTemplate(pDocTemplate);
...
}
CDocument* CMySingleDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,
BOOL bMakeVisible)
{
CDocument *pDoc =
CSingleDocTemplate::OpenDocumentFile(lpszPathName, bMakeVisible);
if (lpszPathName==NULL)
{
// GUI to get user info
// update doc
m_pOnlyDoc->Blah(input);
// update view
m_pOnlyDoc->UpdateAllViews(NULL,...,...);
}
}
これは理想的ではないかもしれませんが、SDIには唯一のdocオブジェクトがあります。ファイル/ロードとファイル/新規操作の間で再利用されます。
この機能は、初めてと呼ばれ、の最初のメインフレームが作成されます。フレームが作成される前に、ユーザにというダイアログを表示させたくない場合があります。おお!これはもう少し複雑です: 上記のようにOpenDocumentFile(NULL)でGUIをポップアップするのではなく、投稿メインフレームにカスタムメッセージ/コマンドを投稿するだけです。その後、シーケンスポップアップGUI /更新のdoc/updateビューによって反応するハンドラを追加します。そうすることで、メインフレームが表示されてからGUIがポップアップされ、ユーザーはより幸せになれます。
これはまた、CWndの親を持たない場合の問題を解決します。メインフレームはすでに作成されており、ダイアログはデフォルトでそれを使用します。
もう1つの解決策は、CMyWinAppのメッセージマップにID_FILE_NEWのコマンドハンドラを追加し、独自のOnFileNew()のオーバーライドを追加することです。しかし、あなたがOnFileNew()を書くとき、あなたはすぐにそれが醜い解決策であることを知っていると信じています:-(
- 1. タイマを使用してMFCドキュメント/ビューアプリケーションを更新する
- 2. Mongoose:ドキュメントを更新するときにドキュメント参照の新しい配列を設定する
- 3. CFileDialog(MFC)のフォルダビューを設定する
- 4. mfc C++ editboxを繰り返し設定するには?
- 5. 古い設定ファイルと新しい設定ファイルをマージする
- 6. 古いMFCプロジェクトのUTF-8を新しいMFCに変換しました
- 7. mfcプロジェクトで新しいウィンドウを作成する方法
- 8. は、Tomcatの設定でドキュメント
- 9. 新しいドメインを設定するハートインターネット
- 10. 特定のシートを新しいドキュメントにコピーする - Excel VBA
- 11. 新しいドメインのDNS設定を設定する
- 12. Officeドキュメントの設定
- 13. MFCアプリケーション内のウィンドウのサイズを設定します
- 14. MFC - D3DCOLORVALUEがベースMFCアプリケーションで未定義
- 15. sphinx(ドキュメント)のDjango設定を設定する
- 16. InDesignスクリプティング - 開いているドキュメントの余白を設定する
- 17. 新しいリスナーを設定しないでonOptionsItemSelected()を更新する
- 18. DocumentDB Rest API - 新しいドキュメントのドキュメントIDを作成する
- 19. 複数のドキュメント/ビューのMFCスプリッタウィンドウ
- 20. メニュー項目mfcのチェックを設定する方法C++
- 21. MFC/C++の設定ファイルの値を変更する方法
- 22. MFCスレッドにタイムアウトを設定する方法
- 23. AsyncTaskでフラグメント化する新しいTextViewを設定します
- 24. MFC(VC++)ツリービューコントロールの新しいプロパティを作成する方法は?
- 25. log4cplus.propertiesファイルの設定に関するドキュメント
- 26. Visual Studioで新しい設定用の設定ファイルを追加します
- 27. Djangoは以下の設定で新しいDjangoアプリケーションの設定
- 28. Androidを使用してテキストサイズを設定するPDFドキュメント/キャンバスサイズに基づいてPDFドキュメントを作成する
- 29. MFCのタブ付きドキュメント - 中マウスボタンでドキュメントを閉じる方法を教えてください。
- 30. SolrドキュメントでTTLを更新する際に特定のフィールドに設定する方法