暂停渲染/绘图 CTreeCtrl (MFC)

agu*_*les 3 c++ mfc visual-c++

有没有办法在诸如展开/折叠树中的所有节点之类的昂贵操作期间暂停 aCTreeCtrl或其渲染CTreeView?如果没有PauseRendering(TRUE)类似的功能或类似的功能,是否有可能拦截绘制消息并仅在未调用我的 ExpandAll 方法的情况下将其转发到树?

rod*_*igo 5

您可以使用WM_SETREDRAW消息:当发送wParamFALSE它会阻止窗口接收WM_PAINT消息; 当发送wParamTRUE它会被设置为正常。

完成后不要忘记手动重新绘制窗口,因为它不会自动完成:

RedrawWindow(hWnd, NULL, NULL, RDW_ERASE|RDW_FRAME|RDW_INVALIDATE|RDW_ALLCHILDREN);
Run Code Online (Sandbox Code Playgroud)

  • 我遇到同样的问题很长时间了,即使 SetRedraw 为 false,垂直滚动条也会出现和消失,所以我终于决定对此做点什么!解决方案非常简单(我的类直接从 CTreeCtrl 派生):`CMyTreeCtrl::DisableRedraw() { SetRedraw(FALSE); ModifyStyle(NULL, TVS_NOSCROLL); } CMyTreeCtrl::EnableRedraw() { ModifyStyle(TVS_NOSCROLL, NULL); 设置重绘(真);重绘窗口( NULL, NULL, RDW_NOCHILDREN | RDW_UPDATENOW | RDW_INVALIDATE ); }` 不知道为什么我几年前没有想到这一点:-) (4认同)