チュートリアル: アプリケーションへの CTaskDialog の追加
このチュートリアルでは、CTaskDialog クラスの概要と、それをアプリケーションに追加する方法について説明します。
CTaskDialog は、Windows Vista の Windows メッセージ ボックスに置き換わるタスク ダイアログ ボックスです。 CTaskDialog は Windows メッセージ ボックスを改良したものであり、機能も向上しています。 Visual Studio では、Windows メッセージ ボックスも引き続きサポートされます。
注意
Windows Vista よりも前の Windows では、CTaskDialog がサポートされません。 プログラムで、以前のバージョンの Windows でアプリケーションを実行するユーザーにもメッセージを表示するには、代替のダイアログ ボックス オプションを用意しておく必要があります。 静的メソッドである CTaskDialog::IsSupported を使用することで、ユーザーのコンピューターで CTaskDialog を表示できるかどうかを実行時に確認することができます。 また、CTaskDialog を使用できるのは、アプリケーションが Unicode ライブラリを使用してビルドされている場合に限られます。
CTaskDialog では、情報の収集と表示のためのオプション要素がいくつかサポートされています。 たとえば、CTaskDialog ではコマンド ライン、カスタム ボタン、カスタム アイコン、フッターを表示することができます。 さらに、CTaskDialog には、タスク ダイアログ ボックスの状態を照会し、ユーザーの選択したオプション要素を判別するためのメソッドもいくつか用意されています。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
Visual Studio 2010
Windows Vista
CTaskDialog による Windows メッセージ ボックスの置き換え
以降の手順では、CTaskDialog の最も基本的な使用法である、Windows メッセージ ボックスの置き換えについて説明します。 この例では、タスク ダイアログ ボックスに関連付けられているアイコンも変更します。 アイコンを変更することで、CTaskDialog の外観を Windows メッセージ ボックスと同一にします。
CTaskDialog によって Windows メッセージ ボックスを置き換えるには
既定の設定で、新しい MFC アプリケーション プロジェクトを作成します。 このプロジェクトに MyProject という名前を付けます。
ソリューション エクスプローラーを使用して、MyProject.cpp を開きます。
一連の include の末尾に、#include "afxtaskdialog.h" を追加します。
CMyProjectApp::InitInstance メソッドを探します。 次のコード行を return TRUE; ステートメントの前に追加します。 このコードにより、Windows メッセージ ボックスまたは CTaskDialog で使用する文字列を作成します。
CString message("My message to the user"); CString dialogTitle("My Task Dialog title"); CString emptyString;
手順 4. のコードの後ろに、次のコードを追加します。 このコードによって、ユーザーのコンピューターで CTaskDialog がサポートされることが保証されます。 CTaskDialog がサポートされない場合、代わりに Windows メッセージ ボックスを表示します。
if (CTaskDialog::IsSupported()) { } else { AfxMessageBox(message); }
手順 5. の if ステートメントの後のかっこ内に、次のコードを挿入します。 このコードによって、CTaskDialog が作成されます。
CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON);
その次の行に、次のコードを追加します。 このコードによって、警告アイコンを設定します。
taskDialog.SetMainIcon(TD_WARNING_ICON);
その次の行に、次のコードを追加します。 これにより、タスク ダイアログ ボックスを表示します。
taskDialog.DoModal();
CTaskDialog で Windows メッセージ ボックスと同じアイコンを表示しない場合は、手順 7. を省略できます。 手順 7. を省略した場合、CTaskDialog が表示されるときにアイコンが表示されません。
アプリケーションをコンパイルして実行します。 アプリケーションの起動後、タスク ダイアログ ボックスが表示されます。
CTaskDialog への機能の追加
次の手順では、前の手順で作成した CTaskDialog に機能を追加する方法を説明します。 プログラム例に、ユーザーの選択に基づいて特定の命令を実行する方法を示します。
CTaskDialog に機能を追加するには
[リソース ビュー] を表示します。 [リソース ビュー] が表示されていない場合は、[表示] メニューの [リソース ビュー] を開きます。
[リソース ビュー] を展開して、[ストリング テーブル] フォルダーを選択します。 フォルダーを展開し、[ストリング テーブル] エントリをダブルクリックします。
ストリング テーブルの一番下までスクロールし、新しいエントリを追加します。 エントリの ID を TEMP_LINE1 に変更します。 キャプションを Command Line 1 に設定します。
新しいエントリをもう 1 つ追加します。 エントリの ID を TEMP_LINE2 に変更します。 キャプションを Command Line 2 に設定します。
MyProject.cpp に戻ります。
CString emptyString; の後に、次のコードを追加します。
CString expandedLabel("Hide extra information"); CString collapsedLabel("Show extra information"); CString expansionInfo("This is the additional information to the user,\nextended over two lines.");
taskDialog.DoModal() ステートメントを探し、そのステートメントを次のコードに置き換えます。 このコードによってタスク ダイアログ ボックスが更新され、新しいコントロールが追加されます。
taskDialog.SetMainInstruction(L"Warning"); taskDialog.SetCommonButtons(TDCBF_YES_BUTTON | TDCBF_NO_BUTTON | TDCBF_CANCEL_BUTTON); taskDialog.LoadCommandControls(TEMP_LINE1, TEMP_LINE2); taskDialog.SetExpansionArea(expansionInfo, collapsedLabel, expandedLabel); taskDialog.SetFooterText(L"This is the a small footnote to the user"); taskDialog.SetVerificationCheckboxText(L"Remember your selection");
ユーザーにタスク ダイアログ ボックスを表示し、ユーザーの選択内容を取得するために、次のコード行を追加します。
INT_PTR result = taskDialog.DoModal();
taskDialog.DoModal() への呼び出しの後に、次のコードを挿入します。 このコード セクションで、ユーザーの入力を処理します。
if (taskDialog.GetVerificationCheckboxState() ) { // PROCESS IF the user selects the verification checkbox } switch (result) { case TEMP_LINE1: // PROCESS IF the first command line break; case TEMP_LINE2: // PROCESS IF the second command line break; case IDYES: // PROCESS IF the user clicks yes break; case IDNO: // PROCESS IF the user clicks no break; case IDCANCEL: // PROCESS IF the user clicks cancel break; default: // This case should not be hit because closing the dialog box results in IDCANCEL break; }
手順 9. のコード内で、PROCESS IF で始まるコメント行を、指定された条件で実行するコードに置き換えます。
アプリケーションをコンパイルして実行します。 アプリケーションで、新しいコントロールと追加した情報を使用するタスク ダイアログ ボックスが表示されます。
CTaskDialog オブジェクトを作成しない CTaskDialog の表示
次の手順では、先に CTaskDialog オブジェクトを作成することなく CTaskDialog を表示する方法を説明します。 この例は、先ほどの手順の続きとなります。
CTaskDialog オブジェクトを作成せずに CTaskDialog を表示するには
MyProject.cpp プロジェクト ファイルが開いていない場合は、そのファイルを開きます。
if (CTaskDialog::IsSupported()) ステートメントの右中かっこにカーソルを移動します。
if ステートメントの右中かっこの直前 (else ブロックの前) に、次のコードを挿入します。
HRESULT result2 = CTaskDialog::ShowDialog(L"My error message", L"Error", L"New Title", TEMP_LINE1, TEMP_LINE2);
アプリケーションをコンパイルして実行します。 アプリケーションで、2 つのダイアログ ボックスが表示されます。 1 番目のダイアログ ボックスは「CTaskDialog に機能を追加するには」の手順で作成したもので、2 番目のダイアログ ボックスが今回の手順で作成したものです。
以上の例では、CTaskDialog で使用できるオプションの一部しか紹介していませんが、開発を始める上で参考になるでしょう。 このクラスの詳細については、「CTaskDialog クラス」を参照してください。