основная функция перерисовки
BOOL RedrawWindow( _In_ HWND hWnd, // окно
_In_ const RECT *lprcUpdate, // какой прямоугольник надо преерисовать (игнорится. если задан регион)
_In_ HRGN hrgnUpdate, // какой регион надо перерисовать (если оба 0, то вся клиентская область)
_In_ UINT flags //
);
флаги - RDW_ERASE ( эффективен только с RDW_INVALIDATE ), посылает окну WM_ERASEBKGND (один из параметров - HDC, второй не используется) при этом сообщении DefWindowProc удаляет задний фон
- сообщение WM_ERSAEBKGND
- wParam - хэндл к DC
- lParam - не используется
- означает что надо удалить BackGround
- RDW_FRAME - заставляет всю неклиенсткую часть, которая пересекается с перерисовываемым регионом, перерисовываться (притом WM_NCPAINT(один параметр - хэндл региона) шлется и DefWindowProc перерисовывает неклиентскую часть в области)
- RDW_INTERNALPAINT - шлет окну WM_PAINT вне зависимости от региона и прямоугольника
- RDW_INVALIDATE - делает невалидными область или прямоугольник или окно
- RDW_NO{one of the messages above} - убирает все сообщения, которые были посланы теми флагами
- RDW_ERASENOW, RDW_UPDATENOW - эта же функция и перерисовывает окно (а не просто помещает сообщения в очереди)
- RDW_ALL(NO)CHILDREN - (не) применяет операции к дочерним окнам в зоне действия (по дефолту зависит от WS_CLIPCHILDREN)