Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2011, 21:10   #1
lestor
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 10
Вопрос отрисовать BMP чрез bitblt на hdc

код
PUSH 0
PUSH 0
PUSH 0
PUSH 0 ;IMAGE_BITMAP
PUSH 10
PUSH hinst
CALL LoadImageA@24
MOV volume,EAX ; загружаю BMP через файл ресурсов в переменную
invoke GetDC,hwndbtn9
mov hdc,eax ;получил hdc окна на котором надо отрисовать (класс static)

invoke CreateCompatibleDC,0
mov SpecDC,eax ; создал hdc в памяти

invoke CreateCompatibleBitmap,specdc,60,60 ; создал объект bitmap

invoke SelectObject, SpecDC, eax
mov OldBmp,eax ; выбрал объект bitmap и разместил на hdc в памяти

invoke BitBlt, hdc, 0, 0, 60, 60, oldbmp, 0, 0, SRCCOPY ; откопировал из hdc памяти на hdc окна(класс static)

invoke ReleaseDC,hwndbtn9, hdc ; освободил hdc

Вопрос где втыкать переменную Volume с моим BMP ? и вообще правильно ли я делаю ?
lestor вне форума Ответить с цитированием
Старый 03.02.2011, 06:13   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

lestor
Iczelion, Win32 API. Урок 25. Простой битмэп
Mikl___ вне форума Ответить с цитированием
Старый 03.02.2011, 10:24   #3
lestor
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 10
По умолчанию

прочитал, теперь код такой.
invoke LoadBitmap,hinst,10
mov volume,eax

invoke GetDC,hwndbtn9
mov hdc,eax

invoke CreateCompatibleDC,0
mov SpecDC,eax

invoke SelectObject, specDC, volume
mov OldBmp,eax
invoke GetClientRect,HWNDBTN9,addr RCT

invoke BitBlt, hdc, 0, 0, rct.r, rct.b, oldbmp, 0, 0, SRCCOPY

invoke ReleaseDC,hwndbtn9, hdc
и не чё не работает )
lestor вне форума Ответить с цитированием
Старый 03.02.2011, 10:52   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

lestor
А под OllyDbg посмотреть не судьба?
Прикрепи EXE и исходный текст целиком, посмотрю, что у тебя за баг
Mikl___ вне форума Ответить с цитированием
Старый 03.02.2011, 11:02   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
invoke LoadBitmap,hinst,10
mov volume,eax

invoke GetDC,hwndbtn9
mov hdc,eax

invoke CreateCompatibleDC,0 
mov SpecDC,eax 

invoke SelectObject, specDC, volume
;mov OldBmp,eax  не нужно
invoke GetClientRect,HWNDBTN9,addr RCT

invoke BitBlt, hdc, 0, 0, rct.r, rct.b, SpecDC, 0, 0, SRCCOPY
invoke DeleteDC,SpecDC
invoke ReleaseDC,hwndbtn9, hdc
видимо плохо читали.
красное это должен был быть контекст с которого копируем.
а OldBMP вам вообще не нужна
и так же забыли удалять свой временный контекст.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.02.2011, 11:11   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
invoke LoadBitmap,hinst,10
Насколько я помню, там где LoadBitmap, там где-то рядом один из HGDIOBJ, который тоже нуждается в очищении (DeleteObject).
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.02.2011, 11:39   #7
lestor
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 10
По умолчанию

Пепел феникса да я увидел уже это и сиправил всё равно не работает.
мне ссылку дали на урок 25 там есть пример в RAR.
в общем он заработал но там через beginpaint.
может просто отрисовать на моём окне не получается ?
пробовал на 2 окнах
STYLBTN3 equ WS_CHILD+WS_VISIBLE+SS_CENTERIMAGE+ SS_BITMAP+SS_REALSIZEIMAGE
STYLBTN equ WS_CHILD+BS_DEFPUSHBUTTON+WS_VISIBL E

Последний раз редактировалось lestor; 03.02.2011 в 11:53.
lestor вне форума Ответить с цитированием
Старый 03.02.2011, 12:17   #8
lestor
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 10
По умолчанию

в общем была мелочь, моя невнимательность событие wm_paint не отрабатывалось.
теперь если свернуть окно а затем развернуть то пропадают все кнопки кроме этой картинки )

Последний раз редактировалось lestor; 03.02.2011 в 13:00.
lestor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка BMP в Simple Graph и сохранение в BMP формат artemavd Общие вопросы Delphi 10 02.10.2010 14:19
Передача больших файлов чрез сокет D_E_N Работа с сетью в Delphi 0 18.01.2010 19:17
BitBlt ZotaC Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 16.01.2010 19:04
Нужно отрисовать текст с левой стороны(LeftMargin) и сделать его вертикальным - Компонент RxLib Михаил Юрьевич Общие вопросы Delphi 1 08.08.2009 22:16
как отрисовать tab-ы в pagecontrol? blackstersl Общие вопросы Delphi 5 09.07.2009 17:57