내가 뭘 하려는지는 (같은 프로세스에서,하지만 내가 제어 할 수없는) 컨트롤을 그 자체로 다시 그려야하고, 그리고 그 때까지는 코드를 차단해야한다. 다시 그릴 완료.동기식 (블로킹 방법 포함)
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 제발 좀 더 자세히 설명해 주시겠습니까? – Rotem
흠 .. 왜 _UpdateWindow가 다시 그리기가 끝나기를 기다리지 않는 것 같습니까? –