Masm32 рисование через Bitmap - Assembler

Узнай цену своей работы

Формулировка задачи:

В тематической ветке с прошлого года никакого движения, попробую здесь. День добрый, пытаюсь вне WM_PAINT через Bitmap красный Rectangle нарисовать, а выходит один Малевич, макрос RGB работает нормально, т.к. напрямую в hDC нормально рисует , полдня уж голову ломаю что не так. Заранее спасибо.
Picture proc
LOCAL hBmp:HBITMAP
LOCAL hOld:HBITMAP
LOCAL hDCBmp:HDC
LOCAL memDC:HDC 
LOCAL bRed: HBRUSH 
 
    invoke GetDC, hWnd 
    mov hDC, eax
    invoke CreateCompatibleBitmap, hDC, 100, 100
    mov hBmp, eax
    invoke GetDC,hBmp 
    mov hDCBmp, eax
 
    RGB 255,0,0
    invoke CreateSolidBrush, eax
    mov bRed, eax
    invoke SelectObject, hDCBmp, bRed
    invoke Rectangle, hDCBmp, 0, 0, 100, 100
    invoke DeleteObject, bRed
    
    invoke CreateCompatibleDC, hDC
    mov memDC, eax
    invoke SelectObject, memDC, hBmp
    mov hOld, eax 
    invoke BitBlt, hDC, 0, 0, 100, 100, memDC, 0, 0, SRCCOPY
    invoke SelectObject,hDC, hOld
    invoke ReleaseDC, hWnd, hDC
    invoke DeleteObject, hBmp                       
    invoke DeleteDC, hDCBmp
    invoke DeleteDC, memDC
    ret
Picture endp

Решение задачи: «Masm32 рисование через Bitmap»

textual
Листинг программы
    
    RGB 255,0,0
    invoke CreateSolidBrush, eax
    mov bRed, eax
    
    invoke CreateCompatibleDC, hDC
    mov memDC, eax
    invoke SelectObject, memDC, hBmp
    mov hOld, eax 
    
    invoke SelectObject, memDC, bRed
    invoke Rectangle,memDC, 0, 0, 100, 100
    invoke DeleteObject, bRed

Объяснение кода листинга программы

В данном коде происходит рисование прямоугольника через Bitmap, используя совместимый DC (Device Context).

  1. Сначала переменной RGB присваивается значение 255,0,0 (красный цвет).
  2. Затем происходит создание кисти (brush) с помощью функции CreateSolidBrush, и её дескриптор сохраняется в переменную bRed.
  3. После этого создается совместимый DC с помощью функции CreateCompatibleDC, и его дескриптор сохраняется в переменную memDC.
  4. Далее происходит выбор объекта (Bitmap) в DC с помощью функции SelectObject, и его дескриптор сохраняется в переменную hOld.
  5. Затем происходит выбор кисти (bRed) в DC с помощью функции SelectObject.
  6. Последним действием происходит рисование прямоугольника с помощью функции Rectangle, где первый аргумент — DC, а остальные четыре аргумента — координаты прямоугольника (0,0,100,100).
  7. В конце код удаляет объект (brush) bRed с помощью функции DeleteObject.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы