Нахождение эффективного размера CListCtrl в свернутом окне MFC

В моем приложении MFC пользователь может свернуть окно, в котором есть CListCtrl. Мне нужно знать, сколько видимых элементов будет отображать элемент управления списком, когда пользователь восстановит окно.

Первая реализация используется GetCountPerPage, Это работало замечательно, пока мы не заметили свернутый случай окна и обнаружили, что он возвращает ноль.

Я также пытался GetClientRect, GetWindowRect а также GetWindowPlacement (с помощью rcNormalPosition), чтобы попытаться выяснить размер CListCtrl, чтобы я мог вычислить количество страниц вручную. Все эти API возвращают пустые прямоугольники, расположенные в разных местах за пределами экрана.

Какой лучший способ выяснить, какой будет высота CListCtrl после восстановления окна? Конечно, настоящий прямоугольник окна доступен как-то.

2 ответа

Как только окно будет восстановлено / свернуто / показано / скрыто, будет вызван WM_SHOWWINDOW. Таким образом, вы можете использовать это сообщение для вызова OnShowWindow() и найти количество / высоту clistctrl.

CListCtrl - это оболочка для элемента управления представления списка. Чтобы работать с ним напрямую, вы можете попробовать использовать макросы ListView_GetCountPerPage(...), которые в основном отправляют сообщение LVM_GETCOUNTPERPAGE. Если это все еще возвращает ноль, это поведение, вероятно, по умолчанию, или это ошибка в реализации общих элементов управления. Если ваш список не может изменить размер в свернутом состоянии, вы можете просто запомнить последнее действительное значение, прежде чем окно будет свернуто.

Другие вопросы по тегам