Измените размер cframewnd до нужного размера панелей csplitterwnds
У меня есть CFrameWnd с трехсторонним статическим разделением; два столбца с правым столбцом, разделенным горизонтально. Левый столбец является производной CListView. Верхнее правое и нижнее правое представления являются производными CFormView. Я могу вычислить размер каждой панели и использовать эту информацию в вызовах SetColumnInfo()/SetRowInfo(). Учитывая размеры каждой панели, как можно изменить размер CFrameWnd до желаемого размера Csplitterwnd с учетом меню, строки заголовка, строки меню и панели инструментов?
С уважением
Что я уже пробовал:
Я перепробовал так много вещей, что сейчас трудно вспомнить все. Я прочитал/попробовал каждую статью/вопрос, который я нашел здесь, Codeguru и StackOverflow. Я пробовал изменять размеры панелей и окон в CFrameWnd::PreCreateWindow(), CFrameWnd::OnCreateClient(), CFrameWnd:: OnSize(). Ничто из того, что я нахожу, на самом деле не говорит о том, что я хочу, чтобы основное окно сплиттера имело фиксированный размер, который я вычисляю, и как настроить окно фрейма, чтобы оно имело этот размер клиента.
Sergey Alexandrovich Kryukov
Я бы не стал этого делать. Вы не можете получить надежные результаты от таких вычислений. Почему бы не разрешить пользователю изменять размер и положение сплиттера? В конце концов, в этом и заключается вся цель этой техники компоновки.
—СА
Craig Hewitt
Если формы фиксированы по размеру, нет смысла поддерживать изменяемые размеры окон сплиттера, если только вы также не хотите пройти через хлопоты с яслями макета, чтобы управлять всеми контрольными позициями. Пользовательский интерфейс больше не будет эстетически радовать глаз.
Почему вы не можете получить достоверные результаты из различных расчетов? Границы, разделительные полосы и т. д. имеют размеры, которые могут быть вычислены во время выполнения.
Крейг
Sergey Alexandrovich Kryukov
В этом вся идея: возможно, это означает, что форма фиксированного размера не имеет смысла. Вот вам идея: вместо того, чтобы заниматься некорректными проблемами, лучше заняться лучшим дизайном пользовательского интерфейса.
Расчет метрики во время выполнения возможен: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx.
Но это не значит, что вы можете собрать всю информацию. Класс формы может иметь свои собственные элементы макета, которые не подвергаются воздействию какого-либо API. Вычислять во время выполнения? Конечно, но откуда вы берете входные данные?
—СА