|
|
|
|
Win32·J½s±Ðµ{¤»
±z¬O²Ä
272ÓÂsÄýªÌ
¦³Ãö¤u¨ãÄæ©Mª¬ºAÄæ
¤u¨ãÄæ©Mª¬ºAÄæ¤]¬OWindows¼Ð·Ç¤¶±ªº²Õ¦¨³¡¤À¡A¤u¨ãÄæ¤@¯ë¦ì©ó¥\¯àªíÄæªº¤U¤è¡A¤W±¬O¤@¨Ç¨t²Î©w¸qªº©Î¦Û¤v©w¸qªº¹Ï¤ù¡A¥i¥H³q«U¦aÅã¥Ü³oÓ«ö¶sªº§@¥Î¡Cª¬ºAÄæ¤@¯ë¦ì©óµøµ¡ªº³Ì¤U¤è¡A¥Î¨ÓÅã¥Üµ{¦¡¹B¦æ¤¤ªº¤@¨Ç¸ê°T¡C¤u¨ãÄæ©Mª¬ºAÄæ¬OWindows¨t²Îªº¨âÓ³q¥Îªº±±¨î¶µ¡A§A¥i¥H³q¹L¨âÓ±M¥Îªº API ©ÎªÌ§Q¥Î CreateWindowEx ¦A¨Ï¥Î¨î©wªº¤w¸g¥Ñ¨t²Î©w¸qªºÃþ¨Ó³Ð«Ø¥¦Ì¡C³o¨âÓ API ¤À§O¬O CreateToolbarEx ©M CreateStatusWindow¡C¤U±±N¤@¤U¥¦Ìªº¥Îªk¡C
CreateToolbarEx ªºÁn©ú¬°¡G HWND CreateToolbarEx(
HWND hwnd,
DWORD ws,
UINT wID,
int nBitmaps,
HINSTANCE hBMInst,
UINT wBMID,
LPCTBBUTTON lpButtons,
int iNumButtons,
int dxButton,
int dyButton,
int dxBitmap,
int dyBitmap,
UINT uStructSize}
¥¦ªº°Ñ¼Æ¤¤ hwnd ¬O¤÷µøµ¡¡]¤]´N¬O§Ú̪º¥Dµøµ¡¡^ªº±±¨î½X¡Aws ¬O¤u¨ãÄæªº·®æ¡A¥i¥H¥Ñ´X¶µ¦X¦¨¡A¦p WS_VISIBLE ¬O³Ð«Ø¬O¥i¨£¡ATBSTYLE_FLATªí¥Ü¥±«ö¶s¡AWS_BORDERªí¥Ü¦³Ãä½uµ¥¡A¨ãÅé¥i¥H¨£¤â¥U¡CwID ¬O¤u¨ãÄæªº¼ÐÃÑ¡AnBitmaps ¬O©w¸q«ö¶sªº¹Ï¤ùӼơA¦]¬°¦pªG§An¨Ï¥Î¦Û¤vªº¹Ï¤ù¡A©Ò¦³¹Ï¤ù¬On©ñ¦b¦P¤@¦æ¤¤ªº¡AµM«á´N¥Ñ§A¦Û¤v«ü©w¤¤¶¡ªºÓ¼Æ¡A hBMInst ¬O¥]§t¤w©w¸q¨t²Î¹Ï¤ùªº¸ê·½±±¨î½X¡A¦b§A¤£·Q¦Û¤vµe¹Ï¡A¨Ï¥Î¤º©wªº¼Ð·Ç¹Ï¤ù®É¨Ï¥Î¡A¤@¯ë¥]§t³o¨Ç¹Ï¤ùªº hInstance ¤w¸g¦b Widnows.inc ¤¤©w¸q¬° HINST_COMMCTRL¡A¦P¼Ë wBMID ¤@¯ë¬O IDB_STD_SMALL_COLOR¡Aªí¥Ü¨Ï¥Î¤j¹Ï¤ùÁÙ¬O¤p¹Ï¤ùµ¥µ¥¡C±µ¤U¨Ó¬O©w¸q«ö¶sªº¸ê®Æµ²ºc¡A¤¤¶¡©w¸q¤F¦UÓ«ö¶sªº©R¥O¸¹¡A¹Ï¤ù¸¹¤Î¨ä¥LÄݩʡAµ²ºc¦p¤U¡G
TBBUTTON STRUCT
iBitmap DWORD ?
idCommand DWORD ?
fsState BYTE ?
fsStyle BYTE ?
bReserved BYTE 2 dup(?)
dwData DWORD ?
iString DWORD ?
TBBUTTON ENDS
¨ä¤¤¡A¨CÓµ²ºc©w¸q¤@Ó«ö¶s¡A¸ê®Æµ²ºc¤¤iBitmap ¬O¹Ï¤ùID¡AidCommand ¬O«ö¶sªº©R¥O¸¹¡A³oÓ©R¥O¸¹·í§A«ö¤U«ö¶sªº®ÉÔ·|¥X²{¦b WM_COMMAND ®ø®§ªº wParam ¤¤¡A§A´N¥i¥Hª¾¹DþÓ«ö¶s³Q«ö¤U¤F¡CfsState ¬O«ö¶sªºªì©lª¬ºA¡A¦p TBSTATE_PRESSED ¬O¤w¸g«ö¤Uªº¡A¸Ô²Ó¨£¤â¥U¡AfsStyle ¬O·®æ¡C
¦Ó«Ø¥ßª¬ºAÄæªº CreateStatusWindow ªºÁn©ú¦p¤U¡G
HWND CreateStatusWindow(
LONG style,
LPCTSTR lpszText,
HWND hwndParent,
UINT wID
);
style ¬Oª¬ºAÄæªº·®æ¡AlpszText «ü¦Vªì©l¤Æ¬OnÅã¥Ü¦bª¬ºAÄæªº¤å¥»¡A§A¥i¥H«ü¦V NULL¡ChwndParent ¬O¤÷µ¡¤fªº±±¨î½X¡CwID ¬Oµ¡¤f ID¡C
¨Ï¥Î¤u¨ãÄæ©Mª¬ºAÄæªº®Ú·½µ{¦¡
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¬O§_¥]¬A½Õ¸Õ¥N½X
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DEBUG = 1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programmed by ù¶³±l, bigluo@telekbird.com.cn
; Website: http://asm.yeah.net
; LuoYunBin's Win32 ASM page (ù¶³±lªº½sµ{¼Ö¶é)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ª©¥»¸ê°T
; ¤u¨ãÄæ©Mª¬ºAÄæºt¥Üµ{¦¡ Ver 1.0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
includelib gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDI_MAIN equ 1000 ;icon
IDM_MAIN equ 4000 ;menu
IDM_TOOLBAR equ 4001
IDM_STATUSBAR equ 4002
IDM_EXIT equ 4003
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê®Æ¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
hMenu dd ?
hIcon dd ?
hToolbar dd ?
hStatusbar dd ?
szBuffer db 256 dup (?)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê®Æ¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szClassName db "Toolbar Template",0
szCaptionMain db '¤u¨ãÄæ©Mª¬ºAÄæºt¥Üµ{¦¡ - ù¶³±l',0
dwFlag dd F_TOOLBAR or F_STATUSBAR
;********************************************************************
; ¼Ð»x¦ì¤¸©w¸q
F_TOOLBAR equ 00000001b
F_STATUSBAR equ 00000010b
stToolbar TBBUTTON < STD_FILENEW,1,TBSTATE_ENABLED,TBSTYLE_BUTTON,2 dup(0),-1>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,2 dup(0),-1>
TBBUTTON < STD_FILEOPEN,2,TBSTATE_ENABLED,TBSTYLE_BUTTON,2 dup(0),-1>
TBBUTTON < STD_FILESAVE,3,TBSTATE_ENABLED,TBSTYLE_BUTTON,2 dup(0),-1>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,2 dup(0),-1>
TBBUTTON < STD_PRINT,4,TBSTATE_ENABLED,TBSTYLE_BUTTON,2 dup(0),-1>
TBBUTTON < STD_PRINTPRE,0,TBSTATE_ENABLED,TBSTYLE_SEP,2 dup(0),-1>
NUM_BUTTONS EQU 7
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥N½X¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
if DEBUG
include Debug.asm
endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; µ{¦¡¶}©l
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥Dµøµ¡µ{¦¡
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWcMain:WNDCLASSEX
local @stMsg:MSG
;********************************************************************
; ¦pªG¤w¸g¦b¹B¦æ¡A«h±Ò°Ê¤w¹B¦æªº¶iµ{
;********************************************************************
invoke FindWindow,offset szClassName,NULL
.if eax != NULL
invoke ShowWindow,eax,SW_SHOWNORMAL
invoke ExitProcess,NULL
.endif
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke LoadIcon,hInstance,IDI_MAIN
mov hIcon,eax
invoke LoadMenu,hInstance,IDM_MAIN
mov hMenu,eax
;*************** µù¥Uµøµ¡Ãþ *****************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWcMain.hCursor,eax
mov @stWcMain.cbSize,sizeof WNDCLASSEX
mov @stWcMain.hIconSm,0
mov @stWcMain.style,CS_HREDRAW or CS_VREDRAW
mov @stWcMain.lpfnWndProc,offset WndMainProc
mov @stWcMain.cbClsExtra,0
mov @stWcMain.cbWndExtra,0
mov eax,hInstance
mov @stWcMain.hInstance,eax
mov @stWcMain.hIcon,0
mov @stWcMain.hbrBackground,COLOR_BTNFACE+1
mov @stWcMain.lpszClassName,offset szClassName
mov @stWcMain.lpszMenuName,0
invoke RegisterClassEx,addr @stWcMain
;*************** «Ø¥ß¿é¥Xµøµ¡ ***************************************
invoke CreateWindowEx,NULL,\ ;WS_EX_CLIENTEDGE,\
offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW,\ ; OR WS_VSCROLL OR WS_HSCROLL,\
50,50,550,350,\
NULL,hMenu,hInstance,NULL
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;*************** ®ø®§°j°é *******************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndMainProc proc uses ebx edi esi, \
hWnd WORD,uMsg WORD,wParam WORD,lParam:DWORD
mov eax,uMsg
.if eax == WM_CREATE
mov eax,hWnd
mov hWinMain,eax
call _Init
;********************************************************************
.elseif eax == WM_SIZE
invoke SendMessage,hStatusbar,uMsg,wParam,lParam
invoke SendMessage,hToolbar,uMsg,wParam,lParam
;********************************************************************
.elseif eax == WM_COMMAND
mov eax,wParam
movzx eax,ax
.if eax == IDM_EXIT
call _Quit
.elseif eax == IDM_TOOLBAR
xor dwFlag,F_TOOLBAR
call _ArrangeWindow
.elseif eax == IDM_STATUSBAR
xor dwFlag,F_STATUSBAR
call _ArrangeWindow
.else
_Debug "¥\¯àªí©M¤u¨ãÄæ©R¥O\","©R¥OID",eax
.endif
;********************************************************************
.elseif eax == WM_CLOSE
call _Quit
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
; ª`·N¡GWndProc ³B²z Windows ®ø®§«á¡A¥²¶·¦b Eax ¤¤ªð¦^ 0
; ¦ý¬O¥Ñ DefWindowProc ³B²z«áªºªð¦^Ȥ£¯à§ïÅÜ¡A§_«hµøµ¡
; ±NµLªkÅã¥Ü!
;********************************************************************
xor eax,eax
ret
WndMainProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥Dµøµ¡±±¨î°Æµ{¦¡
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Init proc
invoke SendMessage,hWinMain,WM_SETICON,ICON_SMALL,hIcon
invoke CreateToolbarEx,hWinMain,\
WS_VISIBLE or WS_CHILD or TBSTYLE_FLAT or WS_BORDER,\
1,0,HINST_COMMCTRL,IDB_STD_SMALL_COLOR,offset stToolbar,\
NUM_BUTTONS,0,0,0,0,sizeof TBBUTTON
mov hToolbar,eax
invoke CreateStatusWindow,WS_CHILD or WS_VISIBLE,NULL,hWinMain,2
mov hStatusbar,eax
call _ArrangeWindow
ret
_Init endp
;********************************************************************
_Quit proc
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
ret
_Quit endp
;********************************************************************
_ArrangeWindow proc
local @stRect:RECT
local @stRectTemp:RECT
local @dwWidth:DWORD
test dwFlag,F_TOOLBAR
.if ZERO?
invoke ShowWindow,hToolbar,SW_HIDE
invoke CheckMenuItem,hMenu,IDM_TOOLBAR,MF_UNCHECKED
.else
invoke ShowWindow,hToolbar,SW_SHOW
invoke CheckMenuItem,hMenu,IDM_TOOLBAR,MF_CHECKED
.endif
test dwFlag,F_STATUSBAR
.if ZERO?
invoke ShowWindow,hStatusbar,SW_HIDE
invoke CheckMenuItem,hMenu,IDM_STATUSBAR,MF_UNCHECKED
.else
invoke ShowWindow,hStatusbar,SW_SHOW
invoke CheckMenuItem,hMenu,IDM_STATUSBAR,MF_CHECKED
.endif
ret
_ArrangeWindow endp
;********************************************************************
end start
µ{¦¡ªº¤ÀªR©MnÂI
¦b¤u¨ãÄæ©Mª¬ºAÄæ½sµ{¤¤¡Anª`·Nªº´N¬O¤u¨ãÄæ©Mª¬ºAÄæ¨Ã¤£·|ÀH¤÷µøµ¡ªº¤j¤pÅܤƦۤv½Õ¾ã¦ì¸m©M¤j¤p¡A©Ò¥Hn¦b¤÷µøµ¡ªº WM_SIZE ®ø®§¤¤¨Ó²¾°Ê©M½Õ¾ã¥¦Ì¡A³o¥i¥H²³æªº§â WM_SIZE ®ø®§¶Çµ¹¥¦Ì´N¦æ¤F¡C¤£¥²¦Û¤v¦A¥hpºâ¡C
.elseif eax == WM_SIZE
invoke SendMessage,hStatusbar,uMsg,wParam,lParam
invoke SendMessage,hToolbar,uMsg,wParam,lParam
¥t¥~¡A¤u¨ãÄæ©Mª¬ºAÄæ¤]¬O¤@ºØ¤lµøµ¡¡A©Ò¥H¦pªG·Q§â¥¦ÌÁôÂéÎÅã¥Üªº¸Ü¡A¥i¥H¥Î¼Ð·Çªº ShowWindow ¨Ó³B²z¡C
¹ê¥Î¬ÛÃö·j´M: map nds bus now lg it pda model sm dc
|

〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨û¡A²{¬°ºaÅA·|û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
·°ó§Þ³N¤u§@«Ç
|
|
|
|