分享方式:


逐步解說:將 CTaskDialog 新增至應用程式

本逐步解說介紹 CTaskDialog Class ,並示範如何將其加入應用程式。

CTaskDialog是取代 Windows Vista 或更新版本中 Windows 訊息方塊的工作對話方塊。 CTaskDialog 改進原始訊息方塊並加入功能。 Visual Studio 仍然支援 Windows 訊息方塊。

注意

早于 Windows Vista 的 Windows 版本不支援 CTaskDialog 。 如果您想要向在舊版 Windows 上執行您的應用程式的使用者顯示訊息,您必須編寫替代對話方塊選項。 您可以使用靜態方法 CTaskDialog::IsSupported ,在執行階段判斷使用者的電腦是否可以顯示 CTaskDialog中的 Windows 訊息方塊。 此外,只有使用 Unicode 程式庫建置應用程式時,才能使用 CTaskDialog

CTaskDialog 支援幾個可收集及顯示資訊的選擇性項目。 例如, CTaskDialog 可以顯示命令連結、自訂按鈕、自訂圖示和頁尾。 CTaskDialog 也包含幾種方法,可讓您查詢工作對話方塊的狀態,以判斷使用者選取了哪些選擇性項目。

必要條件

您需要下列元件才能完成這個逐步解說:

  • Visual Studio 2010 (含) 以後版本

  • Windows Vista 或更新版本

以 CTaskDialog 取代 Windows 訊息方塊

下列程序示範 CTaskDialog的最基本用法,也就是取代 Windows 訊息方塊。 此範例也會變更已與工作對話方塊建立關聯的圖示。 變更圖示會使 CTaskDialog 看起來與 Windows 訊息方塊相同。

以 CTaskDialog 取代 Windows 訊息方塊

  1. 使用 MFC 應用程式精靈 來建立具有所有預設設定的 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;
    
  6. 將下列程式碼加入步驟 4 的程式碼後面。 此程式碼可確保使用者的電腦支援 CTaskDialog。 如果不支援對話方塊,應用程式會改為顯示 Windows 訊息方塊。

    if (CTaskDialog::IsSupported())
    {
    
    }
    else
    {
        AfxMessageBox(message);
    }
    
  7. 將下列程式碼插入步驟 5 之 if 陳述式後面的括號之間。 此程式碼會建立 CTaskDialog

    CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON);
    
  8. 在下一行,加入下列程式碼。 此程式碼會設定警告圖示。

    taskDialog.SetMainIcon(TD_WARNING_ICON);
    
  9. 在下一行,加入下列程式碼。 此程式碼會顯示工作對話方塊。

    taskDialog.DoModal();
    

如果您不想 CTaskDialog 顯示與 Windows 訊息方塊相同的圖示,您可以避免步驟 7。 如果您避免該步驟, CTaskDialog 當應用程式顯示時,沒有圖示。

編譯並執行應用程式。 應用程式啟動後,會顯示工作對話方塊。

將功能加入 CTaskDialog

下列程序會示範如何將功能加入您在上一個程序中建立的 CTaskDialog 。 此範例程式碼會示範如何根據使用者的選取項目來執行特定指示。

將功能加入 CTaskDialog

  1. 巡覽至 [資源檢視] 。 如果您看不到 [資源檢視],您可以從 [檢 ] 功能表開啟它

  2. 展開 [資源檢視] ,直到您可以選取 [字串資料表] 資料夾。 將它展開,然後按兩下 [字串資料表] 項目。

  3. 捲動至字串資料表底部,然後加入新項目。 將識別碼變更為 TEMP_LINE1。 將選項設定為 [命令列 1]

  4. 加入另一個新項目。 將識別碼變更為 TEMP_LINE2。 將選項設定為 [命令列 2]

  5. 巡覽回到 MyProject.cpp。

  6. 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");
    
  8. 加入下列這行程式碼,以向使用者顯示工作對話方塊並擷取使用者的選取項目︰

    INT_PTR result = taskDialog.DoModal();
    
  9. 將下列程式碼插入 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 物件

  1. 如果尚未開啟 MyProject.cpp 檔案,請開啟它。

  2. 巡覽至 if (CTaskDialog::IsSupported()) 陳述式的右中括號。

  3. 緊接在 if 陳述式的右中括號前面 ( else 區塊前面) 插入下列程式碼:

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

編譯並執行應用程式。 應用程式會顯示兩個對話方塊。 第一個對話方塊是從 [將功能新增至 CTaskDialog ] 程式;第二個對話方塊來自最後一個程式。

這些範例不會示範 的所有 CTaskDialog 可用選項,但應該可協助您開始使用。 如需此類別的完整說明,請參閱 CTaskDialog Class

另請參閱

對話方塊
CTaskDialog 類別
CTaskDialog::CTaskDialog