MFC列表控件滚动显示额外的网格线

rav*_*int 2 mfc

我在报表视图中使用MFC列表控件和网格线以模糊的电子表格方式显示数据.

有时,当用户垂直滚动控件时,会绘制额外的网格线,这看起来很糟糕.

仅当使用滑块或鼠标滚轮滚动时才会发生这种情况,只有当使用滚动控件底部的小向下箭头按钮时才会发生这种情况.

当列表控件窗口的大小不是精确的偶数行时,似乎会发生这种情况,因此在底部可以看到部分行.

如果我调整列表控件的大小,以便没有可见的部分行,则问题就解决了.但是,当程序在另一台计算机上运行时会出现,可能是因为行占用的像素数发生了变化.

我假设它是屏幕分辨率,字体大小和"对话框单元"之间的交互.

我想我需要以编程方式强制控件在创建时的大小.但是大小呢?

我尝试过使用ApproximateViewRect()方法,但我无法让它工作.也许这种方法不了解报告视图?

我想,另一种方法是创建我自己的CListCtrl特化,并覆盖任何滚动方法.这似乎可能是很多工作.

此屏幕截图显示了一个密切相关的问题,其中网格线丢失

替代文字

这里有一个额外的网格线

替代文字

这两者之间以及它们之间的唯一区别是完全滚动的一个区别是控件的垂直尺寸不同的几个像素.

Aid*_*yan 6

这确实是一个与"平滑滚动"相关的错误,这是一个解决方法:

void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    __super::OnVScroll(nSBCode, nPos, pScrollBar);
    Invalidate();
    UpdateWindow();
}
Run Code Online (Sandbox Code Playgroud)