SC_MAXIMIZE, SC_ZOOM Максимизировать объект CWnd
SC_MINIMIZE, SC_ICON Минимизировать объект CWnd
SC_MOUSEMENU Выбор из меню при помощи мыши
SC_MOVE Перемещение окна CWnd
SC_NEXTWINDOW Переключение на следующее окно
SC_PREVWINDOW Переключение на предыдущее окно
SC_RESTORE Восстановление нормального расположения и размера окна
SC_SCREENSAVE Запустить приложение, предохраняющее экран монитора, указанное в секции [boot] файла SYSTEM.INI
SC_SIZE Изменить размер окна CWnd
SC_TASKLIST Запустить или активизировать приложение Task Manager
SC_VSCROLL Свертка по вертикали

Если строка системного меню выбрана с использованием мыши, параметр lParam содержит координаты курсора. Младшее слово определяет х-координату, а старшее y-координату.

Виртуальный метод OnSysCommand определен в классе CDialog и выполняет обработку сообщений WM_SYSCOMMAND в соответствии с их идентификаторами. Естественно, он не может правильно обработать сообщения от строк меню добавленных вами.

Чтобы обработать сообщения от новых строк системного меню (для нашего приложения это строка About), необходимо переопределить виртуальный метод OnSysCommand.

Сообщения, имеющие стандартные идентификаторы nID, необходимо передавать для обработки по умолчанию методу OnSysCommand базового класса CDialog.

void CDialogDlg::OnSysCommand(UINT nID, LPARAM lParam) {

 // Пользователь выбрал строку About системного меню

 if ((nID & 0xFFF0) == IDM_ABOUTBOX) {

  CAboutDlg dlgAbout;

  dlgAbout.DoModal();

 }

 // Все другие сообщение передаем для обработки методу

 // OnSysCommand базового класса CDialog

 else {

  CDialog::OnSysCommand(nID, lParam);

 }

}

Реализация метода OnSysCommand, созданная MFC AppWizard для класса CDialogDlg, определяет причину вызова. Если метод OnSysCommand вызван потому что пользователь выбрал из системного меню строку About, создается объект класса CAboutDlg. Класс CAboutDlg представляет собой класс для управления диалоговой панелью About. Затем вызывается метод DoModal, который и отображает диалоговую панель About на экране.

Если метод OnSysCommand вызван по любой другой причине, тогда вызывается метод OnSysCommand базового класса CDialog, который выполняет обработку этого сообщения по умолчанию.

Описание класса CAboutDlg, а также определение его методов, содержится в файле DialogDlg.cpp (листинг 4.4). Мы не будем подробно описывать класс CAboutDlg, так как он фактически представляет собой упрощенный вариант класса CDialogDlg.

Метод OnPaint (отображение пиктограммы приложения)

Диалоговая панель может иметь кнопку минимизации. Нажав эту кнопку или выбрав строку Minimaze из системного меню, пользователь может свернуть диалоговую панель (приложение) до размера пиктограммы.

К сожалению диалоговая панель, в отличие от обычного окна, не содержит встроенных средств отображения пиктограммы приложения. Поэтому приложение должно само заботиться об отображении пиктограммы. MFC AppWizard облегчает эту задачу. Если вы выберите приложение с интерфейсом на основе диалоговой панели, то в исходный текст добавляется определение метода OnPaint. Рассмотрим метод OnPaint подробнее.

void CDialogDlg::OnPaint() {

 // Определяем размер диалоговой панели

 if (IsIconic()) {

  // Если диалоговая панель минимизирована, отображаем

  // пиктограмму

  CPaintDC dc(this); // получаем контекст устройства

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  int cxIcon = GetSystemMetrics(SM_CXICON);

  int cyIcon = GetSystemMetrics(SM_CYICON);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату