D
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
WndProc PROTO :DWORD, :DWORD, :DWORD, :DWORD
RegisterWinClass PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
.const
IDM_Ende equ 1010
.data
szCaption db "Fenster 1.0",0
szClassName db "My_Class",0
Text db "Info-Menü",0
Caption db "Menü-Demo",0
.data?
hInstance dd ?
hIcon dd ?
hCursor dd ?
hWnd dd ?
.code
start:
call Init
call Main
invoke ExitProcess, eax
;##################################################
Init proc
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke LoadIcon, NULL, IDI_EXCLAMATION
mov hIcon, eax
invoke LoadCursor, NULL, IDC_CROSS
mov hCursor, eax
ret
Init endp
;##################################################
Main proc
LOCAL Wwd:DWORD, Wht:DWORD, Wtx:DWORD, Wty:DWORD
mov Wtx, 0
mov Wty, 0
mov Wwd, 400
mov Wht, 400
invoke RegisterWinClass, ADDR WndProc, ADDR szClassName, hIcon, hCursor, COLOR_BTNFACE+1
invoke CreateWindowEx, WS_EX_LEFT, ADDR szClassName, ADDR szCaption, WS_OVERLAPPEDWINDOW, Wtx, Wty, Wwd, Wht, NULL, NULL, hInstance, NULL
mov hWnd, eax
invoke LoadMenu, hInstance, 100
invoke SetMenu, hWnd, eax
invoke ShowWindow, hWnd, SW_SHOWNORMAL
invoke UpdateWindow, hWnd
call MsgLoop
ret
Main endp
;##################################################
m2m macro M1, M2
push M2
pop M1
endm
;##################################################
RegisterWinClass proc lpWndProc:DWORD, lpClassName:DWORD, Icon:DWORD, Cursor:DWORD, bColor:DWORD
LOCAL wc:WNDCLASSEX
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_BYTEALIGNCLIENT or CS_BYTEALIGNWINDOW
m2m wc.lpfnWndProc, lpWndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInstance
m2m wc.hbrBackground, bColor
mov wc.lpszMenuName, NULL
m2m wc.lpszClassName, lpClassName
m2m wc.hIcon, Icon
m2m wc.hCursor, Cursor
m2m wc.hIconSm, Icon
invoke RegisterClassEx, ADDR wc
ret
RegisterWinClass endp
;##################################################
MsgLoop proc
LOCAL msg:MSG
StartLoop:
invoke GetMessage, ADDR msg, NULL, 0, 0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
mov eax, msg.wParam
ret
MsgLoop endp
;##################################################
WndProc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
.if uMsg == WM_DESTROY
invoke PostQuitMessage, NULL
mov eax, 0
ret
.elseif uMsg == WM_COMMAND
.if wParam == IDM_Ende
invoke ExitProcess, 0
.endif
.if wParam == 1020
invoke MessageBox, 0, addr Text, addr Caption, MB_OK
.endif
.endif
invoke DefWindowProc, hWin, uMsg, wParam, lParam
ret
WndProc endp
end start
Bitte sehr