У меня фон (ClientArea) в MDI form перерисовывается в сообщении WM_ERASEBKGND. При смене фона нужно обновить окно, но дело в том, что само окно (размеры или позиция) не меняется. Ни paint, ни refresh'ы и прочие invalidat'ы не помогают. При изменении размеров и т.п. фон рисуется нормально.
Как принудительно обновить или все окно или ClientArea?Код перерисовки фона такой:
procedure TCForm64.ClientWinProc(var Msg: TMessage);
var
res: boolean;
dc: hdc;
p: TPoint;
x, y: integer;
begin
if Msg.Msg = WM_ERASEBKGND then Msg.Result := 1 else
Msg.Result := CallWindowProc(OldWinProc, ClientHandle, Msg.Msg, Msg.wParam, Msg.lParam);
if Msg.Msg = WM_ERASEBKGND then
begin
dc := TWMEraseBkGnd(msg).DC;
if FBackBuffer.dbMemEntry <> nil then
begin
p := ScreenToClient(ClientOrigin);
x := p.X;
y := p.Y;
res := BitBlt(DC, x, y, ClientWidth, ClientHeight, FBackBuffer.dbMemDC, 0, 0, srccopy);
end;
end;
end;