【问题标题】:Disable Scrollbar on Owner Drawn Listbox禁用所有者绘制的列表框上的滚动条
【发布时间】:2012-03-19 02:01:30
【问题描述】:

我有一个所有者绘制的列表框,我向其中添加了很多项目(这需要时间), 添加项目时,垂直滚动条不断变小, 我想在开始添加时禁用滚动条,然后重新启用它..

我试过了--

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);

【问题讨论】:

标签: c++ winapi


【解决方案1】:

在添加字符串之前,您可以使用 WM_SETREDRAW 消息并将 wParam (fRedraw) 设置为 FALSE。完成后将其设置为 TRUEUpdateWindowRedrawWindow

如果应用程序必须将多个项目添加到列表框,此消息会很有用。应用程序可以在 wParam 设置为 FALSE 的情况下调用此消息,添加项目,然后在 wParam 设置为 TRUE 的情况下再次调用该消息。最后,应用程序可以调用 RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN) 来重新绘制列表框。

【讨论】:

  • 我已经尝试过WM_SETREDRAW,窗口没有重绘,但是滚动条动画发生了,列表框变成了空白。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2013-01-29
  • 1970-01-01
相关资源
最近更新 更多