在最小化的 MFC 窗口中查找 CListCtrl 的有效大小

Finding effective size of CListCtrl within minimized MFC window

本文关键字:CListCtrl 有效 查找 最小化 MFC 窗口      更新时间:2023-10-16

在我的 MFC 应用中,用户可以最小化内部具有 CListCtrl 的窗口。我需要知道用户还原窗口后列表控件将显示多少个可见项。

第一个实现使用GetCountPerPage .这工作得很好,直到我们注意到最小化的窗口情况并发现它返回零。

我还尝试了GetClientRectGetWindowRectGetWindowPlacement(使用 rcNormalPosition)来尝试计算 CListCtrl 的大小,以便我可以手动计算页数。所有这些 API 都返回位于各个屏幕外位置的空矩形。

确定恢复

窗口后 CListCtrl 的高度的最佳方法是什么?当然,真正的窗口矩形以某种方式可用。

CListCtrl 是列表视图控件的包装器。要直接使用它,您可以尝试使用宏 ListView_GetCountPerPage(...),它基本上是发送LVM_GETCOUNTPERPAGE消息。如果仍然返回零,则此行为可能是默认的,或者是常见控件实现中的错误。如果您的列表视图无法在最小化状态下更改大小,您可能只记住窗口最小化之前的最后一个有效值。

一旦窗口被恢复/最小化/显示/隐藏,WM_SHOWWINDOW将被调用。因此,您可以使用此消息调用 OnShowWindow() 并查找 clistctrl 的计数/高度。