Перерисовка окна.

Тема в разделе "WASM.BEGINNERS", создана пользователем asd, 10 сен 2006.

  1. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Какое сообщение надо послать окну , чтобы перерисовать его?
    Пробовал
    invoke SendMessage,[MainWin],WM_PAINT,0,0
    invoke UpdateWindow,[MainWin]
    invoke RedrawWindow,[ScreenWindow],Rec,0,RDW_INTERNALPAINT
    ничего не помогает.
    Шарик начинает крутиться, только при изменении размера окна.
    При SendMessage,[MainWin],WM_PAINT,0,0 окно получает сообщение,
    invoke BeginPaint,[hWnd],ps
    mov [hDC],eax
    call Display_
    invoke BitBlt,[hDC],0,0,[cxDIB],[cyDIB],[pdcDIB],0,0,SRCCOPY
    invoke EndPaint,[hWnd],ps
    затем этот блок нормально отрабатывает, но окно не обновляется.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    InvalidateRect(MainWnd, NULL, 0);
     
  3. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Спасибо.
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    InvalidateRect() поставит WM_PAINT в очередь сообщений и окно отрисуется, когда более нет никаких сообщений, т.е. в последнюю очередь. Иногда надо сделать это немедленно, например при прокрутке окна или при изменении ширины панелей разделённых Splitter-ом. Для этой цели нужна следующая пара процедур:
    Код (Text):
    1. InvalidateRect (hWnd, pRect, TRUE);
    2. UpdateWindow (hWnd);