我的應用程序是注入第三方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