Как изменить размер окна с помощью WinAPI - PullRequest
1 голос
/ 31 мая 2010

Я хочу изменить размер окна, используя WinAPI. Я использую функцию WinAPI

SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

Размер окна изменяется, но содержимое окна не перерисовывается. Если я изменю размер этого окна с помощью мыши, содержимое перерисовывается. Как изменить размер окна с помощью WinAPI с перерисовкой контента?

Ответы [ 2 ]

4 голосов
/ 31 мая 2010

Убедитесь, что вы не указали SWP_NOREDRAW в параметре uFlags. Если он не установлен и проблема не устранена, просто вызовите UpdateWindow (hwnd) вручную.

2 голосов
/ 31 мая 2010

По умолчанию окно не перерисовывается (точнее - не аннулируется) при изменении размера. Если вы уменьшите окно - оно вообще не получит WM_PAINT. И если вы увеличите его - область обновления будет включать только добавленную область.

Если содержимое окна зависит от его размера - само окно должно принять решение о признании себя недействительным (посредством вызова InvalidateRect / InvalidateRgn) при обработке сообщения WM_SIZE.

Тем не менее, вы можете сделать любое окно недействительным в любое время, позвонив по номеру InvalidateRect / InvalidateRgn.

...