flat assembler
Message board for the users of flat assembler.
![]() |
Author |
|
comrade 02 Nov 2004, 02:05
TrackPopupMenu
|
|||
![]() |
|
vbVeryBeginner 02 Nov 2004, 04:57
try this
![]() Code: format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' section '.data' data readable writeable wndH dd ? insH dd ? wndClsName db 'GENERIC',0 wndTitle db 'Popup Menu Demo',0 wndCls WNDCLASS wndMsg MSG menuH dd ? point POINT dcH dd ? rect RECT section '.code' code readable executable start: invoke GetModuleHandle,0 mov [insH],eax mov [wndCls.hInstance],eax mov [wndCls.style],CS_HREDRAW or CS_VREDRAW mov [wndCls.lpfnWndProc],window_procedure mov [wndCls.lpszClassName],wndClsName mov [wndCls.hbrBackground],COLOR_APPWORKSPACE+1 invoke LoadIcon,NULL,IDI_APPLICATION mov [wndCls.hIcon],eax invoke LoadCursor,NULL,IDC_ARROW mov [wndCls.hCursor],eax invoke RegisterClass,wndCls invoke CreateWindowEx,WS_EX_CLIENTEDGE,\ wndClsName,wndTitle,\ WS_OVERLAPPEDWINDOW + WS_VISIBLE - WS_MINIMIZEBOX - WS_MAXIMIZEBOX,\ CW_USEDEFAULT,CW_USEDEFAULT,400,240,\ NULL,NULL,[insH],NULL mov [wndH],eax invoke LoadMenu,[insH],30 invoke GetSubMenu,eax,0 mov [menuH],eax mov [rect.left],0 mov [rect.top],0 ;+---------------------------+ ;| entering the message loop | ;+---------------------------+ window_message_loop_start: invoke GetMessage,wndMsg,NULL,0,0 or eax,eax je window_message_loop_end invoke TranslateMessage,wndMsg invoke DispatchMessage,wndMsg jmp window_message_loop_start window_message_loop_end: invoke DestroyMenu,[menuH] invoke ExitProcess,0 ;+----------------------+ ;| the window procedure | ;+----------------------+ proc window_procedure,hWnd,uMsg,wParam,lParam push ebx esi edi cmp [uMsg],WM_RBUTTONDOWN je wmRBUTTONDOWN cmp [uMsg],WM_SIZE je wmSIZE cmp [uMsg],WM_COMMAND je wmCOMMAND cmp [uMsg],WM_DESTROY je wmDESTROY wmDEFAULT: invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam] jmp wmBYE wmSIZE: mov edx,[lParam] mov ecx,edx shr ecx,16 ;height - high order and edx,0xFFFF ;width - low order mov [rect.right],edx mov [rect.bottom],ecx jmp wmBYE wmRBUTTONDOWN: invoke GetCursorPos,point invoke TrackPopupMenu,[menuH],TPM_RIGHTBUTTON,\ [point.x],[point.y],0,[hWnd],NULL jmp wmBYE wmCOMMAND: invoke GetDC,[hWnd] cmp [wParam],0xFFFF and 300 je wmCOMMAND_300 cmp [wParam],0xFFFF and 301 je wmCOMMAND_301 cmp [wParam],0xFFFF and 302 je wmCOMMAND_302 jmp wmBYE wmCOMMAND_300: invoke FillRect,eax,rect,COLOR_ACTIVECAPTION+1 invoke ReleaseDC,[hWnd],[dcH] jmp wmBYE wmCOMMAND_301: invoke FillRect,eax,rect,COLOR_INACTIVECAPTION+1 invoke ReleaseDC,[hWnd],[dcH] jmp wmBYE wmCOMMAND_302: invoke FillRect,eax,rect,COLOR_CAPTIONTEXT+1 invoke ReleaseDC,[hWnd],[dcH] jmp wmBYE wmDESTROY: invoke PostQuitMessage,0 wmBYE: pop edi esi ebx return endp section '.idata' import data readable library KERNEL32, 'KERNEL32.DLL',\ USER32, 'USER32.DLL' import KERNEL32,\ GetModuleHandle, 'GetModuleHandleA',\ ExitProcess, 'ExitProcess' import USER32,\ RegisterClass, 'RegisterClassA',\ CreateWindowEx, 'CreateWindowExA',\ DefWindowProc, 'DefWindowProcA',\ LoadCursor, 'LoadCursorA',\ LoadIcon, 'LoadIconA',\ LoadMenu, 'LoadMenuA',\ GetSubMenu, 'GetSubMenu',\ GetCursorPos, 'GetCursorPos',\ TrackPopupMenu, 'TrackPopupMenu',\ FillRect, 'FillRect',\ GetDC, 'GetDC',\ ReleaseDC, 'ReleaseDC',\ DestroyMenu, 'DestroyMenu',\ MoveWindow, 'MoveWindow',\ SendMessage, 'SendMessageA',\ GetMessage, 'GetMessageA',\ MessageBox, 'MessageBoxA',\ DestroyWindow, 'DestroyWindow',\ TranslateMessage, 'TranslateMessage',\ DispatchMessage, 'DispatchMessageA',\ PostQuitMessage, 'PostQuitMessage' section '.rsrc' resource data readable directory RT_MENU,appMenu resource appMenu,\ 30,LANG_NEUTRAL,menu1 menu menu1 menuitem '',0,MFR_POPUP+MFR_END menuitem 'Active Caption Color',300,0 menuitem 'Inactive Caption Color',301,0 menuitem 'Caption Text Color',302,MFR_END ![]() sincerely, sulaiman chang |
|||
![]() |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2023, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.