Конференция "WinAPI" » Как перерисовать окно полностью?
 
  • dmk © (09.03.15 05:25) [0]
    У меня фон (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;

  • junglecat © (09.03.15 10:34) [1]
    RedrawWindow(hWin, nil, 0, RDW_INVALIDATE or RDW_UPDATENOW)
  • dmk © (09.03.15 14:02) [2]
    Не помогает :(
  • dmk © (09.03.15 14:08) [3]
    Вот так помогло! :)
    RedrawWindow(w, nil, 0, RDW_INVALIDATE or RDW_ALLCHILDREN);

    Спасибо котик :)
 
Конференция "WinAPI" » Как перерисовать окно полностью?
Есть новые Нет новых   [118665   +33][b:0][p:0.001]