次の方法で共有


チュートリアル: CTaskDialog をアプリケーションに追加する

このチュートリアルでは、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 メッセージ ボックスと同様に表示されます。

  1. MFC アプリケーション ウィザード を使用して、すべての既定の設定で Microsoft Foundation Classes (MFC) アプリケーションを作成します。 Visual Studio のバージョンのウィザードを開く方法については、「チュートリアル: 新しい MFC シェル コントロールの使用」 を参照してください。

  2. それを MyProjectと呼びます。

  3. ソリューション エクスプローラーの を使用して、MyProject.cppを開きます。

  4. インクルードの一覧の後に #include "afxtaskdialog.h" を追加します。

  5. メソッド 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 に機能を追加する方法を次に示します。 コード例は、ユーザーの選択に基づいて特定の命令を実行する方法を示しています。

  1. ビュー>>を介して、リソース ビュー に移動します。

  2. リソース ビューString Table フォルダーに展開します。 それを展開し、文字列テーブルをダブルクリックします。

  3. 文字列テーブルの一番下までスクロールし、新しいエントリを追加します。 ID を TEMP_LINE1に変更します。 キャプションを Command Line 1に設定します。

  4. 別の新しいエントリを追加します。 ID を TEMP_LINE2に変更します。 キャプションを Command Line 2に設定します。

  5. MyProject.cppに戻ります。

  6. 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.");
    
  7. 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 を表示するには

  1. MyProject.cpp ファイルを開きます。

  2. CMyProjectApp::InitInstance() 関数で、if (CTaskDialog::IsSupported()) ステートメントの閉じ括弧に移動します。

  3. if ステートメントの終わり角かっこの直前 (else ブロックの前) に次のコードを挿入します。

    HRESULT result2 = CTaskDialog::ShowDialog(L"My error message",
        L"Error",
        L"New Title",
        TEMP_LINE1,
        TEMP_LINE2);
    

アプリケーションをコンパイルして実行します。 アプリケーションに 2 つのタスク ダイアログ ボックスが表示されます。 最初のダイアログ ボックスは、CTaskDialog プロシージャに機能を追加する です。2 番目のダイアログ ボックスは、前の手順のダイアログ ボックスです。

これらの例では、CTaskDialogで使用可能なすべてのオプションを示すわけではありませんが、作業を開始するのに役立ちます。 クラス 詳しい説明については、CTaskDialog クラスの を参照してください。

関連項目

ダイアログ ボックス
CTaskDialog クラス
CTaskDialog::CTaskDialog