home *** CD-ROM | disk | FTP | other *** search
- ; #########################################################################
-
- .386
- .model flat, stdcall ; 32 bit memory model
- option casemap :none ; case sensitive
-
- include bmbutton.inc ; local includes for this file
-
- ; #########################################################################
-
- .code
-
- start:
- invoke GetModuleHandle, NULL
- mov hInstance, eax
-
- invoke GetCommandLine
- mov CommandLine, eax
-
- invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
- invoke ExitProcess,eax
-
- ; #########################################################################
-
- WinMain proc hInst :DWORD,
- hPrevInst :DWORD,
- CmdLine :DWORD,
- CmdShow :DWORD
-
- ;====================
- ; Put LOCALs on stack
- ;====================
-
- LOCAL wc :WNDCLASSEX
- LOCAL msg :MSG
- LOCAL Wwd :DWORD
- LOCAL Wht :DWORD
- LOCAL Wtx :DWORD
- LOCAL Wty :DWORD
-
- ;==================================================
- ; Fill WNDCLASSEX structure with required variables
- ;==================================================
-
- invoke LoadIcon,hInst,1 ; icon ID
- mov hIcon, eax
-
- szText szClassName,"bmbtn_Class"
-
- mov wc.cbSize, sizeof WNDCLASSEX
- mov wc.style, CS_HREDRAW or CS_VREDRAW \
- or CS_BYTEALIGNWINDOW
- mov wc.lpfnWndProc, offset WndProc
- mov wc.cbClsExtra, NULL
- mov wc.cbWndExtra, NULL
- m2m wc.hInstance, hInst
- mov wc.hbrBackground, COLOR_BTNFACE+1
- mov wc.lpszMenuName, NULL
- mov wc.lpszClassName, offset szClassName
- m2m wc.hIcon, hIcon
- invoke LoadCursor,NULL,IDC_ARROW
- mov wc.hCursor, eax
- m2m wc.hIconSm, hIcon
-
- invoke RegisterClassEx, ADDR wc
-
- ;================================
- ; Centre window at following size
- ;================================
-
- mov Wwd, 250
- mov Wht, 150
-
- invoke GetSystemMetrics,SM_CXSCREEN
- invoke TopXY,Wwd,eax
- mov Wtx, eax
-
- invoke GetSystemMetrics,SM_CYSCREEN
- invoke TopXY,Wht,eax
- mov Wty, eax
-
- invoke CreateWindowEx,WS_EX_LEFT,
- ADDR szClassName,
- ADDR szDisplayName,
- WS_OVERLAPPED or WS_SYSMENU,
- Wtx,Wty,Wwd,Wht,
- NULL,NULL,
- hInst,NULL
- mov hWnd,eax
-
- invoke LoadMenu,hInst,600 ; menu ID
- invoke SetMenu,hWnd,eax
-
- invoke ShowWindow,hWnd,SW_SHOWNORMAL
- invoke UpdateWindow,hWnd
-
- ;===================================
- ; Loop until PostQuitMessage is sent
- ;===================================
-
- StartLoop:
- invoke GetMessage,ADDR msg,NULL,0,0
- cmp eax, 0
- je ExitLoop
- invoke TranslateMessage, ADDR msg
- invoke DispatchMessage, ADDR msg
- jmp StartLoop
- ExitLoop:
-
- return msg.wParam
-
- WinMain endp
-
- ; #########################################################################
-
- WndProc proc hWin :DWORD,
- uMsg :DWORD,
- wParam :DWORD,
- lParam :DWORD
-
- LOCAL var :DWORD
- LOCAL caW :DWORD
- LOCAL caH :DWORD
- LOCAL Rct :RECT
- LOCAL hDC :DWORD
- LOCAL Ps :PAINTSTRUCT
- LOCAL buffer1[128]:BYTE ; these are two spare buffers
- LOCAL buffer2[128]:BYTE ; for text manipulation etc..
-
- .if uMsg == WM_COMMAND
-
- .if wParam == 400
- szText icoMsg1,"Single Icon Button"
- invoke MessageBox,hWin,ADDR icoMsg1,
- ADDR szDisplayName,MB_OK
- .elseif wParam == 401
- szText icoMsg2,"Two Icon Button"
- invoke MessageBox,hWin,ADDR icoMsg2,
- ADDR szDisplayName,MB_OK
-
- .elseif wParam == 402
- szText bmpMsg1,"Single Bitmap Button"
- invoke MessageBox,hWin,ADDR bmpMsg1,
- ADDR szDisplayName,MB_OK
-
- .elseif wParam == 403
- szText bmpMsg2,"Two Bitmap Button"
- invoke MessageBox,hWin,ADDR bmpMsg2,
- ADDR szDisplayName,MB_OK
-
- .endif
-
- ;======== menu commands ========
- .elseif uMsg == WM_CREATE
- invoke IconButton,hWin,20,20,36,36,400
- mov hBtn1, eax
- invoke LoadIcon,hInstance,2
- invoke SendMessage,hBtn1,BM_SETIMAGE,1,eax
-
- invoke IconButton,hWin,20,60,36,36,401
- mov hBtn2, eax
- invoke SetWindowLong,hBtn2,GWL_WNDPROC,BtnProc
- mov lpBtnProc, eax
-
- invoke LoadIcon,hInstance,2
- invoke SendMessage,hBtn2,BM_SETIMAGE,1,eax
-
- invoke LoadBitmap,hInstance,10
- mov hBmp1, eax
- invoke SetBmpColor,hBmp1
- mov hBmp1,eax
-
- invoke LoadBitmap,hInstance,11
- mov hBmp2, eax
- invoke SetBmpColor,hBmp2
- mov hBmp2,eax
-
- invoke BmpButton,hWin,120,20,100,36,402
- mov hBtn3, eax
- invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp1
-
- invoke BmpButton,hWin,120,60,100,36,403
- mov hBtn4, eax
- invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp1
-
- invoke SetWindowLong,hBtn4,GWL_WNDPROC,bmpProc
- mov lpfnbmpProc, eax
-
-
- .elseif uMsg == WM_SIZE
-
- .elseif uMsg == WM_PAINT
- invoke BeginPaint,hWin,ADDR Ps
- mov hDC, eax
- invoke Paint_Proc,hWin,hDC
- invoke EndPaint,hWin,ADDR Ps
- return 0
-
- .elseif uMsg == WM_CLOSE
-
- .elseif uMsg == WM_DESTROY
- invoke PostQuitMessage,NULL
- return 0
- .endif
-
- invoke DefWindowProc,hWin,uMsg,wParam,lParam
-
- ret
-
- WndProc endp
-
- ; ########################################################################
-
- TopXY proc wDim:DWORD, sDim:DWORD
-
- shr sDim, 1 ; divide screen dimension by 2
- shr wDim, 1 ; divide window dimension by 2
- mov eax, wDim ; copy window dimension into eax
- sub sDim, eax ; sub half win dimension from half screen dimension
-
- return sDim
-
- TopXY endp
-
- ; #########################################################################
-
- Paint_Proc proc hWin:DWORD, hDC:DWORD
-
- LOCAL btn_hi :DWORD
- LOCAL btn_lo :DWORD
- LOCAL Rct :RECT
-
- invoke GetSysColor,COLOR_BTNHIGHLIGHT
- mov btn_hi, eax
-
- invoke GetSysColor,COLOR_BTNSHADOW
- mov btn_lo, eax
-
- return 0
-
- Paint_Proc endp
-
- ; ########################################################################
-
- IconButton proc hParent:DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
-
- ; IconButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
- ; invoke IconButton,hWnd,20,20,100,25,500
-
- szText icoBtnCl,"BUTTON"
- szText blnk1,0
-
- invoke CreateWindowEx,0,
- ADDR icoBtnCl,ADDR blnk1,
- WS_CHILD or WS_VISIBLE or BS_ICON,
- a,b,wd,ht,hParent,ID,
- hInstance,NULL
-
- ret
-
- IconButton endp
-
- ; ########################################################################
-
- BmpButton proc hParent:DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
-
- ; BmpButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
- ; invoke BmpButton,hWnd,20,20,100,25,500
-
- szText bmpBtnCl,"BUTTON"
- szText blnk2,0
-
- invoke CreateWindowEx,0,
- ADDR bmpBtnCl,ADDR blnk2,
- WS_CHILD or WS_VISIBLE or BS_BITMAP,
- a,b,wd,ht,hParent,ID,
- hInstance,NULL
-
- ret
-
- BmpButton endp
-
- ; #########################################################################
-
- BtnProc proc hCtl :DWORD,
- uMsg :DWORD,
- wParam :DWORD,
- lParam :DWORD
-
- .if uMsg == WM_KEYDOWN
- jmp lbd
- .elseif uMsg == WM_KEYUP
- jmp lbu
- .elseif uMsg == WM_LBUTTONDOWN
- lbd:
- invoke LoadIcon,hInstance,3
- invoke SendMessage,hBtn2,BM_SETIMAGE,1,eax
- .elseif uMsg == WM_LBUTTONUP
- lbu:
- invoke LoadIcon,hInstance,2
- invoke SendMessage,hBtn2,BM_SETIMAGE,1,eax
- .endif
-
- invoke CallWindowProc,lpBtnProc,hCtl,uMsg,wParam,lParam
-
- ret
-
- BtnProc endp
-
- ; #########################################################################
-
- SetBmpColor proc hBitmap:DWORD
-
- LOCAL mDC :DWORD
- LOCAL hBrush :DWORD
- LOCAL hOldBmp :DWORD
- LOCAL hReturn :DWORD
- LOCAL hOldBrush :DWORD
-
- invoke CreateCompatibleDC,NULL
- mov mDC,eax
-
- invoke SelectObject,mDC,hBitmap
- mov hOldBmp,eax
-
- invoke GetSysColor,COLOR_BTNFACE
- invoke CreateSolidBrush,eax
- mov hBrush,eax
-
- invoke SelectObject,mDC,hBrush
- mov hOldBrush,eax
-
- invoke GetPixel,mDC,1,1
- invoke ExtFloodFill,mDC,1,1,eax,FLOODFILLSURFACE
-
- invoke SelectObject,mDC,hOldBrush
- invoke DeleteObject,hBrush
-
- invoke SelectObject,mDC,hBitmap
- mov hReturn,eax
- invoke DeleteDC,mDC
-
- mov eax,hReturn
-
- ret
-
- SetBmpColor endp
-
- ; #########################################################################
-
- bmpProc proc hCtl :DWORD,
- uMsg :DWORD,
- wParam :DWORD,
- lParam :DWORD
-
- .if uMsg == WM_KEYDOWN
- jmp lbda
- .elseif uMsg == WM_KEYUP
- jmp lbua
- .elseif uMsg == WM_LBUTTONDOWN
- lbda:
- invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp2
- .elseif uMsg == WM_LBUTTONUP
- lbua:
- invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp1
- .endif
-
- invoke CallWindowProc,lpfnbmpProc,hCtl,uMsg,wParam,lParam
-
- ret
-
- bmpProc endp
-
- ; #########################################################################
-
-
-
-
- end start
-