Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT

         

Метод 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);

             // Определяем размеры внутренней области окна

             CRect rect;

            GetClientRect(&rect);

             // Выравниваем пиктограмму по центру

             int x = (rect.Width() - cxIcon + 1) / 2;

             int y = (rect.Height() - cyIcon + 1) / 2;

             // Отображаем пиктограмму

             dc.DrawIcon(x, y, m_hIcon);

      }

      else

      {

             // Выполняем обработку по умолчанию

             CDialog::OnPaint();

      }

}

После вызова метода OnPaint он проверяет состояние диалоговой панели. Для этого вызывается метод IsIconic, определенный в классе CWnd. Если окно, или в нашем случае диалоговая панель, связанная с объектом, для которого вызывается метод IsIconic, минимизировано, возвращается ненулевое значение, в противном случае - нуль.

BOOL IsIconic() const;

В случае если диалоговая панель имеет нормальный размер, управление передается методу OnPaint базового класса CDialog для выполнения обработки по умолчанию.

Если вызов OnPaint произошел в следствии минимизации диалоговой панели, тогда определяются размеры внутренней области минимизированного окна и размеры пиктограммы. Затем пиктограмма отображается в центре минимизированного окна.



Содержание раздела