Quello che sto cercando di fare è un controllo (nello stesso processo, ma di cui non ho il controllo) per ridisegnare se stesso, e per il mio codice da bloccare finché non lo si finito di ridisegnare.Ridisegna il controllo della finestra in modo sincrono (con metodo di blocco)
Ho provato a utilizzare UpdateWindow
ma ciò non sembra attendere il completamento del ridisegno.
Il motivo per cui ho bisogno di aspettare che finisca il ridisegno è che mi piacerebbe prendere lo schermo in seguito.
Il controllo non è un controllo dotNet, è un normale controllo di Windows.
ho confermato che:
- Il manico è corretta.
UpdateWindow
restituisce true.- Provato a inviare
InvalidateRect(hWnd, IntPtr.Zero, true)
appena prima della chiamata aUpdateWindow
per assicurarsi che la finestra abbia bisogno di invalidare. - Ho provato a fare la stessa cosa nella finestra principale del controllo.
codice utilizzato:
[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
Forse è possibile disattivare il rendering in caso WM_PAINT e poi, dopo che riattivare questo. –
@ S.A.Parkhid Potresti elaborare per favore? – Rotem
Hmm .. Perché pensi che _UpdateWindow non sembra aspettare il completamento del redraw_? –