逐步解說:將 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 訊息方塊
使用 MFC 應用程式精靈 來建立具有所有預設設定的 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;
將下列程式碼加入步驟 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
巡覽至 [資源檢視] 。 如果您看不到 [資源檢視],您可以從 [檢 視 ] 功能表開啟它 。
展開 [資源檢視] ,直到您可以選取 [字串資料表] 資料夾。 將它展開,然後按兩下 [字串資料表] 項目。
捲動至字串資料表底部,然後加入新項目。 將識別碼變更為
TEMP_LINE1
。 將選項設定為 [命令列 1]。加入另一個新項目。 將識別碼變更為
TEMP_LINE2
。 將選項設定為 [命令列 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 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 Class 。