Как расположить диалоговое окно в центре при помощи 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; } |