我有一个所有者绘制的列表框,我添加了很多项目(这需要时间), 添加项目时,垂直滚动条不断变小, 我想在开始添加时禁用滚动条,然后重新启用它。
我试过了 -
LONG old_style=GetWindowLong(hPlayList,GWL_STYLE);
LONG new_style= old_style&~WS_VSCROLL;
SetWindowLong(hPlayList,GWL_STYLE,new_style);
SetWindowPos(hPlayList,HWND_TOP,lstRc.left,lstRc.right,lstRc.right-lstRc.top,lstRc.bottom-lstRc.top,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
UpdateWindow(hPlayList);
和
ShowScrollBar(hPlayList,SB_VERT,FALSE);
但是当我添加项目时仍会显示滚动条, 列表框创建如,
hPlayList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTBOX, NULL,
LBS_OWNERDRAWFIXED |WS_VSCROLL | WS_HSCROLL |WS_CHILD | WS_TABSTOP | WS_VISIBLE|LBS_NOTIFY|LBS_HASSTRINGS,
lbsPos.x, lbsPos.y,350, 400, hWnd, (HMENU) LIST_ID, GetModuleHandle(NULL), NULL);
我使用SendMessage()添加项目。
我也试过了,
ShowWindow(hPlayList,SW_HIDE);
和
SendMessage(hPlayList,WM_SETREDRAW,(WPARAM)FALSE,0);
答案 0 :(得分:3)
在添加字符串之前,您可以使用wParam (fRedraw)
设置为FALSE
的{{3}}消息。完成后,请将其设置为TRUE
和UpdateWindow
或RedrawWindow
。
如果应用程序必须将多个项目添加到列表框,则此消息非常有用。应用程序可以在wParam设置为FALSE的情况下调用此消息,添加项目,然后在wParam设置为TRUE的情况下再次调用该消息。最后,应用程序可以调用RedrawWindow(hWnd,NULL,NULL,RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN)以使列表框重新绘制。