Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Как расположить диалоговое окно в центре при помощи MFC

Иногда, в приложении MFC бывает необходимо автоматически отцентровать диалоговое окно относителько родительского окна, создавшего его.

Так же необходимо предусмотреть случай, когда главное окно не существует (чтобы не передать в качестве дескриптора главного NULL). При этом необходимо добавить дополнительный код центрирования диалогового окна, чтобы обеспечить центрирование как относительно десктопа так и относительно родительского окна.

Пример кода

   /*
     * Требуемые опции компилятора: (Стандартные требования Windows)
     */
 
    void CMyDialog::CenterDialog(CWnd *MyDialogPtr)
    {
       CPoint   Point;
       CRect    DialogRect;
       CRect    ParentRect;
       int      nWidth;
       int      nHeight;
       CWnd     *DesktopWindow = NULL;
       CWnd     *MainWindow;
 
       // Получаем размер диалогового окна.
       MyDialogPtr->GetWindowRect(DialogRect);
 
       // Получаем главное окно.
       MainWindow = AfxGetApp()->m_pMainWnd;
 
       // Определяем, существует ли главное окно. Это может быть полезно,
       // когда приложение создаёт диалоговое окно перед созданием
       // главного окна. Если оно существует, запрашиваем его размер,
       // чтобы отцентрировать диалог относительно главного окна.
       if (MainWindow != NULL)
          MainWindow->GetClientRect(ParentRect);
       // Если главное окно не существует, то центрируем относительно
       // окна десктопа.
       else
       {
          DesktopWindow = MyDialogPtr->GetDesktopWindow();
          DesktopWindow->GetWindowRect(ParentRect);
       }
 
       // Вычисляем высоту и ширину для MoveWindow().
       nWidth = DialogRect.Width();
       nHeight = DialogRect.Height();
 
       // Находим точку центра и преобразуем в координаты экрана.
       Point.x = ParentRect.Width() / 2;
       Point.y = ParentRect.Height() / 2;
       if (MainWindow)
          MainWindow->ClientToScreen(&Point);
       else
          DesktopWindow->ClientToScreen(&Point);
 
       // Вычисляем новые X, Y начальной точки.
       Point.x -= nWidth / 2;
       Point.y -= nHeight / 2;
 
       // Перемещаем окно.
       MyDialogPtr->MoveWindow(Point.x, Point.y, nWidth, nHeight, FALSE);
    }
 
    BOOL CMyDialog::OnInitDialog()
    {
       CDialog::OnInitDialog();
 
       // Удалите комментарий у 1 либо 2 в соответствие с версией
       // библиотеки MFC, которую Вы используете
 
 
       // 1. Вызов CenterDialog() для версии 1.0
       // CenterDialog(this);
 
       // 2. Вызов CenterWindow() для версий 2.0 и выше
       // CenterWindow();
 
       return TRUE;
    } 

 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS