Создан мастер двух страниц в приложении win32 с использованием Propertysheetpage. Мастер не расположен в центре экрана. Чтобы расположить страницы по центру, я написал приведенный ниже код для первой страницы (при условии, что 2-я страница будет отражена с позицией 1-й страницы), но она не работает. Я что-то здесь не так делаю?
static LRESULT WINAPI sWelcomePageDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND hwndOwner = NULL;
RECT rcOwner,rcDlg,rc;
switch (uMsg)
{
case WM_INITDIALOG:
hwndOwner = GetDesktopWindow();
GetWindowRect(hwndOwner, &rcOwner);
GetWindowRect(hwnd, &rcDlg);
rc.left = (rcOwner.right - rcOwner.left)/2 - (rcDlg.right - rcDlg.left)/2;
rc.right = rc.left + (rcDlg.right - rcDlg.left);
rc.top = (rcOwner.bottom - rcOwner.top)/2 - (rcDlg.bottom - rcDlg.top)/2;
rc.bottom = rc.top + (rcDlg.bottom - rcDlg.top);
SetWindowPos (hwnd, NULL, rc.left, rc.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE);
SetWindowText(GetDlgItem(hwnd, IDC_WELCOMETEXTSTATIC), Info);
break;
case WM_COMMAND:
break;
case WM_NOTIFY:
LPNMHDR lpnm = (LPNMHDR)lParam;
switch (lpnm->code)
{
case PSN_SETACTIVE:
PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_NEXT | PSWIZB_CANCEL);
break;
case PSN_WIZNEXT:
SetWindowLongPtr(hwnd, DWLP_MSGRESULT, IDD_FINISHPAGE);
break;
}
break;
}
return 0;
}
Hwnd, переданный в ваш оконный процесс, является дескриптором мастера страница. Для дескриптора самого мастера, вызовите GetParent (hwnd).
Кстати, размеры экрана также доступны через GetSystemMetrics (), SM_CXSCREEN / SM_CYSCREEN.
Других решений пока нет …