Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
XairOn
-
- Постоялец
-
-
- Сообщения: 324
- Зарегистрирован: 19.07.2004 (Пн) 20:20
- Откуда: Irkutsk region
-
XairOn » 19.08.2006 (Сб) 10:34
Доброго времени суток, господа! Вопрос мой следующий: у формы создаваемой в VB есть такое свойство AutoRedraw. Если я создаю окно на WinAPI можно ли как-то это свойство реализовать? Конечно есть вариант перерисовывать окно вручную при каждом WM_PAINT, но может есть другой вариант? Например стиль какой-нибудь при создании окна указать или что-нибудь в этом роде.
-
tyomitch
-
- Пользователь #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
Ты имел ввиду это?
-
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
Кто сейчас на конференции
Сейчас этот форум просматривают: Mail.ru [бот], Yandex-бот и гости: 46