При обработке сообщения WM_INITDIALOG Инициализация диалогового окна и его содержимое. Наиболее часто задача для инициализации элементов управления для отражения текущих параметров диалогового окна поле. Еще одна общая задача является центровка диалоговое окно на экране или в пределах его окно-владелец. Полезной задачей для некоторых диалоговых заключается в том, чтобы установить фокус ввода на данный элемент управления, а не принимать фокус ввода по умолчанию.
В следующем примере процедуру диалогового окна центров диалогового окна и устанавливает фокус ввода при обработке сообщения WM_INITDIALOG. По центру диалогового окна, процедура извлекает окна прямоугольники для диалогового окна и окна-владельца и вычисляет новое место для диалогового окна. Чтобы установить фокус ввода, процедура проверки параметра wParam , чтобы определить идентификатор по умолчанию фокус ввода:
HWND hwndOwner;
RECT rc, rcDlg, rcOwner;
дело WM_INITDIALOG: / / получить владелец окно и диалоговое окно поле прямоугольники.
Если ((hwndOwner = GetParent(hwndDlg)) == NULL) {}
hwndOwner = GetDesktopWindow();
}
GetWindowRect (hwndOwner, amp rcOwner);
GetWindowRect (hwndDlg и rcDlg);
CopyRect (& rc и rcOwner);
/ / Компенсировать владельцу и диалоговом поле прямоугольники, что / / справа и снизу значения представляют собой ширину и / / / высота, а затем смещение владелец снова, чтобы отказаться от / / пространство, занимаемое диалогового окна.
OffsetRect (& rcDlg,-rcDlg.left, - rcDlg.top);
OffsetRect (& rc,-rc.left, - rc.top);
OffsetRect (& rc,-rcDlg.right, - rcDlg.bottom);
/ / Новая позиция — это сумма половину оставшихся / / пространство и владельца первоначальной позиции.
SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / размер аргументы игнорируются SWP_NOSIZE);
Если (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME));
вернуть значение FALSE;
} Возвращает значение TRUE
В предыдущих заявлениях процедура использует функцию GetParent для получения дескриптора окна владельца для диалогового окна. Функция возвращает владельца дескриптор окна для диалоговые окна и дескриптор родительского окна для дочерних окон. Поскольку приложение может создать диалоговое окно, не имеет владельца, процедура проверяет возвращаемый дескриптор и функция GetDesktopWindow используется для получения дескриптора окна рабочего стола, в случае необходимости. После вычисления на новое место, в процедуре используется функция SetWindowPos переместить диалоговое, указав значение HWND_TOP для обеспечения того, чтобы диалоговым окном в верхней части окна-владельца.
Прежде чем устанавливать фокус ввода, процедура проверяет идентификатор элемента управления фокус ввода по умолчанию. Система передает дескриптор окна фокус ввода по умолчанию в параметре wParam . Функция GetDlgCtrlID возвращает идентификатор для элемента управления, выявленные дескриптор окна. Если идентификатор не совпадает с правильным идентификатором, процедура использует функцию SetFocus для установки фокуса ввода. Функция GetDlgItem должна получить дескриптор окна требуемый элемент управления.