Assembly language > Assembly discussions

Menu example

(1/1)

Vortex:
Simple menu example using the APIs CreatePopupMenu and AppendMenu.


--- Code: ---include     DlgBox.inc

.data

DlgBox      db 'DLGBOX',0
text1       db 'File',0
text2       db 'Edit',0
text3       db 'Exit',0
text4       db 'Copy',0

.data?

hMenu       dd ?
hSubMenu1   dd ?
hSubMenu2   dd ?

.code

start:

    invoke  GetModuleHandle,0
    xor     edx,edx
    invoke  DialogBoxParam,eax,ADDR DlgBox,edx,\
            ADDR DlgProc,edx
    invoke  ExitProcess,eax

DlgProc PROC hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

    .IF uMsg==WM_INITDIALOG

        invoke  CreateMenu
        mov     hMenu,eax

        invoke  CreatePopupMenu
        mov     hSubMenu1,eax
       
        invoke  AppendMenu,hMenu,MF_POPUP or MF_ENABLED,\
                hSubMenu1,ADDR text1
        invoke  AppendMenu,hSubMenu1,MF_ENABLED,\
                IDM_EXIT,ADDR text3

        invoke  CreatePopupMenu
        mov     hSubMenu2,eax

        invoke  AppendMenu,hMenu,MF_POPUP or MF_ENABLED,\
                hSubMenu2,ADDR text2
        invoke  AppendMenu,hSubMenu2,MF_ENABLED,\
                IDM_COPY,ADDR text4

        invoke  SetMenu,hWnd,hMenu


    .ELSEIF uMsg==WM_COMMAND

        mov     eax,wParam

            .IF ax==IDM_EXIT

                invoke  SendMessage,hWnd,WM_CLOSE,0,0

            .ENDIF

    .ELSEIF uMsg==WM_CLOSE
             
        invoke  DestroyMenu,hMenu
        invoke  EndDialog,hWnd,0

    .ELSE

        xor eax,eax
        ret

    .ENDIF

    mov    eax,1
    ret

DlgProc ENDP

END start
--- End code ---

Vortex:
Same example built with binary resource data and INCBIN :


--- Code: ---include DlgBox.inc

.data

DlgBox:
INCBIN DlgBox.bin

Menu:
INCBIN MenuRsrc.bin

.data?

hMenu dd ?

.code

start:

    invoke  GetModuleHandle,0
    xor     edx,edx
    invoke  DialogBoxIndirectParam,eax,\
            ADDR DlgBox,edx,ADDR DlgProc,edx
    invoke  ExitProcess,eax

DlgProc PROC hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

    .IF uMsg==WM_INITDIALOG

        invoke  LoadMenuIndirect,ADDR Menu
        invoke  SetMenu,hWnd,eax
        mov     hMenu,eax
.
.

--- End code ---

Navigation

[0] Message Index

Go to full version