Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Проблема добавления BITMAP'ов на BUTTON


Автор: drZmeu 27.5.2007, 18:13
Привет люди =)
Короче 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'

Автор: drZmeu 27.5.2007, 18:33
Народ ну помогите же =)
Весь день парюсь =(((

Автор: drZmeu 28.5.2007, 09:18
Есть мнение что у мну чёт неправильно в LoadBitmap или в последуюших параметрах =\

Автор: drZmeu 28.5.2007, 14:24
Ура разобрался.
Упростил чутка код + подправил, что нужно и получилось в полнее прилично.
Правда в MsPaint не очень рисую =)
Вобшем кому интересно скачивайте всего 4 кб.
----------------------------------------------------------------------------------------------------------
FASM v1.67.14 - v1.67.21

P.S: Готов выслушать не очень жёсткую критику и предложения!  smile 

Автор: cdman 19.12.2010, 00:15
drZmeu, выложи пожалуйста свой пример с кнопкой, не качается она по ссылке. Или кинь мне по скайпу cdman__x. Я тоже много на Асме пишу, пообщаемся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)