AutoRedraw на WinAPI

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

AutoRedraw на WinAPI

Сообщение XairOn » 19.08.2006 (Сб) 10:34

Доброго времени суток, господа! Вопрос мой следующий: у формы создаваемой в VB есть такое свойство AutoRedraw. Если я создаю окно на WinAPI можно ли как-то это свойство реализовать? Конечно есть вариант перерисовывать окно вручную при каждом WM_PAINT, но может есть другой вариант? Например стиль какой-нибудь при создании окна указать или что-нибудь в этом роде.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.08.2006 (Сб) 10:57

Нет, никакого другого варианта нет.

Когда ты в VB устанавливаешь AutoRedraw, VB за твоей спиной создаёт битмап и все твои рисунки рисует туда, а по WM_PAINT отрисовывает этот битмап на форме.
Можешь сделать так же.
Изображение

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 19.08.2006 (Сб) 11:53

2 tyomitch, а вот тут можно чуть-чуть подробнее. Я сделал вот так:
Код: Выделить всё
...
case WM_PAINT
        Call BackgroundDraw (hwnd)
'тут в сабклассинге формы получаем сообщение о том,
'что окно перерисовалось и вызываем соответствующую
'процедуру, которая будет перерисовывать содержимое
...
'а вот собственно и сама процедура перерисовки
Sub BackgroundDraw (hwnd As Long)
    Dim R As RECT, img As Long, mBrush As Long
   
    img = LoadImage (GetModuleHandle(0), "back.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
    mBrush = CreatePatternBrush(img)
    Call SetRect (R, 0, 0, 400, 200)
    Call FillRect (GetDC(hwnd), R, mBrush)
    Call DeleteObject (mBrush)
    Call DeleteObject (img)
End Sub

Ты имел ввиду это?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.08.2006 (Сб) 12:08

Посмотри тут: http://bbs.vbstreets.ru/viewtopic.php?p=6622447#6622447
Там на Сях, но вряд ли тебя это напугает.
Изображение

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 20.08.2006 (Вс) 13:50

Код: Выделить всё
Case WM_PAINT
    Dim ps As PAINTSTRUCT,hHDC as long
    Dim R As RECT, img As Long, mBrush As Long
   
    hHDC = BeginPaint(hwnd, ps)

    img = LoadImage (GetModuleHandle(0), "back.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
    mBrush = CreatePatternBrush(img)
    Call SetRect (R, 0, 0, 400, 200)
    Call FillRect (hHDC, R, mBrush)
    Call DeleteObject (mBrush)
    Call DeleteObject (img)

    Call EndPaint(hwnd, ps)

    WndProc = CallWindowProc(PrevWndProc, hwnd, message, wParam, lParam)
End Sub


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList