Уроки Iczelion'а


         

Это можно сделать либо вызовом


  • Первый метод:

  • .386 .model flat, stdcall ................ .const
    IDB_MYBITMAp equ 100 ............... .data? hInstance dd ?
    .............. .code ............. invoke GetModuleHandle,NULL
    mov hInstance,eax ............ invoke LoadBitmap,hInstance,IDB_MYBITMAp ...........
  • Второй метод:

  • .386 .model flat, stdcall ................
    .data BitmapName db "MyBitMap",0 ............... .data?
    hInstance dd ? .............. .code .............
    invoke GetModuleHandle,NULL mov hInstance,eax ............ invoke LoadBitmap,hInstance,addr BitmapName
    ...........
  • Получите хэндл device context'a (DC). Это можно сделать либо вызовом функции Beginpaint в ответ на сообщение WM_pAINT, либо вызовом GetDC в любое время.

  • Создайте device context в памяти (memory DC) с теми же аттрибутами, что и device context, полученный на предыдущем шаге. Идея в том, чтобы создать некоторую "невидимую" поверхность, на которой мы можем отрисовать битмэп. После этого мы просто копируем содержимое невидимой поверхности в текущий device context с помощью вызова одной-единственной функции. Этот приём называется двойной буферизацией (double buffering) и используется для быстрого вывода изображений на экран. Создать "невидимую" поверхность можно вызовом CreateCompatibleDC:
    CreateCompatibleDC proto hdc:HDC
    При успешном завершении функция возвращает через регистр eax хэндл device context'a в памяти. hdc - это хэндл device context'a, с которым должен быть совместим DC в памяти.
  • После создания невидимой поверхности вы можете отобразить на ней битмэп с помощью вызова SelectObject, передав ей в качестве первого параметра хэндл DC в памяти, а в качестве второго - хэндл битмэпа. Прототип этой функции следующий:

  • SelectObject proto hdc:HDC, hGdiObject:DWORD
  • Теперь битмэп отображен на device context'e в памяти. Единственное, что осталось сделать - это скопировать его на на устройство вывода, то есть на настоящий device context. Этого можно добиться с помощью таких функций, как BitBlt и StretchBlt. BitBlt просто копирует содержимое одного DC в другой, поэтому она работает быстро; StretchBlt может сжимать или растягивать изображение по размерам того DC, куда копирует. Для простоты здесь мы будем использовать&nbsр; BitBlt, имеющую следующий прототип:


  • Содержание  Назад  Вперед





    Forekc.ru
    Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий