Хотя это ручной процесс, я считаю полезным работать в координатах относительно родительского окна каждого элемента управления.
Я использую следующую функцию, чтобы вернуть текущую позицию элемента управления относительно его родителя, чтобы он могбыть легко перемещенным / измененным с помощью SetWindowPos ().
void GetRelativeCtrlRect(HWND hWnd, RECT *rc) {
// Get the position of the window relative to the entire screen
GetWindowRect(hWnd, rc);
// Now convert those with regards to the control's parent
ScreenToClient(GetParent(hWnd), (LPPOINT) &((LPPOINT)rc)[0]);
ScreenToClient(GetParent(hWnd), (LPPOINT) &((LPPOINT)rc)[1]);
}
Возвращает размер RECT
относительно в родительское окно / элемент управления.Например, если вы хотите изменить размер дочернего элемента управления до «ближнего» нижнего края родительского элемента, просто отведите несколько пикселей от rc.bottom, прежде чем вызывать SetWindowPos (childHWND, ...)
Iтакже есть некоторые функции «привязки», которые помогают позиционировать элементы управления относительно других опорных точек.Тем не менее, он по-прежнему выполняется вручную в режиме кода-времени, но дает отличные результаты настройки вручную.
Некоторые другие опции, которые я отметил, все, вероятно, потребуют настройки для ваших нужд, но это дает вам представлениенекоторых инструментов, созданных другими для решения этой проблемы.