· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Как мне создать HBITMAP одно определённого(сплошно

<< . 1 . 2 .

Посл.отвђт Сообщен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-цвет. Каждый шаг цикла создает очередной шаг градиента.

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.033