ОК, после всех поисков и проверок я обнаружил, что LockUpdateWindow - плохая идея - см., Например, статьи Раймонда Чена OldNewThing . Но даже реализовать идею SetRedrawWindow было не так просто - потому что то, что я получил, было получено только из обработчика HWND главного окна IConsole2 * pConsole-> GetMainWindow (). Установив его в SetRedraw = FALSE, он исчез очень странным образом. Хотя, чтобы процедура запускалась только для TreeView, а не для всего приложения (наша левая панель), я запустил
EnumChildWindows(hWnd, SetChildRedraw, FALSE); //stopping redraw
//... here you do your operations
EnumChildWindows(hWnd, SetChildRedraw, TRUE); //restarting redraw
где обратный вызов SetChildRedraw был определен следующим образом:
#define DECLARE_STRING(str) TCHAR str[MAX_PATH]; ZeroMemory(str, sizeof(str));
BOOL CALLBACK SetChildRedraw(HWND hwndChild, LPARAM lParam)
{
RECT rcChildRect; ZeroMemory(&rcChildRect, sizeof(rcChildRect));
DECLARE_STRING(sText)
GetClassName(hwndChild, sText, MAX_PATH);
if (wcsstr(sText, L"SysTreeView32") != NULL)
{
SetWindowRedraw(hwndChild, lParam);
if (lParam == TRUE)
{
GetWindowRect(hwndChild, &rcChildRect);
InvalidateRect(hwndChild, &rcChildRect, TRUE);
}
}
return TRUE;
}