|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 2, 2003 16:36:26 2 Quantum-> А ты это пробывал??? Потому что у меня это не работает!!! Попробуй сам если у тебя получится буду очень благодарен если ты мне покажишь исходный код!!! |
|
|
Дата: Сен 2, 2003 22:47:13 Songoku А ты это пробывал??? Обижаешшшшш! Вот полный код:
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
BMP_WIDTH equ 50
BMP_HEIGHT equ 50
.DATA
wc WNDCLASSEX <>
rc RECT <>
msg MSG <>
hBitMap dd 0
sName db "BMP test",0
.CODE
start:
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.lpfnWndProc,OFFSET WndProc
invoke GetModuleHandle,0
mov wc.hInstance,eax
mov wc.hbrBackground,COLOR_MENU + 1
invoke LoadIcon,0,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,0,IDC_ARROW
mov wc.hCursor,eax
mov wc.lpszClassName,OFFSET sName
invoke RegisterClassEx,OFFSET wc
invoke GetDesktopWindow
invoke GetWindowRect,eax,OFFSET rc
mov eax,rc.bottom
sub eax,100
shr eax,1
mov ecx,rc.right
sub ecx,100
shr ecx,1
invoke CreateWindowEx,0,OFFSET sName,OFFSET sName,\
WS_POPUP,ecx,eax,100,100,0,0,wc.hInstance,0
push eax
invoke ShowWindow,eax,SW_SHOWNORMAL
call UpdateWindow
.WHILE TRUE
invoke GetMessage,OFFSET msg,0,0,0
.BREAK .IF (!eax)
invoke TranslateMessage,OFFSET msg
invoke DispatchMessage,OFFSET msg
.ENDW
invoke ExitProcess,msg.wParam
WndProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
LOCAL ps:PAINTSTRUCT
LOCAL hdc:HDC
LOCAL hMemoryDC:HDC
LOCAL hOldBmp:DWORD
mov eax,uMsg
.IF eax == WM_KEYDOWN
invoke DestroyWindow,hWnd
.ELSEIF eax == WM_NCHITTEST
mov eax,HTCAPTION
ret
.ELSEIF eax == WM_DESTROY
invoke DeleteObject,hBitMap
invoke PostQuitMessage,0
.ELSEIF eax == WM_PAINT
invoke BeginPaint,hWnd,ADDR ps
mov hdc,eax
invoke CreateCompatibleDC,hdc
mov hMemoryDC,eax
invoke SelectObject,eax,hBitMap
mov hOldBmp,eax
invoke BitBlt,hdc,25,25,BMP_WIDTH,BMP_HEIGHT,\
hMemoryDC,0,0,SRCCOPY
invoke SelectObject,hMemoryDC,hOldBmp
invoke DeleteDC,hMemoryDC
invoke DrawEdge,hdc,OFFSET rc,EDGE_RAISED,BF_RECT
invoke EndPaint,hWnd,ADDR ps
.ELSEIF eax == WM_CREATE
invoke GetDC,hWnd
mov hdc,eax
invoke CreateCompatibleDC,eax
mov hMemoryDC,eax
; Здесь важно использовать hdc вместо hMemoryDC.
; Иначе получится чёрно-белый BMP.
invoke CreateCompatibleBitmap,hdc,BMP_WIDTH,BMP_HEIGHT
invoke SelectObject,hMemoryDC,eax
mov hOldBmp,eax
invoke CreateSolidBrush,4080FFh
mov rc.right,BMP_WIDTH
mov rc.bottom,BMP_HEIGHT
push eax
invoke FillRect,hMemoryDC,OFFSET rc,eax
call DeleteObject
invoke SelectObject,hMemoryDC,hOldBmp
; Вот он - наш BMP!
mov hBitMap,eax
invoke DeleteDC,hMemoryDC
invoke ReleaseDC,hWnd,hdc
mov rc.right,100
mov rc.bottom,100
.ELSE
invoke DefWindowProc,hWnd,eax,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start |
|
|
Дата: Сен 5, 2003 17:34:01 Ну так напиши алгоритм градиента. Начальный и конечный RGB-цвета разделяешь на составляющие и определяешь шаг по каждому из компонентов цвета(Red/Green/Blue). Потом в цикле прибавляешь к компоненту цвета его шаг и формируешь конечный RGB-цвет. Каждый шаг цикла создает очередной шаг градиента. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.033 |