Поделиться через


Пошаговое руководство. Добавление CTaskDialog в приложение

В этом пошаговом руководстве содержатся сведения о CTaskDialog Class и показано, как добавить его в приложение.

Это CTaskDialog диалоговое окно задачи, которое заменяет окно сообщения Windows в Windows Vista или более поздней версии. CTaskDialog улучшает исходное окно сообщения и расширяет его функциональные возможности. Окно сообщений Windows по-прежнему поддерживается в Visual Studio.

Примечание.

Более ранние версии Windows, чем Windows Vista, не поддерживают CTaskDialog. Чтобы сообщение отображалось для пользователей, запускающих приложение в более ранних версиях Windows, необходимо запрограммировать альтернативный вариант диалогового окна. Статический метод CTaskDialog::IsSupported во время выполнения позволит определить возможность отображения CTaskDialog. Кроме того, CTaskDialog доступно только в случае, если ваше приложение построено с помощью библиотеки юникода.

CTaskDialog поддерживает несколько необязательных элементов для сбора и отображения информации. Например, CTaskDialog может отображать ссылки на команды, настраиваемые кнопки, настраиваемые значки и нижний колонтитул. CTaskDialog также располагает рядом методов, которые позволяют запрашивать состояние диалогового окна задачи, чтобы определить, какие необязательные элементы выбрал пользователь.

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

  • Visual Studio 2010 или более поздней версии

  • Windows Vista или более поздней версии

Замена окна сообщения Windows на CTaskDialog

В следующей процедуре показан основной способ использования CTaskDialog, заменяющего окно сообщения Windows. В этом примере также демонстрируется изменение значка, связанного с диалоговым окном задачи. При изменении значка CTaskDialog отображается то же самое в окне сообщения Windows.

Замена окна сообщения Windows на CTaskDialog

  1. Используйте мастер приложений MFC для создания приложения MFC со всеми параметрами по умолчанию. См . пошаговое руководство. Использование новых элементов управления оболочки MFC для инструкций по открытию мастера для вашей версии Visual Studio.

  2. Вызовите его MyProject.

  3. С помощью обозревателя решений открыть файл MyProject.cpp.

  4. После списка включаемых файлов добавьте #include "afxtaskdialog.h" .

  5. Найдите метод CMyProjectApp::InitInstance. Перед инструкцией return TRUE; вставьте приведенные далее строки кода. Этот код создает строки, используемые в окне сообщения Windows или в CTaskDialog.

    CString message("My message to the user");
    CString dialogTitle("My Task Dialog title");
    CString emptyString;
    
  6. После кода из шага 4 добавьте приведенный далее код. Этот код гарантирует, что на компьютере пользователя поддерживается CTaskDialog. Если диалоговое окно не поддерживается, приложение отображает окно сообщения Windows.

    if (CTaskDialog::IsSupported())
    {
    
    }
    else
    {
        AfxMessageBox(message);
    }
    
  7. После инструкции if из шага 5 вставьте в квадратных скобках приведенный далее код. Этот код создает CTaskDialog.

    CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON);
    
  8. На следующей строке добавьте следующий код. Этот код задает значок предупреждения.

    taskDialog.SetMainIcon(TD_WARNING_ICON);
    
  9. На следующей строке добавьте следующий код. Этот код отображает диалоговое окно задачи.

    taskDialog.DoModal();
    

Вы можете избежать шага 7, если вы не хотите CTaskDialog отображать тот же значок, что и окно сообщения Windows. Если вы избегаете этого шага, CTaskDialog значок отсутствует при отображении приложения.

Скомпилируйте и запустите приложение. После запуска в приложении откроется диалоговое окно задачи.

Добавление функциональных возможностей в CTaskDialog

Ниже показано, как добавить функциональные возможности в окно CTaskDialog , созданное в предыдущей процедуре. В примере кода демонстрируется выполнение конкретных инструкций на основе выбора пользователя.

Добавление функциональных возможностей в CTaskDialog

  1. Перейдите в представление ресурсов. Если представление ресурсов не отображается, его можно открыть в меню "Вид".

  2. Разверните представление ресурсов , чтобы увидеть папку Таблица строк . Разверните папку и дважды щелкните запись Таблица строк .

  3. Перейдите в нижнюю часть таблицы строк и добавьте новую запись. Измените идентификатор на TEMP_LINE1. Задайте в качестве заголовка Командная строка 1.

  4. Добавьте еще одну новую запись. Измените идентификатор на 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 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 Class .

См. также

Диалоговые окна
Класс CTaskDialog
CTaskDialog::CTaskDialog