私がやろうとしているのは、コントロール(同じプロセス内ですが、私にはコントロールがありません)を再描画させ、再描画が完了するまでコードをブロックすることです。
使ってみUpdateWindow
ましたが、再描画が終わるのを待っていないようです。
再描画が完了するのを待つ必要があるのは、後で画面を取得したいからです。
コントロールはdotNetコントロールではなく、通常のWindowsコントロールです。
私はそれを確認しました:
- ハンドルは正しいです。
UpdateWindow
trueを返します。- ウィンドウを無効にする必要があることを確認するため
InvalidateRect(hWnd, IntPtr.Zero, true)
に、呼び出しの直前に送信を試みました。UpdateWindow
- コントロールの親ウィンドウで同じことを試してみました。
使用したコード:
[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