Winapi 子窗口闪烁

Winapi 子窗口闪烁,winapi,user-interface,Winapi,User Interface,我的应用程序是dll,它被注入到第三方GUI应用程序中。dll在应用程序的主窗口上创建包含少量控件的子窗口。问题是当主窗口被重新绘制时,我的窗口及其控件会闪烁。我已经读过很多关于类似问题的文章,但无法解决。这里有一些代码 hwndContainer = CreateWindowEx( WS_EX_TOPMOST, PANEL_CLASS_NAME, "", WS_CHILD | WS_VISIBLE, 0, 0, width, height, hwnd, 0, g_hInstance, cd )

我的应用程序是dll,它被注入到第三方GUI应用程序中。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\u CLIPCHILDREN添加到主窗口样式,处理主窗口的WM\u绘画等。有什么想法吗?

您可以尝试WS\u ClipSpilings。。。我已经有很长一段时间没有直接使用窗口样式了,但我似乎记得这种样式需要帮助减少非顶级窗口中的重画闪烁。祝您好运。

您的容器窗口是否会删除其背景以响应
WM_ERASEBKGND
?这是闪烁的常见原因。另一种想法。如果在每次背景擦除和绘制之前和之后添加一个短延迟(例如
睡眠(500);
),您通常可以准确地看到正在发生的绘制以及闪烁的来源。您的CreateWindow是否发生在主UI线程的另一个线程上?Win32通常不喜欢这样。另外,WS_CLIPCHILDREN。