共用方式為


逐步解說:將 CTaskDialog 加入至應用程式

本逐步解說介紹 CTaskDialog 類別 並示範如何加入至您的應用程式。

CTaskDialog 是取代 Windows Vista 的 Windows 訊息方塊的工作對話方塊。 CTaskDialog 改善原始訊息方塊並加入功能。 Windows 訊息方塊在 Visual Studio 仍然支援。

注意事項注意事項

早於 Windows Vista 的 Windows 版本不支援 CTaskDialog。如果您要對在 Windows 舊版執行應用程式的使用者顯示訊息,您必須撰寫其他對話方塊選項。您可以使用靜態方法 CTaskDialog::IsSupported 在執行階段判斷使用者電腦是否可以顯示 CTaskDialog。此外,只有當您的應用程式使用 Unicode 程式庫建立時,才可以使用 CTaskDialog

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

必要條件

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

  • Visual Studio 2010

  • Windows Vista

以 CTaskDialog 取代 Windows 訊息方塊

下列程序示範 CTaskDialog 的最基本用途,用以取代 Windows 訊息方塊。 這個範例也會變更與工作對話方塊關聯的圖示。 變更圖示讓 CTaskDialog 的外觀與 Windows 訊息方塊相同。

若要以 CTaskDialog 取代 Windows 訊息方塊

  1. 建立具有預設設定的新 MFC 應用程式專案。 命名為 MyProject。

  2. 使用 [方案總管] 開啟檔案 MyProject.cpp。

  3. 在包含的清單之後,加入 #include "afxtaskdialog.h" 。

  4. 找到 CMyProjectApp::InitInstance 方法。 在 return TRUE; 陳述式之前插入下列程式碼。 這個程式碼會建立我們在 Windows 訊息方塊或 CTaskDialog 使用的字串。

    CString message("My message to the user");
    CString dialogTitle("My Task Dialog title");
    CString emptyString;
    
  5. 將下列程式碼加入至步驟 4 的程式碼之後。 這個程式碼保證使用者的電腦支援 CTaskDialog。 如果不支援對話方塊,應用程式會顯示 Windows 訊息方塊。

    if (CTaskDialog::IsSupported())
    {
    
    }
    else
    {
       AfxMessageBox(message);
    }
    
  6. 在步驟 5 的 if 陳述式之後的括弧中插入下列程式碼。 這個程式碼會建立 CTaskDialog

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

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

    taskDialog.DoModal();
    

如果您不希望 CTaskDialog 顯示和 Windows 訊息方塊相同的圖示,可以省略第 7 步驟。 如果您略過該步驟,當應用程式顯示時,CTaskDialog 不會有圖示。

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

加入功能至 CTaskDialog

下列程序將說明如何將功能加入至您在先前程序中所建立的 CTaskDialog 。 範例程式碼示範如何依據使用者的選取執行特定指令。

若要將功能加入至 CTaskDialog

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

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

  3. 捲動至字串資料表的底端並加入新的項目。 將 ID 變更為 TEMP_LINE1。 將標頭設定為 Command Line 1。

  4. 加入另一個新的項目。 將 ID 變更為 TEMP_LINE2。 將標頭設定為 Command Line 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 the 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 類別

請參閱

參考

CTaskDialog 類別

CTaskDialog::CTaskDialog

概念

對話方塊