演练:CTaskDialog添加到应用程序

本演练介绍 CTaskDialog 类 并演示如何添加到您的应用程序。

CTaskDialog 是将在 Windows Vista的 windows 消息框的任务对话框。CTaskDialog 提高原始消息框并添加功能。windows 消息框。 Visual Studio仍支持。

说明说明

窗口的版本早于 Windows Vista 不支持 CTaskDialog。必须程序可选对话框选项,如果要显示消息传送到运行您在 windows 的早期版本的应用程序的用户。您可以使用静态方法 CTaskDialog::IsSupported 确定运行时用户的计算机是否可以显示 CTaskDialog。此外,在中,当应用程序使用 Unicode 库时,生成 CTaskDialog 才可用。

CTaskDialog 支持多个可选的元素集合并显示信息。例如, CTaskDialog 可以显示命令链接、自定义的按钮、自定义的图标和页脚。CTaskDialog 还可以查询任务对话框状态确定的方法的可选元素用户已选定。

系统必备

您需要以下组件来完成本演练:

  • Visual Studio 2010

  • Windows Vista

替换 " 窗口消息框。 CTaskDialog

下面的过程演示如何 CTaskDialog的最基本用法,是将 windows 消息框。此示例还更改图标与任务对话框。更改图标进行 CTaskDialog 显示相同到 windows 消息框。

使用 CTaskDialog 替换 " 窗口消息框

  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. 在代码后面添加以下代码以从步骤。此代码可确保用户的计算机支持 CTaskDialog。如果对话框,不支持应用程序显示窗口消息框。

    if (CTaskDialog::IsSupported())
    {
    
    }
    else
    {
       AfxMessageBox(message);
    }
    
  6. 插入在括号内的代码在从步骤的 if 语句之后。此代码创建 CTaskDialog

    CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON);
    
  7. 在下一行,添加以下代码。此代码将警告图标。

    taskDialog.SetMainIcon(TD_WARNING_ICON);
    
  8. 在下一行,添加以下代码。此代码将显示任务对话框。

    taskDialog.DoModal();
    

您可以忽略步骤 7 中,如果您不希望 CTaskDialog 显示与 windows 消息框的图标。如果省略该步骤, CTaskDialog 没有图标,当应用程序显示它。

编译并运行应用程序。,在启动后,应用程序显示一个任务对话框。

将功能添加到 CTaskDialog

下面的过程演示如何将功能添加到您在前一过程中创建的 CTaskDialog 。代码示例演示如何执行基于用户选择的特定命令。

将功能添加到 CTaskDialog

  1. 导航到 资源视图。如果看不到 资源视图,可以打开它从 查看 菜单。

  2. 展开 资源视图 ,直到您可以选择 字符串表 文件夹。展开并双击 字符串表 项。

  3. 为字符串表底部的滚动并添加新项。更改 ID 到 TEMP_LINE1。将阐释命令行 1。

  4. 添加另一个新项。更改 ID 到 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 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 步中的代码,请替换请启动进程,如果从代码要在指定的条件下执行的注释。

编译并运行应用程序。应用程序以使用新的控件和附加信息的任务对话框。

演示 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

概念

对话框