このノートでは、MFC 2.0 により提供される標準コマンドの実装について説明します。多くの標準コマンドの実装に使用されるメカニズムについて説明しますので、テクニカル ノート 21最初お読みください。 ください。
この説明では、MFC アーキテクチャ、Api、および一般的なプログラミングの知識を想定しています。文書として文書化されていない」実装のみ」Api を参照してください。これの機能または MFC でをプログラムする方法について学習を開始する場所ではありません。Visual の C++ プログラマのガイドのより一般的な情報と記載されている Api の詳細についてを参照してください。
問題
MFC は、ヘッダー ファイル AFXRES の多くの標準コマンド Id を定義します。H. フレームワーク サポートこれらのコマンドは異なります。どこで、どのようにこれらのコマンドは、framework クラスを処理を理解するだけでなく、フレームワーク内部で動作しますが、標準の実装をカスタマイズし、うまくいけば、あなた自身のコマンド ハンドラーを実装するためのいくつかのテクニックを教える方法に有用な情報を提供する方法を表示。
このテクニカル ノートの内容
各コマンド ID が 2 つのセクションに記載されています。:
ほとんどの既定のコマンド実装フレームワークの基本クラスのメッセージ マップに既に結び付けられています。派生クラスで明示的な配線を必要とするいくつかのコマンドの実装です。これらは「下注」を参照してください。AppWizard で正しいオプションを選択した場合は、これらの既定のハンドラーを生成されたスケルトン アプリケーションに接続されます。
名前付け規則
標準コマンドは、可能な場合に使用をお勧めします単純な名前付け規則に従います。最も標準的なコマンドは、標準の場所で、アプリケーションのメニュー バーに位置しています。コマンドのシンボリック名」メニュー項目の名前で、標準のポップアップ メニュー名、続いて id _「で開始します。シンボリック名は大文字でアンダー スコア単語の分割のです。標準メニュー項目名を持たないコマンドでは、論理名「id _」(たとえば、 ID_NEXT_PANE) 定義されます。
プリフィックス「id _」を使用して、メニュー項目、ツールバー ボタン、またはその他のコマンド ユーザー インターフェイス オブジェクトにバインドするように設計されているコマンドを指定します。「Id _」コマンドを処理するコマンド ハンドラーが MFC コマンド アーキテクチャのON_COMMANDおよびON_UPDATE_COMMAND_UIメカニズムを使用する必要があります。
コマンド アーキテクチャおよびメニュー固有のコードを有効にし、それらを無効にする必要がありますしないメニュー項目を標準の「idm _」プレフィックスを使用することをお勧めします。もちろん以来、次の MFC コマンド アーキテクチャ (ツールバーで作業するので) コマンド ハンドラーがより強力になりますだけでなく、コマンド ハンドラーのコードを再利用でき、特定のメニュー コマンドの数は小さなする必要があります。
ID の範囲
テクニカル ノート 20 ID 範囲の MFC の使用の詳細についてを参照してください。
MFC の標準コマンドとする 0xEFFF の範囲に落ちる。以来は、ライブラリの将来のバージョンで変更してくださいこれらの Id の特定の値に依存しません。
アプリケーションは、0x8000 から 0 xdfff の範囲でそのコマンドを定義する必要があります。
標準コマンド Id
各コマンド ID は、ファイルのプロンプトを見つけることができる標準のメッセージ行プロンプト文字列です。RC。そのメニューのプロンプトの文字列 ID は、コマンド ID と同じである必要があります。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
CWinApp::OnFileNewこのコマンドにより異なる方法でドキュメント テンプレートの数のアプリケーションを実装します。1 つだけCDocTemplateがある場合は、 CWinApp::OnFileNew適切なフレームとビューのクラスと同様にその型の新しいドキュメントを作成します。
1 つ以上CDocTemplateがある場合は、 CWinApp::OnFileNewを使用するドキュメント タイプを選択できるダイアログ ボックス (AFX_IDD_NEWTYPEDLG) プロンプトを出します。選択したCDocTemplateを使用して、ドキュメントを作成します。
ID_FILE_NEWの 1 つの一般的なカスタマイズは別のドキュメントの種類のより多くのグラフィカルな選択肢を提供することです。この場合、独自のCMyApp::OnFileNewを実装、それをメッセージ マップにCWinApp::OnFileNewの代わりに配置できます。基本クラス実装を呼び出す必要はありません。
ID_FILE_NEWの別の一般的なカスタマイズは各タイプのドキュメントを作成するため、別のコマンドを提供することです。この場合は新しいコマンド Id、ID_FILE_NEW_CHART や ID_FILE_NEW_SHEET などを定義する必要があります。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
CWinApp::OnFileOpenを開くには:opendocumentfileで、ファイルのファイルまたはパス名に続くCWinApp::DoPromptFileNameを呼び出すは非常に単純な実装があります。CWinApp実装ルーチンDoPromptFileName標準の FileOpen ダイアログを起動し、現在のドキュメント テンプレートから取得したファイルの拡張子を塗りつぶします。
1 つの一般的なカスタマイズのID_FILE_OPEN FileOpen ダイアログをカスタマイズしたり、追加のファイル フィルターを追加することです。これをカスタマイズするための推奨方法は、独自 FileOpen ダイアログの既定の実装を置き換えるし、ドキュメントのファイル名またはパス名と:opendocumentfileを呼び出すことです。基本クラスを呼び出す必要はありません。
CDocument::OnFileClose場合は、変更されている、 OnCloseDocumentを呼び出して、文書を保存するよう求めるには、 CDocument::SaveModifiedを呼び出します。ドキュメントの破棄を含む、すべての終了ロジックをOnCloseDocumentルーチンで行われる。
注特価;ID_FILE_CLOSE行為、 WM_CLOSEメッセージまたはドキュメント フレーム ウィンドウに送信されます、 SC_CLOSEシステム コマンドと異なります。場合にのみ、ドキュメントを表示、最後のフレーム ウィンドウは、ウィンドウを閉じて、ドキュメントは閉じます。ドキュメントを閉じてID_FILE_CLOSEのみ、文書を閉じますされませんが、ドキュメントを表示するすべてのフレーム ウィンドウを閉じます(&N)。
実装、ヘルパー ルーチン文書とOnFileSaveAsの両方に使用されるCDocument::DoSaveを使用します。前に保存されていない文書を保存するかどうか (つまり、それパス名、FileNew としての場合ではありません) または読み取り専用ドキュメントから読み取りされた、文書ロジックの行動、 ID_FILE_SAVE_ASコマンドのようなされ、新しいファイル名を提供するようにユーザーに依頼します。ファイルを開くと、保存を行う、実際のプロセスは、仮想関数OnSaveDocumentを使用されます。
ID_FILE_SAVEをカスタマイズする 2 つの一般的な理由があります。保存しない文書では、単に、 ID_FILE_SAVEメニュー項目とツールバー ボタンは、ユーザー インターフェイスからを削除します。また、ドキュメント (つまり、決して呼び出しCDocument::SetModifiedFlag) を決して汚れたし、フレームワークが保存するドキュメントが原因ことを確認します。ディスク ファイル以外のどこかに保存しているドキュメントの場合は、新しいコマンドをその操作の定義します。
COleServerDocの場合、 ID_FILE_SAVE両方ファイルを (通常のドキュメント) の保存とファイル更新 (埋め込まれたドキュメント) の使用です。
個々 のディスク ファイルでは、ドキュメント データが格納されますが、デフォルトを使用したくない場合CDocumentのシリアル化実装、文書の代わりにCDocument::OnSaveDocumentをオーバーライドする必要があります。
CDocument::OnFileSaveAs実装、同じのCDocument::DoSaveヘルパー ルーチン文書として使用します。場合は、ドキュメントのファイル名、保存の前にいたOnFileSaveAsコマンドだけID_FILE_SAVEとして処理されます。COleServerDoc::OnFileSaveAsは通常のドキュメントのデータ ファイルを保存するロジックを実装する埋め込みにはサーバー ドキュメントを保存、OLE オブジェクトを表すいくつか他のアプリケーションを別のファイルとして。
ID_FILE_SAVEのロジックをカスタマイズする場合は、おそらくID_FILE_SAVE_AS同様の方法でカスタマイズします。 または「名前を付けて保存」の操作をドキュメントに適用されません。それが必要ない場合、メニュー バーからメニュー項目を削除することができます。
ドキュメント オブジェクト」を基になるファイルに保存した後接続されていない」、 COleServerDoc::OnFileSaveCopyAsの実装にCDocument::OnFileSaveAs、非常に似ています。「保存する前にメモリにドキュメントが変更された場合、は、それまだ"変更されている」。また、このコマンドは、パス名またはタイトル、ドキュメントの保存に及ぼすをです。
COleServerDoc::OnUpdateDocument実装 notifiies 単に保存、埋め込み先となるコンテナー。コンテナーは、[埋め込みオブジェクトを保存するために、適切な OLE Api を呼び出す。
現在このダイアログ ボックスの標準がないし、フレームワークはこのコマンドの既定の実装を持たない。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
プリンターをカスタマイズし、少なくとものための設定を印刷するには、ユーザーが [標準印刷セットアップ] ダイアログ ボックスのこのコマンドを呼び出すこのドキュメントまたはほとんどのすべてのドキュメントでこのアプリケーション。システム全体の既定のプリンター設定を変更するには、コントロール パネルを使用する必要があります。
CWinApp::OnFilePrintSetupを使う CPrintDialogオブジェクトを作成して、 CWinApp::DoPrintDialogの実装関数の呼び出しは非常に単純な実装があります。これは、アプリケーションの既定のプリンター設定を設定します。
このコマンドをカスタマイズするための一般的な必要が保存すると、ドキュメントを保存する必要がありますドキュメント プリンターの設定を許可することです。これを行うに使う CPrintDialogオブジェクトを作成し、適切なプリンター属性 (通常hDevModeおよびhDevNames) を初期化します、 CDocumentクラスのメッセージ マップ ハンドラーを追加、 CPrintDialog::DoModalを呼び出すし、変更されたプリンター設定を保存する必要があります。堅牢な実装については、 CWinApp::DoPrintDialogの実装でエラーとCWinApp::UpdatePrinterSelectionの実用的な既定値を扱うとシステム全体のプリンターの変更を追跡を検出するため見てする必要があります。
注特価;これをCViewに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
このコマンドは、現在のドキュメントを印刷またはもっと正確には、標準の印刷ダイアログを呼び出すと、印刷のエンジンを実行している必要があります、印刷プロセスを開始。
CView::OnFilePrintには、このコマンドは、メインの印刷ループを実装します。[印刷] ダイアログ ボックスでユーザーのプロンプトを表示するには、仮想のCView::OnPreparePrintingを呼び出します。出力をプリンターに DC を準備、印刷の進行状況ダイアログ (AFX_IDD_PRINTDLG) を起動し、 StartDocエスケープがプリンタに送信します。CView::OnFilePrintには、メイン ページ指向の印刷ループも含まれています。各ページは、 StartPageエスケープで続いて、そのページの仮想CView::OnPrintを呼び出す、仮想CView::OnPrepareDCを呼び出します。完了すると、仮想CView::OnEndPrintingが呼び出され、印刷の進行状況ダイアログを閉じた。
MFC の印刷アーキテクチャは、印刷と印刷プレビューに対して多くの異なる方法でフックに設計されています。通常、さまざまなCViewのオーバーライド可能な関数の任意ページ指向の印刷タスクを適切なを検索できます。非ページ指向の出力をプリンターを使用して、アプリケーションのみの場合、id_file_printする必要性を見つける必要があります。
注特価;これをCViewに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
CView::OnFilePrintPreviewは、文書化されたヘルパー関数CView::DoPrintPreviewを呼び出すことによって、印刷プレビュー モードを開始します。ちょうどOnFilePrintメイン エンジンは印刷ループをCView::DoPrintPreview印刷プレビューのループのメイン エンジンです。
印刷プレビュー操作DoPrintPreviewにパラメーターを渡すこと、さまざまな方法でカスタマイズできます。いくつかの印刷プレビューとそれをカスタマイズする方法の詳細について説明しますテクニカル ノート 30を参照してください。
CWinApp::OnUpdateRecentFileMenu ON_UPDATE_COMMAND_UI機構のより高度な使用の 1 つは、更新コマンド UI ハンドラーです。メニュー リソース、ID ID_FILE_MRU_FILE1を 1 つのメニュー項目を定義することのみ必要があります。そのメニュー項目が最初に無効になります。
MRU リストが大きくなるより多くのメニュー項目をリストに追加されます。標準のCWinApp実装デフォルトの 4 つの標準の制限を最近使用したファイル。大きいまたは小さい値にCWinApp::LoadStdProfileSettingsを呼び出すことによって、デフォルトを変更できます。MRU リストは、アプリケーションに格納されます。INI ファイル。LoadStdProfileSettingsを呼び出すし、アプリケーションの終了時に保存される場合、リスト、アプリケーションのInitInstance関数で読み込まれます。MRU の更新コマンド UI ハンドラーも絶対パスから相対パス [ファイル] メニューの表示に変換されます。
CWinApp::OnOpenRecentFileは、実際のコマンドを実行、 ON_COMMANDハンドラーです。それ単にファイル名を MRU リストと呼び出し:opendocumentfileファイルを開くの MRU 一覧を更新するすべての作業からを取得します。
このコマンドのハンドラーのカスタマイズをお勧めしません。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、 CEdit::Clearを使用してこのコマンドの実装を提供します。現在選択されていない場合、コマンドが無効です。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧めMFC のチュートリアル サンプルを参照してください 走り書きの実装例。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、このコマンドは、現在選択されているテキストをクリップボードに CF_TEXT としてCEdit::Copyを使用してコピーの実装を提供します。現在選択されていない場合、コマンドが無効です。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、このコマンドは、現在選択されているテキストをクリップボードに CF_TEXT としてCEdit::Cutを使用してカットの実装を提供します。現在選択されていない場合、コマンドが無効です。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、実装のヘルパー関数を使用して、前の検索/置換設定をプライベート変数に保存するには、 OnEditFindReplaceを呼び出してこのコマンドは、の実装を提供します。CFindReplaceDialogクラスを使用して、ユーザーはモードレス ダイアログ ボックスを管理するには。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、 CEdit::Pasteを使用して、選択したテキストを置き換えます、現在のクリップボードのデータをコピーするこのコマンドの実装を提供します。クリップボードにCF_TEXTがない場合、コマンドが無効です。
COleClientDocはこのコマンドでは、更新コマンド UI ハンドラーを提供します。クリップボードに、埋め込み可能な OLE アイテムや ole オブジェクトが含まれていない場合、コマンドは無効になります。あなたは、実際の貼り付けを行うには、実際のコマンドのハンドラーを記述するための責任です。OLE アプリケーションが他の形式も貼り付けることができる場合は、独自更新コマンド UI ハンドラーをビューまたはドキュメントに (つまり、 COleClientDocコマンドをターゲット前に、のどこかのルーティング) を提供する必要があります。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
標準の OLE 実装を置き換えるため、 COleClientItem::CanPasteを使用します。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
COleDocumentだけこのコマンド、更新コマンド UI ハンドラーを提供します。クリップボードにリンク OLE アイテムや ole オブジェクトが含まれていない場合、コマンドは無効になります。あなたは、実際の貼り付けを行うには、実際のコマンドのハンドラーを記述するための責任です。OLE アプリケーションが他の形式も貼り付けることができる場合は、独自更新コマンド UI ハンドラーをビューまたはドキュメントに (つまり、 COleDocumentコマンドをターゲット前に、のどこかのルーティング) を提供する必要があります。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
標準の OLE 実装を置き換えるため、 COleClientItem::CanPasteLinkを使用します。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-クラスを派生します。MFC にはこのダイアログ ボックスはありません。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、最後の検索操作を繰り返すには、このコマンドの実装を提供します。プライベート変数の最後の検索が使用されます。検索は試行することができる場合、コマンドは無効です。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、実装のヘルパー関数を使用して、前の検索/置換設定をプライベート変数に保存するには、 OnEditFindReplaceを呼び出してこのコマンドは、の実装を提供します。CFindReplaceDialogクラスを使用して、求めるモードレス ダイアログ ボックスを管理するには。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、このコマンドは、ドキュメント内のすべてのテキストを選択の実装を提供します。選択するテキストがない場合、コマンドが無効です。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
CEditViewは、 CEdit::Undoを使用して、このコマンドの実装を提供します。CEdit::CanUndoが FALSE を返した場合、コマンドは無効です。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在このコマンドの標準の実装はありません。各CViewのこれを実装する必要があります-派生クラス。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
現在のドキュメントのドキュメント テンプレートを使用して、現在のドキュメントの別のビューを含む別のフレームを作成するCMDIFrameWnd::OnWindowNewこの強力な機能を実装します。
アクティブな MDI 子ウィンドウがない場合、コマンドほとんど複数ドキュメント インターフェイス (MDI) ウィンドウのメニュー コマンドのように、無効になっています。
このコマンドのハンドラーのカスタマイズはお勧めしません。追加のビューやフレーム ウィンドウを作成するコマンドを提供する場合は、あなた独自のコマンドを発明をより良いでしょう。CMDIFrameWnd::OnWindowNewからコードのクローンを作成し、あなたの好みの特定のフレームとビュー クラスに変更することができます。
CMDIFrameWndこの標準の MDI コマンドを実装ヘルパー関数OnMDIWindowCmdを実装します。このヘルパー MDI ウィンドウ メッセージのコマンド Id をマップし、したがってコードの多くを共有することができます。
アクティブな MDI 子ウィンドウがない MDI ウィンドウ メニューのほとんどのコマンドのように、このコマンドは使えません。
このコマンドのハンドラーのカスタマイズをお勧めしません。
CMDIFrameWndこの標準の MDI コマンドを実装ヘルパー関数OnMDIWindowCmdを実装します。このヘルパー MDI ウィンドウ メッセージのコマンド Id をマップし、したがってコードの多くを共有することができます。
アクティブな MDI 子ウィンドウがない MDI ウィンドウ メニューのほとんどのコマンドのように、このコマンドは使えません。
このコマンドのハンドラーのカスタマイズをお勧めしません。
このコマンドは、 CMDIFrameWnd ID_WINDOW_CASCADEと同様に実装されて、以外の別の MDI ウィンドウ メッセージ、操作に使用されます。
アプリケーションの既定の整列方向を選ぶ必要があります。ID_WINDOW_TILE_HORZまたはID_WINDOW_TILE_VERTのいずれかにウィンドウ「タイル」メニュー項目 ID を変更することによってこれを行うことができます。
このコマンドは、 CMDIFrameWnd ID_WINDOW_CASCADEと同様に実装されて、以外の別の MDI ウィンドウ メッセージ、操作に使用されます。
アプリケーションの既定の整列方向を選ぶ必要があります。ID_WINDOW_TILE_HORZまたはID_WINDOW_TILE_VERTのいずれかにウィンドウ「タイル」メニュー項目 ID を変更することによってこれを行うことができます。
CView CSplitterWnd実装このコマンドを処理します。ビューが分割ウィンドウの一部の場合は、このコマンドを実装関数CSplitterWnd::DoKeyboardSplitにデリゲートします。これは、モードでは、分割または分割ウィンドウの分割を解除するとキーボード ユーザーできます、スプリッターを配置します。
ビューが分割ウィンドウ内ではない場合にこのコマンドが無効になります。
このコマンドのハンドラーのカスタマイズをお勧めしません。
アプリケーションの情報ボックスの標準の実装はありません。デフォルトの AppWizard で作成されたアプリケーションは、アプリケーションのカスタム ダイアログ クラスを作成し、あなたについてのボックスとして使用します。AppWizard は、また、このコマンドを処理し、ダイアログを起動するコマンド ハンドラーを書きます。
ほとんどは、常にこのコマンドを実装します。
CWinApp::OnAppExitは、アプリケーションのメイン ウィンドウにWM_CLOSEメッセージを送信することによって、このコマンドを処理します。標準の (変更されたファイルの確認)、アプリケーションのシャット ダウン、cframewnd で処理されます。
このコマンドのハンドラーのカスタマイズはお勧めしません。CWinApp::SaveAllModifiedまたはCFrameWndをオーバーライド ロジックを閉じるお勧め。
このコマンドを実装する場合は、このコマンド ID を使用することをお勧め。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
CWinApp::OnHelpIndex自明cwinapp::winhelpを呼び出すことによってこのコマンドを処理します。
このコマンドのハンドラーのカスタマイズをお勧めしません。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
CWinApp::OnHelpUsing自明cwinapp::winhelpを呼び出すことによってこのコマンドを処理します。
このコマンドのハンドラーのカスタマイズをお勧めしません。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
CWinApp::OnContextHelpヘルプ モード カーソルを設定、モーダル ループに入るとヘルプするウィンドウを選択するには、ユーザーを待ってこのコマンドを処理します。テクニカル ノート 28に、MFC のヘルプの実装の詳細についてを参照してください。
このコマンドのハンドラーのカスタマイズをお勧めしません。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
CWinApp::OnHelpは、アプリケーションの現在のコンテキストを正しいヘルプ コンテキストを取得することによって、このコマンドを処理します。これは、簡単な F1 ヘルプ処理、メッセージ ボックスのように役立ちます。テクニカル ノート 28 MFC ヘルプ実装の詳細についてを参照してください。
このコマンドのハンドラーのカスタマイズをお勧めしません。
注特価;この、 CWinAppに接続する必要があります-この機能を有効にするのにはクラスのメッセージ マップの派生(&N)。
このコマンドは、通常CWinApp::OnHelpIndexにマップされています。
既定のヘルプ、ヘルプの索引の区別が必要な場合、異なるコマンド ハンドラーを提供することができます。
CView CSplitterWnd実装このコマンドを処理します。ビューが分割ウィンドウの一部の場合は、このコマンドを実装関数CSplitterWnd::OnNextPaneCmdにデリゲートします。これは、分割での次のペインに、アクティブなビューを移動します。
このコマンドには、ビューが分割ウィンドウ内ではありませんかに行く次のペインがない場合無効になっています。
このコマンドのハンドラーのカスタマイズをお勧めしません。
CView CSplitterWnd実装このコマンドを処理します。ビューが分割ウィンドウの一部の場合は、このコマンドを実装関数CSplitterWnd::OnNextPaneCmdにデリゲートします。これはスプリッターの前のペインに、アクティブなビューを移動します。
このコマンドには、ビューが分割ウィンドウ内ではないまたは前のペインに移動するがない場合無効になっています。
このコマンドのハンドラーのカスタマイズをお勧めしません。
現在このコマンドの標準の実装はありません。あなたのCViewこれを実装する必要があります-派生クラスで現在の選択範囲を新しい OLE アイテムや ole オブジェクトを挿入するには。
すべての OLE クライアント アプリケーションは、このコマンドを実装する必要があります。AppWizard、OLE オプションでは、 OnInsertObjectのスケルトン実装を完了する必要があります、ビュー クラスで作成します。
MFC OLE のサンプルを参照してください OCLIENT例このコマンドの完全な実装について。
COleDocumentを標準の OLE リンク] ダイアログ ボックスの MFC の実装を使用してこのコマンドを処理します。このダイアログ ボックスの実装はCOleLinksDialogクラスを通してアクセスします。現在のドキュメントにリンクがない場合は、コマンドが無効です。
このコマンドのハンドラーのカスタマイズをお勧めしません。
COleDocumentこのコマンド ID の範囲は、現在選択されている OLE アイテムや ole オブジェクトでサポートされている動詞を使用します。指定された OLE アイテムや ole オブジェクト型はゼロ個以上のカスタム動詞をサポートできるのでこの範囲を指定する必要があります。アプリケーションのメニューでは、 ID_OLE_VERB_FIRSTの 1 つのメニュー項目の ID が必要です。プログラムを実行すると、適切なメニューの動詞の説明 (または多くの動詞をポップアップ メニュー) で、メニューが更新されます。OLE メニューの管理AfxOleSetEditMenuこのコマンドの更新コマンド UI ハンドラーで行う、によって処理されます。
この範囲内のコマンド ID の各処理を明示的なコマンド ハンドラーはありません。COleDocument::OnCmdMsgをオーバーライドしてこの範囲内のすべてのコマンド Id をトラップ、0 から始まる動詞番号に入れます ( COleClientItem::DoVerbを使用)、動詞をサーバーを起動するには。
カスタマイズまたはこのコマンド ID の範囲の他の使用はお勧めしません。
このコマンドおよび更新コマンド UI ハンドラーがツールバーの表示状態を切り替えるには、 cframewnd クラスを処理します。ツールバーは、フレームの子ウィンドウの子ウィンドウ ID AFX_IDW_TOOLBARの必要があります。コマンド ハンドラー実際には、ツールバーのウィンドウの可視性を切り替えます。CFrameWnd::RecalcLayoutを使用して、その新しい状態で、フレーム ウィンドウ、ツールバーを再描画します。ツールバーが表示されているときメニュー項目の更新コマンド UI ハンドラーをチェックします。
このコマンドのハンドラーのカスタマイズはお勧めしません。追加のツールバーを追加する場合は、クローンを作成し、コマンド ハンドラーおよび更新コマンド UI ハンドラーはこのコマンドを変更する必要。
除いて、別の子ウィンドウ ID (AFX_IDW_STATUS_BAR) を使用このコマンドはCFrameWnd ID_VIEW_TOOLBARと同様に実装されています。
更新専用のコマンド ハンドラー
ステータス バーのインジケーターとして使用されるいくつかの標準コマンドの Id です。これらは、同じ更新コマンド UI 処理機構アプリケーションのアイドル時に、現在の状態を表示します。ユーザーが選択できないので (は、ステータス バーのペインをプッシュすることはできません)、それはON_COMMANDハンドラーはこれらのコマンド Id が意味を成していないし。
これらのすべての 3 つは、 CFrameWnd::OnUpdateKeyIndicator、コマンド ID を使用して、適切な仮想キーにマップする実装ヘルパーで実装されます。一般的な実装を有効または無効にします (無効にステータス ウィンドウを = 本文なし)、適切な仮想キーが現在ロックされているかどうかに応じて、 CCmdUIオブジェクト。
このコマンドのハンドラーのカスタマイズをお勧めしません。
現在これらの指標の標準実装はありません。
これらの指標を実装する場合は、使用してこれらのインジケーター Id と、ステータス バーのインジケーターの順序を維持をお勧めします (つまり、この順序で: EXT、キャップ、NUM、SCRL、上書、REC)。
番号順テクニカル ノート|nbsp;カテゴリ別テクニカル ノート(&N)