Посл.ответ |
Сообщение |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 15:25 · Личное сообщение · #1
Привет всем. Вопрос новичка! Как нарисовать на форме простую бмп  ? Делал так:
invoke BeginPaint,hwnd,ADDR ps
mov hdc,EAX
invoke ImageList_Create,149,102,ILC_COLOR16,0,0
mov hImList,EAX
invoke LoadBitmap,hInstance,IM_WAIT
mov hBmp,EAX
invoke ImageList_Add,hImList,hBmp,NULL
invoke ImageList_Draw,hImList,0,hdc,8,179,ILD_NORMAL
invoke DeleteObject,hBmp
invoke EndPaint,hwnd, ADDR ps
invoke SendMessage,hwnd,WM_PAINT,0,0
не прорисовывает почему то.. Смотрел в отладчике: вроде все ф-ии возвращают валидные значения, но.. Неужели Image_List можно использовать только для контролов? Но ведь написано:
"The ImageList_Draw function draws an image list item in the specified device context."
Помогите понять ошибку!
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
|
 Ранг: 353.0 (мудрец) Активность: 0.37↘0 Статус: Участник resreveR
|
Создано: 19 апреля 2007 16:01 · Личное сообщение · #2
InitResources proc
invoke BitmapFromResource, hInstance, 9999 ; background
mov hBitmapBG, eax
invoke GetDC, hWND
mov hDC_Main, eax
invoke CreateCompatibleDC, hDC_Main
mov hDC_BG, eax
invoke SelectObject, hDC_BG, hBitmapBG
ret
InitResources endp
PaintProc proc
LOCAL hDC :DWORD
LOCAL ps :PAINTSTRUCT
invoke BeginPaint,hWND,ADDR ps
mov hDC, eax
invoke BitBlt, hDC, 0, 0, WND_WIDTH, WND_HEIGHT, hDC_BG, 0, 0, SRCCOPY
invoke EndPaint,hWND,ADDR ps
ret
PaintProc endp
----- Тут не могла быть ваша реклама | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 17:07 · Личное сообщение · #3
lord_Phoenix
invoke BitmapFromResource, hInstance, 9999 ; background
hInstance чего здесь должен быть? Может у меня в этом и ошибка.. Я указывал на Instance окна..
Хотя написано:
; get a resource handle (address) and resource length from the executable
invoke FindResource, hModule, ResNumber, ADDR szImage
значит правильно..  ?
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 353.0 (мудрец) Активность: 0.37↘0 Статус: Участник resreveR
|
Создано: 19 апреля 2007 17:21 · Личное сообщение · #4
Icelot
invoke GetModuleHandle, NULL
mov hInstance, eax
----- Тут не могла быть ваша реклама | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 17:33 · Личное сообщение · #5
Да, с hInstance разобрался, всё правильно было. Беда вот где:
FindResource возвращает ноль:
00401232 |. 68 56314000 PUSH SerFile.00403156 ; /ResourceType = "IMAGE"
00401237 |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |ResourceName = FA6
0040123A |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hModule = 00400000 (SerFile)
0040123D |. E8 DC060000 CALL <JMP.&kernel32.FindResourceA> ; \FindResourceA
FA6 = 4006 = номер картинки. Картинка в ресурсе есть.. Остальные параметры тоже правильные. Не пойму че не так..
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 353.0 (мудрец) Активность: 0.37↘0 Статус: Участник resreveR
|
Создано: 19 апреля 2007 17:35 · Личное сообщение · #6
тип ресурса такой? last_error какой?
----- Тут не могла быть ваша реклама | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 17:54 · Поправил: Icelot · Личное сообщение · #7
lord_Phoenix пишет:
last_error какой?
RESOURCE_TYPE_NOT_FOUND
ты прав  в ресурсном файле было BITMAP - исправил на IMAGE. FindResource отработала.
Но картинки всё равно нету
Посмотрел дальше.. SelectObject выдаёт 0 в EAX. Так и должно быть? Извиняюсь, просто msdn нету под рукой..
А winapi_rus.hlp Виста не хочет открывать. Устарел длшя неё формат....
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
Ранг: 495.3 (мудрец) Активность: 0.3↘0 Статус: Участник
|
Создано: 19 апреля 2007 17:57 · Личное сообщение · #8
Icelot пишет:
Картинка в ресурсе есть..
А редакторы ресурсов её видят?
----- Всем привет, я вернулся | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 18:06 · Личное сообщение · #9
Bitfry да!
IMAGE
- 4006
- 1033
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 18:19 · Личное сообщение · #10
the return value is a handle to the object being replaced.
значит SelectObject.. Сейчас будем разбираться
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 18:29 · Поправил: Icelot · Личное сообщение · #11
[deleted] - поторопился..
BitmapFromResource в свою очередь вызывает BitmapFromMemory та еще +3 доп. ф-ии... Кое-как сделал вроде, но компилятор Unresolved external symbol Что это значит?
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
Ранг: 39.2 (посетитель), 16thx Активность: 0.02↘0 Статус: Участник
|
Создано: 19 апреля 2007 19:25 · Личное сообщение · #12
Попробуй добавить:
include c:\masm32\include\oleaut32.inc
include c:\masm32\include\ole32.inc
includelib c:\masm32\lib\oleaut32.lib
includelib c:\masm32\lib\ole32.lib
| Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 20:20 · Личное сообщение · #13
bbuc спасибо эти уже добавил. Только картинки нету. Пойду повешусь.....
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 19 апреля 2007 20:58 · Личное сообщение · #14
Что ж.. похоже, что даже простая графика на асме - это не просто.. Может есть у кого-нибудь рабочие примеры с сорцами? Или литература по теме? Буду очень признателен!
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 353.0 (мудрец) Активность: 0.37↘0 Статус: Участник resreveR
|
Создано: 20 апреля 2007 07:28 · Личное сообщение · #15
прямо с масмом примеры идут, глянь их
----- Тут не могла быть ваша реклама | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 20 апреля 2007 07:35 · Поправил: Icelot · Личное сообщение · #16
lord_Phoenix спасибо! В масме есть пример:
masm32\examples\exampl08\car - это то, что нужно.
Нарисовалась =)))
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
Ранг: 7.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 20 апреля 2007 07:52 · Личное сообщение · #17
Icelot
могу дать на фасме сорец как грузить jpeg с помощью OleLoadPicture а про масм забудьте ибо не интересно
| Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 20 апреля 2007 07:54 · Личное сообщение · #18
Ke Kwan
выкладывай если можешь. А что в масме не интересно?
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 20 апреля 2007 11:44 · Личное сообщение · #19
Продолжение темы.. Если картинки разные и прорисовывать их надо несколько раз. Как правильно обновить прямоугольник? Картинка обновляется если прямоугольник с ней окажется в невидимой области или программу свернуть - развернуть. Т.е. он становится invalidate, как я понимаю?
Пробовал RedrawWindow может параметры не те, но не обновляет.
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
Ранг: 495.3 (мудрец) Активность: 0.3↘0 Статус: Участник
|
Создано: 20 апреля 2007 12:07 · Личное сообщение · #20
Icelot пишет:
Как правильно обновить прямоугольник?
Например вызвать Invalidaterect (урок 4 Айсилона).
----- Всем привет, я вернулся | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 20 апреля 2007 12:16 · Поправил: Icelot · Личное сообщение · #21
Bitfry пишет:
Например вызвать Invalidaterect
Это первое, что я попробовал.
Invalidaterect и UpdateWindow посылают окну сообщение WM_PAINT в котором и происходит прорисовка картинки. Не помогает.
added:
Разобрался. Просто сам наворочил много, вот и запутался. InvalidateRect.
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
Ранг: 7.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 20 апреля 2007 18:26 · Личное сообщение · #22
Вот пример на фасм для загрузки JPEG и я не юзаю прорисовку через WM_PAINT а просто ассоциирую STATIC с нужным битмапом. Так проще) Данный пример может (не проверял но должен) грузить еще BMP, GIF, ICO, WMF, и EMF картинки и отрисовывать их. 51b1_20.04.2007_CRACKLAB.rU.tgz - JPEG.rar
| Сообщение посчитали полезным: |
Ранг: 7.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 20 апреля 2007 18:28 · Личное сообщение · #23
Bitfry пишет:
Например вызвать Invalidaterect (урок 4 Айсилона).
это очень противно может мигать. лучше рисовать все на невидимом контексте а потом копировать его через блиттинг на форму.
| Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 20 апреля 2007 22:24 · Личное сообщение · #24
Ke Kwan пишет:
а потом копировать его через блиттинг
сказанул.. Я ни фига не понял  Чуть подробнее можешь? Или инфу какую посоветуешь?
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 353.0 (мудрец) Активность: 0.37↘0 Статус: Участник resreveR
|
Создано: 20 апреля 2007 22:31 · Личное сообщение · #25
Icelot
BitBlt, как у меня
----- Тут не могла быть ваша реклама | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 20 апреля 2007 22:59 · Личное сообщение · #26
lord_Phoenix пишет:
BitBlt, как у меня
А  Глянул пример КеКвана. Имхо ассоциировать с контролом конечно можно, но.. не знаю.. По мне так лучше прорисовать. Хотя конечно с нынешеими мощными компами такие мелочи уже не имеют значения. Просто я изучаю асм на лету т.с.  Пишу и решаю возникшие проблемы. Хочется докопаться до всего. Вот завтра буду смотреть, как BitBlt работает (суть ясна, но не помешает).
Кстати если тема интересна не только мне вот http://www.wasm.ru/srclist.php?list=3 исходники с васма. Оч много полезного
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
Ранг: 7.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 20 апреля 2007 23:15 · Личное сообщение · #27 |
Ранг: 7.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 20 апреля 2007 23:16 · Личное сообщение · #28 |
Ранг: 7.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 20 апреля 2007 23:19 · Личное сообщение · #29
Icelot пишет:
Имхо ассоциировать с контролом конечно можно, но.. не знаю.
зачем обрабатывать WM_PAINT если за тебя это может сделать система? если тока, как вариант, отрисовывать в отдельном потоке...
| Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 21 апреля 2007 06:52 · Личное сообщение · #30
Ke Kwan не плохо, мне понравилось
----- radio uno in ibisa ... | Сообщение посчитали полезным: |