Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
193-224.doc
Скачиваний:
1
Добавлен:
11.11.2019
Размер:
378.88 Кб
Скачать

226

pDC->SetTextAlign (TA_RIGHT);

X = ClientRect.right - 5; break; } // установка цвета текста и режима фона: pDC->SetTextColor (::GetSysColor (COLOR_WINDOWTEXT)); pDC->SetBkMode (TRANSPARENT); // вывод строк текста: LineHeight = LF.lfHeight * pDoc->m_Spacing; Y = 5; pDC->TextOut (X, Y, "This is the first line of sample text."); Y += LineHeight; pDC->TextOut (X, Y, "This is the second line of sample text."); Y += LineHeight; pDC->TextOut (X, Y, "This is the third line of sample text."); // отмена выбора шрифта: pDC->SelectObject (PtrOldFont); }

  1. Сохраните изменения по команде FileSave All. Постройте программу и запустите ее. Во время работы вызовите диалоговое окно Format и поменяйте атрибуты текста. При нажатии кнопки OK диалогового окна, оно закрывается, а в окне представления изменяется формат текста в соответствии с выбранными настройками диалогового окна.

  2. Измените заголовок программы, в который сейчас выводится текст "FontDemo – Untitled", позволяющий сделать ошибочный вывод о том, что программа создает документы. Чтобы установить нужный заголовок, добавьте в файл FontDemo.cpp вызов функции CWnd::SetWindowText() из функции InitInstance() класса CFontDemoApp. Переменная m_pMainWnd — это указатель на объект главного окна. Обращение к функции CWnd::SetWindowText() должно находиться после обращения к функции CWinApp::ProcessShellCommand(), создающей главное окно.

BOOL CFontDemoApp::InitInstance() { CWinApp::InitInstance(); // Standard initialization . . . m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); // call DragAcceptFiles only if there's a suffix // In an SDI app, this should occur after ProcessShellCommand m_pMainWnd->SetWindowText("System Font Demo"); return TRUE; }

Рис. 6.15. Окно программы FontDemo после выбора атрибутов текста в диалоговом окне Format

  1. Программа FontDemo завершена, теперь можете построить и запустить ее.

После запуска программы FontDemo вы получите окно как на рис. 6.2. Выполнив команду TextFormat… , установив флажки и переключатели, например, Underline, Center, Fixed, Line Spacing = 2 и закрыв диалоговое окно кнопкой OK, вы получите отображение текста как на рис. 6.15.

Создание немодальных диалоговые окон

При отображении модального диалогового окна главное окно программы блокируется, поэтому модальное окно необходимо закрыть для продолжения работы в главном окне. При отображении немодального диалогового окна доступ к главному окну программы не блокируется. В результате можно продолжать работу внутри главного окна с одновременным отображением немодального. Фокус ввода передается между немодальным диалоговым окном и главным. Таким образом, немодальное диалоговое окно служит вспомогательным окном и используется вместе с главным. Например, команда проверки орфографии в текстовом процессоре обычно отображает немодальное диалоговое окно (можно внести исправления в документ, а затем продолжить проверку орфографии).

Как и модальное диалоговое окно, немодальное создают, используя редактор диалоговых окон. Чтобы породить класс для управления немодальным диалоговым окном от класса CDialog и определить переменные-члены и обработчики сообщений, используют мастера Add Member Function Wizard и Add Member Variable Wizard, как и для модального диалогового окна.

Перечислим различия в способах отображения немодальных и модальных диалоговых окон.

  • Экземпляр класса диалогового окна необходимо объявить как глобальный объект или создать с помощью оператора new вместо объявления его локальным объектом. Это необходимо потому, что немодальное диалоговое окно остается открытым после завершения функции, которая его отображает, а объект, управляющий диалоговым окном, сохраняется. При создании объекта с использованием оператора new убедитесь, что для уничтожения этого объекта используется оператор delete.

  • Немодальное диалоговое окно отображается путем вызова функции CDialog::Create() вместо CDialog::DoModal(). В отличие от последней функция CDialog::Create() возвращает управление, оставляя диалоговое окно на экране. При отображении такого диалогового окна главное окно, как и любые окна представлений, остается доступным. Программа может продолжать обработку информации, вводимой из главного окна, а пользователь — работать с ним при отображенном диалоговом окне.

  • Для закрытия немодального диалогового окна вызывается функция CWnd::DestroyWindow(), а не функция EndDialog() класса CDialog. Функцию CWnd::DestroyWindow() можно вызвать из функции-члена класса диалогового окна или из любой другой функции программы.

  • Если диалоговое окно содержит кнопку OK (т. е. ресурс с идентификатором IDOK), то необходимо определить обработчик сообщения OnOK(). Однако для немодального диалогового окна названные функции вызывают функцию DestroyWindow() класса CWnd, закрывающую диалоговое окно, и не должны вызывать обработчик сообщения базового класса. Версии функций базового класса CDialog::OnCancel() и CDialog::OnOK() вызывают функцию EndDialog() класса CDialog, которая скрывает диалоговое окно, но не уничтожает его. Для определения переменных класса диалогового окна функция OnOK() должна была бы вызвать функцию CWnd::UpdateDate(), передавая ей значение TRUE или вызывая ее без параметров, чтобы сохранить и проверить содержимое элементов управления. В модальном диалоговом окне эта задача выполняется версией функции CDialog::OnOK() базового класса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]