Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Наристовать линию... Графика!

367
23 декабря 2007 года
Meatcoins
303 / / 18.01.2006
Создаю кисть, а линия почему-то всёравно чёрная и такие параметры, как PS_DASH или PS_DOT, а также толщина не влияют!

Код:
.data
gl_hdc dd ?
gl_memdc dd ?
hPen dd ?
hBrush dd ?
.code


WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.if uMsg==WM_CREATE
;размеры экрана
invoke GetSystemMetrics,0h
MOV xm,EAX
invoke GetSystemMetrics,0h
MOV ym,EAX
;открыть контекст окна
    invoke GetDC,hWnd
    MOV gl_hdc,EAX
;создать совместимый с данным окном контекст
    invoke CreateCompatibleDC,eax
    MOV gl_memdc,EAX
;создать в памяти растровое изображение, совместимое с hdc

    invoke CreateCompatibleBitmap,gl_hdc,xm,ym
;выбрать растровое изображение в данном контексте

    invoke SelectObject,gl_memdc,eax

    invoke CreateSolidBrush,RGBW
;выбрать кисть в данном контексте

    invoke SelectObject,gl_memdc,eax
;заполнить данную прямоугольную область

    invoke PatBlt,gl_memdc,0h,0h,xm,ym,0F00021h
;создать кисть и перо для рисования
;цвет кисти
    invoke  CreateSolidBrush,RGBR
    MOV  hBrush,EAX
    invoke CreatePen,PS_DOT,2h,RGBR
    MOV hPen,EAX
;удалить контекст

    invoke ReleaseDC,hWnd,gl_hdc
    MOV EAX, 0
.endif



.if uMsg==WM_LBUTTONDOWN
    invoke MoveToEx,gl_memdc,30,100,0h
;линия пером
    invoke LineTo,gl_memdc,550,300

;дать команду перерисовать окно

    invoke InvalidateRect,hWnd,0h,0h
FIN:
    MOV EAX, 0

.endif






.if uMsg==WM_PAINT

invoke BeginPaint,hWnd,offset pnt
MOV gl_hdc,EAX ;сохранить контекст (дескриптор)
;скопировать виртуальное окно на реальное

invoke BitBlt,gl_hdc,0h,0h,xm,ym,gl_memdc,0h,0h,0CC0020h
;---------------- закрыть контекст окна

invoke EndPaint,hWnd,offset pnt
MOV EAX, 0

.endif







.if uMsg==WM_DESTROY
;удалить перо
invoke  DeleteDC,hPen
;удалить кисть
invoke  DeleteDC,hBrush
;удалить виртуальное окно
invoke  DeleteDC,gl_memdc

        invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor   eax, eax
ret
WndProc endp

end start
367
23 декабря 2007 года
Meatcoins
303 / / 18.01.2006
 
Код:
invoke CreatePen,PS_SOLID,4h,RGBR
    MOV hPen,EAX
...
...
invoke MoveToEx,gl_memdc,30,100,0h
;линия пером
invoke SelectObject,gl_memdc,hPen
invoke LineTo,gl_memdc,550,300
367
23 декабря 2007 года
Meatcoins
303 / / 18.01.2006
Почему окно становится синим из-за этого???
Код:
.if uMsg==WM_PAINT

invoke BeginPaint,hWnd,offset pnt
MOV gl_hdc,EAX ;сохранить контекст (дескриптор)

;скопировать виртуальное окно на реальное
invoke BitBlt,gl_hdc,0h,0h,xm,ym,gl_memdc,0h,0h,SRCCOPY


invoke EndPaint,hWnd,offset pnt
MOV EAX, 0

.endif
367
23 декабря 2007 года
Meatcoins
303 / / 18.01.2006
Код:
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.if uMsg==WM_CREATE
;размеры экрана
invoke GetSystemMetrics,0h
MOV xm,EAX
invoke GetSystemMetrics,0h
MOV ym,EAX
;открыть контекст окна
    invoke GetDC,hWnd
    MOV gl_hdc,EAX
;создать совместимый с данным окном контекст
    invoke CreateCompatibleDC,eax
    MOV gl_memdc,EAX
;создать в памяти растровое изображение, совместимое с hdc

    invoke CreateCompatibleBitmap,gl_hdc,xm,ym
;выбрать растровое изображение в данном контексте

    invoke SelectObject,gl_memdc,eax
    invoke CreateSolidBrush,BACK_COLOR
;выбрать кисть в данном контексте
    invoke SelectObject,gl_memdc,eax
;заполнить данную прямоугольную область
    invoke PatBlt,gl_memdc,0h,0h,xm,ym,0F00021h
;создать кисть и перо для рисования
;цвет кисти
    invoke  CreateSolidBrush,RGBR
    MOV  hBrush,EAX
    invoke CreatePen,PS_SOLID,4h,RGBR
    MOV hPen,EAX
;удалить контекст

    invoke ReleaseDC,hWnd,gl_hdc
    MOV EAX, 0

mov yp,100
.endif



.if uMsg==WM_LBUTTONDOWN




invoke MoveToEx,gl_memdc,30,100,0h
;линия пером
invoke SelectObject,gl_memdc,hPen
invoke LineTo,gl_memdc,550,300


comment @
.if xp>=400
mov xp,0h
add yp,1h
.endif

mov ecx,200
LL:
push ecx
invoke SetPixel,gl_memdc,xp,yp,000000FFh
inc xp
pop ecx
loop LL
@

;дать команду перерисовать окно

    invoke InvalidateRect,hWnd,0h,0h
FIN:
    MOV EAX, 0

.endif






.if uMsg==WM_PAINT

invoke BeginPaint,hWnd,offset pnt
MOV gl_hdc,EAX ;сохранить контекст (дескриптор)

;скопировать виртуальное окно на реальное
invoke BitBlt,gl_hdc,0h,0h,xm,ym,gl_memdc,0h,0h,SRCCOPY

invoke EndPaint,hWnd,offset pnt
MOV EAX, 0

.endif






.if uMsg==WM_DESTROY
;удалить перо
invoke  DeleteDC,hPen
;удалить кисть
invoke  DeleteDC,hBrush
;удалить виртуальное окно
invoke  DeleteDC,gl_memdc

        invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor   eax, eax
ret
WndProc endp

end start
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог