我的应用程序是注入第三方GUI应用程序的dll。有DLL创建子窗口包含应用程序的主窗口上的少数控件。问题是当主窗口重新绘制时,我的窗口及其控件闪烁。我已经阅读了许多关于类似问题的文章,但无法解决它。下面是一些代码子窗口闪烁
hwndContainer = CreateWindowEx(WS_EX_TOPMOST, PANEL_CLASS_NAME, "", WS_CHILD | WS_VISIBLE, 0, 0, width, height, hwnd, 0, g_hInstance, cd);
CreateWindowEx(WS_EX_TOPMOST, "button", "Click me", WS_CHILD | WS_VISIBLE | WS_TABSTOP, x, y, w, h, hwndContainer, 0, 0, 0);
...
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwndPanel, &ps);
RECT r;
GetClientRect(hwndPanel, &r);
SelectObject(hdc, hpenBorder);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
RoundRect(hdc, 0, 0, r.right, r.bottom, 5, 5);
EndPaint(hwndPanel, &ps);
return 0;
我尝试添加WS_CLIPCHILDREN主窗口风格,处理WM_PAINT主窗口等有什么想法吗?
为了响应'WM_ERASEBKGND',你的容器窗口是否擦除其背景?这是闪烁的常见原因。 – arx
另一个想法。如果在每次背景擦除和上色之前和之后添加一个很短的延迟时间(例如'睡眠(500);'),您通常可以确切地看到正在发生的画面以及闪烁的来源。 – arx
您的CreateWindow是否发生在主UI线程的另一个线程上? Win32通常不会这样。 – Deanna