次の方法で共有


CWinApp のその他のサービス

メッセージ ループを実行してアプリケーションを初期化し、その後にクリーンアップする機会を提供するだけでなく CWinApp は他のさまざまなサービスを提供します。

シェル登録

既定では、MFC アプリケーション ウィザードのアプリケーション ファイル エクスプローラーまたはファイル マネージャーで、ダブルクリックして作成したユーザーがデータ ファイルを開くことができます。 アプリケーションが MDI アプリケーションの場合、アプリケーションで作成されるファイルの拡張を指定すると、MFC アプリケーション ウィザードは RegisterShellFileTypes の呼び出しを追加し、生成したこと InitInstance への CWinAppEnableShellOpen のメンバー関数をオーバーライドします。

RegisterShellFileTypes は ファイル エクスプローラーまたはファイル マネージャーでアプリケーションのドキュメントの種類を登録します。 関数は、Windows が管理する登録データベースにエントリを追加します。 エントリは各ドキュメントの種類を登録し、ファイルの種類と拡張子を関連付け、アプリケーションが起動するコマンド ラインを指定し、その種類のドキュメントを開くダイナミック データ エクスチェンジ (DDE) のコマンドを指定します。

EnableShellOpen は アプリケーションがファイル エクスプローラーまたはファイル マネージャーから DDE コマンドを受け取るようにユーザーが選択するファイルを表示して、プロセスを終了します。

この CWinApp の自動登録サポートはアプリケーションの .reg ファイルを出荷するか、特別なインストール作業を行う必要がなくなります。

(InitInstance 関数の GdiplusStartup を呼び出して) アプリケーションの GDI+ を初期化したい場合は、GDI+ のバックグラウンド スレッドを抑制する必要があります。

TRUEGdiplusStartupInput 構造体の SuppressBackgroundThread のメンバーを設定することで、これを行うことができます。 GDI+ のバックグラウンド スレッドを抑制する場合は、NotificationUnhookNotificationHook と呼び出しはアプリケーションのメッセージ ループの追加と削除前に (GdiplusStartupOutputを参照してください) は行う必要があります。 したがって、GdiplusStartup を呼び出して適切な場所とフック通知関数は次に示すように仮想関数 CWinApp::Runメソッドをオーバーライドして、Overload:

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+ のスレッドを抑制する、DDE コマンドはアプリケーションのメイン ウィンドウが作成される前に途中に挿入できます。 シェルによって発行された DDE コマンドはエラー メッセージに、途中で、中止できます。

ファイル マネージャーのドラッグ アンド ドロップ

ファイル マネージャーまたはファイル エクスプローラーのファイル ビュー ウィンドウからアプリケーション ウィンドウにドラッグできます。 たとえば、一つ以上のファイルは、アプリケーションがファイル名を取得し、それらのファイルの MDI 子ウィンドウを開くことができる MDI アプリケーションのメイン ウィンドウにドラッグできるようにする場合があります。

アプリケーション ファイルのドラッグ アンド ドロップを有効にするには、MFC アプリケーション ウィザードは InitInstanceにメイン フレーム ウィンドウの CWndDragAcceptFiles メンバー関数の呼び出しを記述します。 ドラッグ アンド ドロップ機能を実装したくない場合は、その呼び出しを削除します。

注意

また、ドキュメントに汎用 OLE ドラッグ アンド ドロップ機能をドラッグ データ間または内部実装できます。詳細については、ドラッグ アンド ドロップ (OLE)記事を参照してください。

最近使用されたドキュメントを追跡できます。

ユーザーがファイルを開いたり閉じたりするため、アプリケーション オブジェクトは 4 回使用されたファイルが最後に記録します。 これらのファイルの名前はファイル メニューに追加され、変更されたときに更新されます。 フレームワークは、レジストリまたはプロジェクトと同じ名前の .ini ファイルにアプリケーションが起動するときにこれらのファイル名を保存し、ファイルから読み込みます。 MFC アプリケーション ウィザードで作成する InitInstance のオーバーライドはレジストリまたは .ini ファイルから情報を読み込む使用したファイル名を含む CWinApp のメンバー関数 LoadStdProfileSettingsの呼び出しを最後に含まれています。

これらのエントリは、次の形式で格納されます。:

  • Windows NT、Windows 2000 では、後で、レジストリ キー値に格納されます。

  • Windows 3.x で、値は WIN.INI ファイルに格納されます。

  • Windows 95 では、値は WIN.INI のキャッシュされたバージョンに格納されます。

参照

概念

CWinApp : アプリケーション クラス