演练: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

概念

对话框