Инициализация диалогового окна

При обработке сообщения 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 должна получить дескриптор окна требуемый элемент управления.

Index