Нахождение эффективного размера CListCtrl в свернутом окне MFC
В моем приложении MFC пользователь может свернуть окно, в котором есть CListCtrl. Мне нужно знать, сколько видимых элементов будет отображать элемент управления списком, когда пользователь восстановит окно.
Первая реализация используется GetCountPerPage
, Это работало замечательно, пока мы не заметили свернутый случай окна и обнаружили, что он возвращает ноль.
Я также пытался GetClientRect
, GetWindowRect
а также GetWindowPlacement
(с помощью rcNormalPosition
), чтобы попытаться выяснить размер CListCtrl, чтобы я мог вычислить количество страниц вручную. Все эти API возвращают пустые прямоугольники, расположенные в разных местах за пределами экрана.
Какой лучший способ выяснить, какой будет высота CListCtrl после восстановления окна? Конечно, настоящий прямоугольник окна доступен как-то.
2 ответа
Как только окно будет восстановлено / свернуто / показано / скрыто, будет вызван WM_SHOWWINDOW. Таким образом, вы можете использовать это сообщение для вызова OnShowWindow() и найти количество / высоту clistctrl.
CListCtrl - это оболочка для элемента управления представления списка. Чтобы работать с ним напрямую, вы можете попробовать использовать макросы ListView_GetCountPerPage(...), которые в основном отправляют сообщение LVM_GETCOUNTPERPAGE. Если это все еще возвращает ноль, это поведение, вероятно, по умолчанию, или это ошибка в реализации общих элементов управления. Если ваш список не может изменить размер в свернутом состоянии, вы можете просто запомнить последнее действительное значение, прежде чем окно будет свернуто.