Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Bitmap


Автор: gwest 23.11.2006, 16:29
Вобщем вопрос в следущем:
есть два битмапа...
надо при нажатии на одном, чтоб перерисовался вместо первого второй.
вобшем все написал... вопрос заключается тока в правильности кода реакции на сообщение wm_paint(код в приложении)

идея такая: если нажать левую клавишу мыши в определенной облости то картинка должна перерисоваться...

Все проверял, по отдельности картинки перерисовываютя... возможно ошибка либо wmlbuttondown тоесть я не посылаю сообшение перерисоваться, либо я как то не правильно работаю с отображением.

Код

wmlbuttondown:
  push offset ps
  call GetCursorPos@4
  cmp [ps.x],234
  jb ex
  cmp [ps.x],339
  ja ex
  cmp [ps.y],247
  jb ex
  cmp [ps.y],330
  ja ex
  mov Fkey,1
  ;тут вроде надо послать сообщение перерисоваться
ex:
  mov eax,0
  jmp finish

wmpaint:
  push offset pt
  push dword ptr [ebp+08h]
  call BeginPaint@8
  mov histDC,eax

  cmp Fkey,1 ;если мышь была нажата в той области то
                     ;переход на bit2
  jz bit2

  push hBitmap
  push hMemDC
  call SelectObject@8

  push SRCCOPY
  push 0
  push 0
  push hMemDC
  push 600  ;координаты картинки у нижний-правый
  push 530  ;х нижний-правый
  push 200  ;у верхний-левый
  push 200  ;х верхний-левый
  push histDC
  call BitBlt@36
  
  push hBitmap
  call DeleteObject@4
  
  jmp pexit

bit2:
  push hBitmap2
  push hMemDC
  call SelectObject@8

  push SRCCOPY
  push 0
  push 0
  push hMemDC
  push 600  ;координаты картинки у нижний-правый
  push 530  ;х нижний-правый
  push 200  ;у верхний-левый
  push 200  ;х верхний-левый
  push histDC
  call BitBlt@36

  push hBitmap2
  call DeleteObject@4

  mov Fkey,0

pexit:
  push offset pt
  push dword ptr [ebp+8h]
  call EndPaint@8
  mov eax,0
  jmp finish

Автор: Farmazon 25.11.2006, 22:53
Да, перерисоваться окошко надо заставить.

Для посылки события перерисовки окна используй функцию "InvalidateRect".

call InvalidateRect, хендл_акошка, 0, 1 

Подробнее на msdn.microsoft.com

Автор: gwest 26.11.2006, 16:05
2 Farmazon

сенк... а то я не правильно передавал параметры этой функции

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)