チュートリアル: アプリケーションへの CTaskDialog の追加
このチュートリアルでは、 CTaskDialog Class の概要と、そのクラスをアプリケーションに追加する方法について説明します。
CTaskDialog
は、Windows Vista 以降の Windows メッセージ ボックスに代わるタスク ダイアログ ボックスです。 CTaskDialog
は Windows メッセージ ボックスを改良したものであり、機能も追加されます。 Windows メッセージ ボックスは、Visual Studio で引き続きサポートされます。
Note
Windows Vista より前のバージョンの Windows は、CTaskDialog
をサポートしていません。 以前のバージョンの Windows でアプリケーションを実行するユーザーにもメッセージを表示するには、代替のダイアログ ボックス オプションをプログラミングしておく必要があります。 静的メソッドである CTaskDialog::IsSupported を使用することで、ユーザーのコンピューターで CTaskDialog
の Windows メッセージ ボックスに代わるタスク ダイアログ ボックスです。 また、 CTaskDialog
を使用できるのは、アプリケーションが Unicode ライブラリを使用してビルドされている場合に限られます。
CTaskDialog
では、情報を収集して表示するためのオプション要素がいくつかサポートされています。 たとえば、 CTaskDialog
では、コマンド リンク、カスタマイズされたボタン、カスタマイズされたアイコン、およびフッターを表示できます。 さらに、 CTaskDialog
には、タスク ダイアログ ボックスの状態を照会して、ユーザーが選択したオプション要素を確認するためのメソッドもいくつか用意されています。
前提条件
このチュートリアルを実行するには、次のコンポーネントが必要です。
Visual Studio 2010 以降
Windows Vista 以降
Windows メッセージ ボックスを CTaskDialog に置き換える
次の手順では、 CTaskDialog
の最も基本的な使用法である、Windows メッセージ ボックスの置き換えについて説明します。 この例では、タスク ダイアログ ボックスに関連付けられているアイコンも変更します。 アイコンを変更することで、CTaskDialog
の外観が Windows メッセージ ボックスと同じになります。
Windows メッセージ ボックスを CTaskDialog に置き換えるには
MFC アプリケーション ウィザードを使用して、すべての既定の設定を含む MFC アプリケーションを作成します。 お使いのバージョンの Visual Studio のウィザードを開く方法については、「チュートリアル: 新しい 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
がサポートされることが保証されます。 このダイアログがサポートされない場合は、代わりに 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. を回避できます。 その手順を回避すると、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 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 つのタスク ダイアログ ボックスが表示されます。 最初のダイアログ ボックスは「CTaskDialog に機能を追加するには」の手順で作成したものです。今回の手順で作成したのは 2 番目のダイアログ ボックスです。
上記の例では、CTaskDialog
で使用できるオプションの一部しか紹介していませんが、開発を始めるうえで参考になるでしょう。 このクラスの詳細については、「 CTaskDialog Class 」を参照してください。