このチュートリアルでは、CTaskDialog
クラスの を紹介し、アプリケーションに追加する方法について説明します。
CTaskDialog
は、Windows Vista 以降の Windows メッセージ ボックスを置き換えるタスク ダイアログ ボックスです。
CTaskDialog
は元のメッセージ ボックスを改善し、機能を追加します。 Windows メッセージ ボックスは、Visual Studio で引き続きサポートされています。
手記
Windows Vista より前のバージョンの Windows では、CTaskDialog
はサポートされていません。 以前のバージョンの Windows でアプリケーションを実行しているユーザーにメッセージを表示する場合は、別のダイアログ ボックス オプションをプログラムする必要があります。 CTaskDialog::IsSupported 静的メソッドを使用して、ユーザーのコンピューターが CTaskDialog
を表示できるかどうかを実行時に判断できます。 さらに、CTaskDialog
は、アプリケーションが Unicode ライブラリを使用してビルドされている場合にのみ使用できます。
CTaskDialog
では、情報を収集して表示するための省略可能な要素がいくつかサポートされています。 たとえば、CTaskDialog
では、コマンド リンク、カスタマイズされたボタン、カスタマイズされたアイコン、フッターを表示できます。
CTaskDialog
には、タスク ダイアログ ボックスの状態を照会して、ユーザーが選択した省略可能な要素を決定できるメソッドがいくつかあります。
前提 条件
このチュートリアルを完了するには、次のコンポーネントが必要です。
- Visual Studio 2010 以降
- Windows Vista 以降
Windows メッセージ ボックスを CTaskDialog に置き換える
Windows メッセージ ボックスを置き換える CTaskDialog
の最も基本的な使用方法を次に示します。 この例では、タスク ダイアログ ボックスに関連付けられているアイコンも変更します。 アイコンを変更すると、CTaskDialog
は Windows メッセージ ボックスと同様に表示されます。
MFC アプリケーション ウィザード を使用して、すべての既定の設定で Microsoft Foundation Classes (MFC) アプリケーションを作成します。 Visual Studio のバージョンのウィザードを開く方法については、「チュートリアル: 新しい MFC シェル コントロールの使用」 を参照してください。
それを MyProjectと呼びます。
ソリューション エクスプローラーの を使用して、
MyProject.cpp
を開きます。インクルードの一覧の後に
#include "afxtaskdialog.h"
を追加します。メソッド
CMyProjectApp::InitInstance
を見つけます。return TRUE;
ステートメントの前に、次のコード行を挿入します。 このコードは、Windows メッセージ ボックスまたはCTaskDialog
で使用する文字列を作成します。CString message("My message to the user"); CString dialogTitle("My Task Dialog title"); CString emptyString; // Check whether the user's computer supports `CTaskDialog`. // If not, display a Windows message box instead. if (CTaskDialog::IsSupported()) { CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON); taskDialog.SetMainIcon(TD_WARNING_ICON); // Set the icon to be the same as the Windows message box taskDialog.DoModal(); } else { AfxMessageBox(message); }
アプリケーションをコンパイルして実行します。 アプリケーションは、開始後にタスク ダイアログ ボックスを表示します。
CTaskDialog に機能を追加する
前の手順で作成した CTaskDialog
に機能を追加する方法を次に示します。 コード例は、ユーザーの選択に基づいて特定の命令を実行する方法を示しています。
ビュー>>を介して、リソース ビュー に移動します。
リソース ビュー を String Table フォルダーに展開します。 それを展開し、文字列テーブルをダブルクリックします。
文字列テーブルの一番下までスクロールし、新しいエントリを追加します。 ID を
TEMP_LINE1
に変更します。 キャプションをCommand Line 1
に設定します。別の新しいエントリを追加します。 ID を
TEMP_LINE2
に変更します。 キャプションをCommand Line 2
に設定します。MyProject.cpp
に戻ります。CMyProjectApp::InitInstance()
関数で、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(); if (taskDialog.GetVerificationCheckboxState()) { // Your code 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; }
アプリケーションをコンパイルして実行します。 アプリケーションには、新しいコントロールと追加情報を使用するタスク ダイアログ ボックスが表示されます。
CTaskDialog オブジェクトを作成せずに CTaskDialog を表示する
最初に CTaskDialog
オブジェクトを作成せずに CTaskDialog
を表示する方法を次に示します。 この例では、前の手順を続行します。
CTaskDialog オブジェクトを作成せずに CTaskDialog を表示するには
MyProject.cpp
ファイルを開きます。CMyProjectApp::InitInstance()
関数で、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 クラスの を参照してください。