Пошаговое руководство. Добавление 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
Используйте мастер приложений MFC для создания приложения MFC со всеми параметрами по умолчанию. См . пошаговое руководство. Использование новых элементов управления оболочки MFC для инструкций по открытию мастера для вашей версии Visual Studio.
Вызовите его 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); }
После инструкции
if
из шага 5 вставьте в квадратных скобках приведенный далее код. Этот код создаетCTaskDialog
.CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON);
На следующей строке добавьте следующий код. Этот код задает значок предупреждения.
taskDialog.SetMainIcon(TD_WARNING_ICON);
На следующей строке добавьте следующий код. Этот код отображает диалоговое окно задачи.
taskDialog.DoModal();
Вы можете избежать шага 7, если вы не хотите CTaskDialog
отображать тот же значок, что и окно сообщения Windows. Если вы избегаете этого шага, 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 .