ListView_Scroll调用后再调用ShowScrollBar隐藏滚动条,会闪烁一下,有什么办法吗
时间: 2023-06-26 21:08:39 浏览: 56
可以尝试使用双缓冲技术来解决这个问题,具体方法如下:
1. 创建一个派生自ListView的新控件,例如MyListView。
2. 在MyListView的构造函数中设置双缓冲:
```c++
MyListView::MyListView()
{
this->DoubleBuffered = true;
}
```
3. 在MyListView的OnPaint方法中绘制ListView的内容:
```c++
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 绘制ListView的内容
}
```
4. 在需要隐藏滚动条时,调用以下代码:
```c++
MyListView.SetScrollState(0x1, false); // 隐藏水平滚动条
MyListView.SetScrollState(0x2, false); // 隐藏垂直滚动条
```
通过使用双缓冲技术,可以在绘制ListView的同时隐藏滚动条,避免了闪烁的问题。
相关问题
ListView_Scroll调用之后,总是把ListView的滚动条显示出来了,怎么办
可以尝试在调用 `ListView_Scroll` 方法后,再调用 `ListView_ShowScrollBar` 方法将滚动条隐藏,例如:
```vb
ListView_Scroll ListView1.hWnd, 0, 100
ListView_ShowScrollBar ListView1.hWnd, SB_VERT, False
```
其中,`SB_VERT` 表示竖直方向的滚动条,`False` 表示隐藏滚动条。如果需要显示滚动条,将最后一个参数改为 `True` 即可。
win sdk开发ListView 隐藏滚动条,用自定义的滚动条替换原来的滚动条,自定义滚动条控制ListView的时候,隐藏的滚动条会显示出来,这时候调用ShowScrollBar隐藏滚动条会一闪而过,有解决的办法吗
可以尝试使用以下方法来解决这个问题:
1. 在创建ListView之前,先调用SystemParametersInfo函数来获取滚动条的宽度,保存在全局变量中。
```c++
int g_nScrollBarWidth = 0;
BOOL InitScrollBarWidth()
{
BOOL bRet = FALSE;
SYSTEM_PARAMETERS_INFO spi = {0};
if (SystemParametersInfo(SPI_GET_SCROLLBARSIZE, 0, &spi, 0))
{
g_nScrollBarWidth = max(spi.nScrollWidth, spi.nScrollHeight);
bRet = TRUE;
}
return bRet;
}
```
2. 在自定义滚动条控制ListView的时候,先调用ShowScrollBar函数隐藏原始的滚动条,再显示自定义的滚动条。
```c++
void OnVScroll()
{
// 隐藏原始的滚动条
ShowScrollBar(m_hWnd, SB_VERT, FALSE);
// 显示自定义的滚动条
ShowScrollBar(m_hWnd, SB_VERT_CUSTOM, TRUE);
}
```
3. 在ListView的WM_PAINT消息处理函数中,重新绘制ListView的边框。这样可以避免隐藏的滚动条在ListView的边框处出现。
```c++
LRESULT OnPaint()
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(m_hWnd, &ps);
// 绘制ListView的内容
// 重新绘制ListView的边框
RECT rcClient;
GetClientRect(m_hWnd, &rcClient);
DrawEdge(hdc, &rcClient, EDGE_SUNKEN, BF_RECT);
EndPaint(m_hWnd, &ps);
return 0;
}
```
通过以上方法,可以实现在自定义滚动条控制ListView时隐藏原始滚动条,并且避免隐藏的滚动条在ListView的边框处出现。