如何强制窗口重绘?

时间:2011-04-11 14:30:05

标签: c# .net wpf xaml

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

WindowStyle = System.Windows.WindowStyle.None;
WindowState = System.Windows.WindowState.Maximized;
Topmost = true;

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

如果我使用Atl-Tab切换到另一个应用程序然后回到我的

,那么UPD全部重新绘制正常

1 个答案:

答案 0 :(得分: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);
    }
}

用法:

Form testForm = new Form();
testForm.ForcePaint();