Привет люди =) Короче ASM под Win32 изучаю недавно и пишу на FASM. Хотел написать простенький трейнер для игрушки всё вроде ничего, но вот хотел добавить в своей программке картинки на кнопочки вобшем сделать её красивее. Скачал исходники готовых трейнеров вроде разобрался, а не работает =( Народ помогите разобраться в чём же дело =( И ещё вопрос можно ли как-то упростить этот код+картинки =\
Вот код:
| Код | format PE GUI 4.0 entry start include 'win32a.inc' include 'macro\if.inc' ;------------------------ ID_MAINDIALOG = 100 ID_INFO = 201 ID_MONEY = 202 ID_EXIT = 203 ID_QUIT = 204 ;------------------------ section '.data' data readable writeable hInstance dd 0 ; HWND основного окна mess1 db 'Hello Money',0 mess2 db 'Hello Info',0 hButtons = himages+8*4 himages rd 4*13 himage dd 0 handler dd 0 ;HWND кнопки section '.code' code readable writeable proc start invoke GetModuleHandle,0 mov [hInstance],eax invoke DialogBoxParam,eax,ID_MAINDIALOG,HWND_DESKTOP,DialogProc,0 invoke ExitProcess,0 endp ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ proc wminitproc,dlghwnd invoke LoadIcon,[hInstance],1 invoke SendMessage,[dlghwnd],WM_SETICON,1,eax
mov eax,himages mov [himage],eax
mov esi,1 mov edi,himages @@:
invoke LoadBitmap,[hInstance],esi
mov [edi],eax add esi,1 cmp esi,12 je @F add edi,4 jmp @B @@: stdcall knopky,[dlghwnd] ret endp ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ proc DialogProc,hWnd,Msg,wParam,lParam push ebx esi edi .if [Msg]=WM_COMMAND .if [wParam]=ID_MONEY call MoneyProc .endif ;-------------------- .if [wParam]=ID_INFO call InfoProc .endif ;-------------------- .if [wParam]=ID_QUIT call QuitProc .endif ;-------------------- .elseif [Msg]=WM_INITDIALOG stdcall wminitproc,[hWnd] ;-------------------- .elseif [Msg]=WM_CLOSE invoke EndDialog,[hWnd],0 .else mov eax,FALSE ret .endif ;-------------------- mov eax,TRUE ret pop edi esi ebx ret endp ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ proc knopky, hdlg push esi edi ebx xor edi,edi mov ebx,hButtons mov esi,ID_QUIT @@: invoke GetDlgItem,[hdlg],esi mov [handler],eax invoke SendMessage,eax,\ BM_SETIMAGE,IMAGE_BITMAP,[ebx] ; invoke ShowWindow,[handler],SW_HIDE _ret: pop ebx edi esi ret endp ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;-----------------------money-------------------- proc MoneyProc invoke MessageBox,0,mess1,mess1,0 ret endp ;---------------------INFO----------------------- proc InfoProc invoke MessageBox,0,mess2,mess2,0 ret endp ;------------------------------------------------ proc QuitProc pop edi esi ebx invoke ExitProcess,0 endp ;------------------------------------------------ section '.idata' import readable writeable
library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ gdi32,'GDI32.DLL' include 'api\kernel32.inc' include 'api\user32.inc' include 'api\gdi32.inc'
section '.rsrc' resource data readable
directory RT_DIALOG,_dialogs,RT_BITMAP,bitmaps
resource _dialogs,\ ID_MAINDIALOG,LANG_ENGLISH+SUBLANG_ENGLISH_US,_main_dlg
dialog _main_dlg, 'Triners +1',70,70,100,85,WS_POPUP;+DS_MODALFRAME dialogitem 'BUTTON','&Money',ID_MONEY,2,70,45,15,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON+BS_FLAT+BS_BITMAP dialogitem 'BUTTON','&Info',ID_INFO,1,16,35,10,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON+BS_FLAT+BS_BITMAP dialogitem 'BUTTON','&Quit',ID_QUIT,1,30,35,10,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON+BS_FLAT+BS_BITMAP enddialog
resource bitmaps,1,LANG_NEUTRAL,bitmap1,\ 2,LANG_NEUTRAL,bitmap2,\ 3,LANG_NEUTRAL,bitmap3
bitmap bitmap1,'run256.bmp' bitmap bitmap2,'info256.bmp' bitmap bitmap3,'exit256.bmp'
|
|