Witam.
Od paru dni przeglądam wiele stron związanych z wyświetleniem bmp w okienku.
Najważniejsze to ze moj kompilator to FASM.
Mam gotowy program:
http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/0026.php
i staram się go tak przerobić żeby fasm mi to skompilował.
wszystko ok.okienko się wyświetla tylko bez rysunku.
Oto mój kod i będę bardzo wdzięczny jeżeli ktoś poświeci trochę czasu żeby mi pomoc:
format PE GUI 4.0
entry start
include 'win32ax.inc'
section '.text' data readable executable
start:
invoke GetModuleHandle,0
mov [wc.hInstance],eax
mov [wc.hbrBackground],NULL
invoke RegisterClass,wc
test eax,eax
jz error
invoke CreateWindowEx,0,text,0,\
+WS_VISIBLE+WS_SYSMENU,1,1,230,280,\
NULL,NULL,[wc.hInstance],NULL
mov [hwnd],eax
test eax,eax
jz error
msg_loop:
invoke GetMessage,msg,NULL,0,0
cmp eax,1
jb end_loop
jne msg_loop
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
error:
invoke MessageBox,NULL,blad,NULL,NULL,MB_OK
end_loop:
invoke ExitProcess,[msg.wParam]
proc WindowProc uses ebx esi edi, hwnd,wmsg,wparam,lparam
cmp [wmsg],WM_CREATE
je _create
cmp[wmsg],WM_PAINT
je _paint
cmp [wmsg],WM_DESTROY
je _zniszcz
_defwndproc:
invoke DefWindowProc, [hwnd], [wmsg], [wparam], [lparam]
jmp _finish
_create:
invoke LoadBitmap, [wc.hInstance], IDB_MAIN
mov [hBitmap], eax
jmp _defwndproc
_paint:
invoke BeginPaint, [hwnd],ps
mov [hdc], eax
invoke CreateCompatibleDC, hdc
mov [hMemDC], eax
invoke SelectObject, hMemDC, hBitmap
invoke GetClientRect, [hwnd],rect
invoke BitBlt, hdc, 0, 0, rect.right, rect.bottom,\
hMemDC, 0, 0, SRCCOPY
invoke DeleteDC, hMemDC
invoke EndPaint,[hwnd],ps
jmp _defwndproc
_zniszcz:
invoke DeleteObject, hBitmap
invoke PostQuitMessage, NULL
_finish:
ret
endp
section '.data' data readable writeable
hwnd dd ?
hBitmap dd 0
hdc dd 0
hMemDC dd 0
ps PAINTSTRUCT
rect RECT
text TCHAR 'Win32 Asembler K.G.',0
blad TCHAR 'Wystapil blad',0
wc WNDCLASS 0,WindowProc,0,0,0,0,0,1,NULL,text
msg MSG
IDB_MAIN db 'tweety78.bmp'
section '.idata' import data readable writeable
library ddraw,'DDRAW.DLL',kernel32,'KERNEL32.DLL',user32,'USER32.DLL',gdi32,'gdi32.dll',shell32.dll,'shell32.dll'
include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\gdi32.inc'
Od paru dni przeglądam wiele stron związanych z wyświetleniem bmp w okienku.
Najważniejsze to ze moj kompilator to FASM.
Mam gotowy program:
http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/0026.php
i staram się go tak przerobić żeby fasm mi to skompilował.
wszystko ok.okienko się wyświetla tylko bez rysunku.
Oto mój kod i będę bardzo wdzięczny jeżeli ktoś poświeci trochę czasu żeby mi pomoc:
format PE GUI 4.0
entry start
include 'win32ax.inc'
section '.text' data readable executable
start:
invoke GetModuleHandle,0
mov [wc.hInstance],eax
mov [wc.hbrBackground],NULL
invoke RegisterClass,wc
test eax,eax
jz error
invoke CreateWindowEx,0,text,0,\
+WS_VISIBLE+WS_SYSMENU,1,1,230,280,\
NULL,NULL,[wc.hInstance],NULL
mov [hwnd],eax
test eax,eax
jz error
msg_loop:
invoke GetMessage,msg,NULL,0,0
cmp eax,1
jb end_loop
jne msg_loop
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
error:
invoke MessageBox,NULL,blad,NULL,NULL,MB_OK
end_loop:
invoke ExitProcess,[msg.wParam]
proc WindowProc uses ebx esi edi, hwnd,wmsg,wparam,lparam
cmp [wmsg],WM_CREATE
je _create
cmp[wmsg],WM_PAINT
je _paint
cmp [wmsg],WM_DESTROY
je _zniszcz
_defwndproc:
invoke DefWindowProc, [hwnd], [wmsg], [wparam], [lparam]
jmp _finish
_create:
invoke LoadBitmap, [wc.hInstance], IDB_MAIN
mov [hBitmap], eax
jmp _defwndproc
_paint:
invoke BeginPaint, [hwnd],ps
mov [hdc], eax
invoke CreateCompatibleDC, hdc
mov [hMemDC], eax
invoke SelectObject, hMemDC, hBitmap
invoke GetClientRect, [hwnd],rect
invoke BitBlt, hdc, 0, 0, rect.right, rect.bottom,\
hMemDC, 0, 0, SRCCOPY
invoke DeleteDC, hMemDC
invoke EndPaint,[hwnd],ps
jmp _defwndproc
_zniszcz:
invoke DeleteObject, hBitmap
invoke PostQuitMessage, NULL
_finish:
ret
endp
section '.data' data readable writeable
hwnd dd ?
hBitmap dd 0
hdc dd 0
hMemDC dd 0
ps PAINTSTRUCT
rect RECT
text TCHAR 'Win32 Asembler K.G.',0
blad TCHAR 'Wystapil blad',0
wc WNDCLASS 0,WindowProc,0,0,0,0,0,1,NULL,text
msg MSG
IDB_MAIN db 'tweety78.bmp'
section '.idata' import data readable writeable
library ddraw,'DDRAW.DLL',kernel32,'KERNEL32.DLL',user32,'USER32.DLL',gdi32,'gdi32.dll',shell32.dll,'shell32.dll'
include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\gdi32.inc'