【发布时间】:2012-12-12 23:35:07
【问题描述】:
我要做的是使控件(在同一进程中,但我无法控制)重绘自身,并让我的代码阻塞,直到它完成重绘。
我尝试使用UpdateWindow,但这似乎没有等待重绘完成。
我需要等待它完成重绘的原因是我想在之后抓取屏幕。
该控件不是 dotNet 控件,而是常规的 windows 控件。
我已经确认:
- 句柄正确。
-
UpdateWindow返回 true。 - 尝试在调用
UpdateWindow之前发送InvalidateRect(hWnd, IntPtr.Zero, true)以确保窗口需要失效。 - 尝试在控件的父窗口上做同样的事情。
使用的代码:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool InvalidateRect(IntPtr hWnd, IntPtr rect, bool bErase);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UpdateWindow(IntPtr hWnd);
public bool PaintWindow(IntPtr hWnd)
{
InvalidateRect(hWnd, IntPtr.Zero, true);
return UpdateWindow(hWnd);
}
//returns true
【问题讨论】:
-
也许你可以在 WM_PAINT 情况下禁用渲染,然后重新启用它。
-
@S.A.Parkhid 你能详细说明一下吗?
-
嗯.. 为什么你认为 UpdateWindow 似乎没有等待重绘完成?
标签: c# winapi gdi invalidation redraw