逐步解說:將 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 訊息方塊
建立具有預設設定的新 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;
將下列程式碼加入至步驟 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。
加入另一個新的項目。 將 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 the 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);
編譯及執行應用程式。 應用程式會顯示兩個工作對話方塊。 第一個對話方塊是來自「若要加入功能至 CTaskDialog 程序」;第二個對話方塊是來自最後一個程序。
這些範例不會示範 CTaskDialog 的所有可用選項,但是應該可以協助您開始使用。 如需每個類別的完整說明,請參閱 CTaskDialog 類別。