如何强制窗口重绘?

use*_*528 4 .net c# wpf xaml

我有一个全屏窗口,使用此代码:

WindowStyle = System.Windows.WindowStyle.None;
WindowState = System.Windows.WindowState.Maximized;
Topmost = true;
Run Code Online (Sandbox Code Playgroud)

它在Win7下工作正常,但在WinXP下,当窗口全屏时,一些窗口元素不会被重绘.有没有办法强制窗口进行完全重绘和布局更新?

如果我用Atl-Tab切换到另一个应用程序然后再回到我的应用程序,UPD全部重新绘制正常

Jam*_*mes 5

您可以使用Windows API强制窗口重绘.

示例类实现:

public static class WindowsApi
{
    private const int WmPaint = 0x000F;

    [DllImport("User32.dll")]
    public static extern Int64 SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);

    public static void ForcePaint(this Form form)
    {
        SendMessage(form.Handle, WmPaint, IntPtr.Zero, IntPtr.Zero);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

Form testForm = new Form();
testForm.ForcePaint();
Run Code Online (Sandbox Code Playgroud)