CWinApp のその他のサービス
メッセージを実行するだけでなく、ループしてアプリケーションを初期化し、その後に消去する機会を指定 CWinApp は、他の一部のサービスを提供します。
シェルの登録
既定では、MFC アプリケーション ウィザードは、アプリケーションがファイル エクスプローラーまたはファイル マネージャーで、ダブルクリックして作成したユーザーがデータ ファイルを開くことができます。アプリケーションが MDI アプリケーションの場合、アプリケーションで作成されるファイルに拡張子を指定すると、MFC アプリケーション ウィザードに RegisterShellFileTypes の呼び出しを追加し、それに対して記述する InitInstance への CWinApp の EnableShellOpen のメンバー関数をオーバーライドします。
RegisterShellFileTypes はファイル エクスプローラーまたはファイル マネージャーは、アプリケーションのドキュメントの種類を登録します。関数は、Windows が管理する登録データベースにエントリを追加します。各エントリはドキュメントの種類を登録し、ファイルの種類とファイル拡張子を関連付け、アプリケーションを起動するコマンド ラインを指定し、その種類のドキュメントを開く (DDE) のダイナミック データ エクスチェンジ コマンドを指定します。
EnableShellOpen はファイル エクスプローラーまたはファイル マネージャーから DDE のコマンドを受け取るアプリケーションのユーザーによって選択されたファイルを開く許可によってプロセスを完了します。
この CWinApp の自動レジスタのサポートは、アプリケーションの .reg ファイルを出荷するか、特別なインストールの作業をする必要がなくなります。
( InitInstance の関数の GdiplusStartup を呼び出して) アプリケーションの GDI+ を初期化する場合は、GDI+ のバックグラウンド スレッドを抑制する必要があります。
TRUEへ GdiplusStartupInput の構造体の SuppressBackgroundThread のメンバーを設定することによってこれを行うことができます。GDI+ のバックグラウンド スレッドを抑制する場合、NotificationHook と NotificationUnhook の呼び出しは、アプリケーションのメッセージ ループに入ると終了する前に GdiplusStartupOutput (を参照) だけ行う必要があります。したがって、GdiplusStartup を呼び出す適切な場所、および通知フック関数は、次に示すように仮想関数 CWinApp::Runのオーバーライドにあります:
int CMyWinApp::Run()
{
GdiplusStartupInput gdiSI;
GdiplusStartupOutput gdiSO;
ULONG_PTR gdiToken;
ULONG_PTR gdiHookToken;
gdiSI.SuppressBackgroundThread = TRUE;
GdiplusStartup(&gdiToken,&gdiSI,&gdiSO);
gdiSO.NotificationHook(&gdiHookToken);
int nRet = CWinApp::Run();
gdiSO.NotificationUnhook(gdiHookToken);
GdiplusShutdown(gdiToken);
return nRet;
}
GDI+ のバックグラウンド スレッドを中止する、またはのコマンドは、アプリケーションにメイン ウィンドウが作成される前と同じように発行できます。シェルによって問題またはのコマンドは、エラー メッセージが同じように、中止できます。
ファイル マネージャーのドラッグ アンド ドロップ
ファイル マネージャーまたはファイル エクスプローラーのファイルのビュー] ウィンドウからアプリケーションのウィンドウにドラッグできます。たとえば、アプリケーションがそれらのファイルのファイル名と開いている MDI 子ウィンドウを取得する MDI アプリケーションのメイン ウィンドウにドラッグする一つ以上のファイルを有効にする場合があります。
アプリケーションのファイルのドラッグ アンド ドロップを有効にするには、MFC アプリケーション ウィザードに CWnd のメンバー関数 DragAcceptFiles に InitInstanceのメイン フレーム ウィンドウの呼び出しを書き込みます。ドラッグ アンド ドロップ機能を実装しない場合、の呼び出しを削除できます。
[!メモ]
OLE ドキュメントにデータ間、または内でドラッグ機能より一般的なドラッグ アンド ドロップを実装できます。詳細については、" " ドラッグ アンド ドロップ (OLE)を参照してください。
最近使用したドキュメントの追跡
ユーザーとしてファイルを、アプリケーション オブジェクト追跡される 4 種類の最近使用したファイルを開閉。これらのファイルの名前は [ファイル] メニューに追加され、変更された場合の更新されます。フレームワークは、プロジェクトとレジストリまたは同じ名前を持つ .ini ファイルに、アプリケーションの起動時にこれらのファイル名を格納し、ファイルから読み取ります。MFC アプリケーション ウィザードで作成する InitInstance のオーバーライドはレジストリまたは.INI ファイルの情報を読み込む最近使用したファイル名を含む CWinApp のメンバー関数 LoadStdProfileSettingsの呼び出しが含まれます。
これらのエントリは次のように格納されます:
Windows NT では、Windows 2000 は、後に、レジストリ キーに値に格納されます。
Windows 3.x では、値は WIN.INI ファイルに格納されます。
Windows 95 ではと、の値は WIN.INI のキャッシュされたバージョンに格納されます。