📄 selcolor.asm
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDM_SELECTCOLOR equ 1
IDM_EXIT equ 3
.data
ClassName db "WinClass",0
TitleName db "选择颜色",0
MenuName db "MyMenu",0
Color COLORREF 16 dup (0ffh)
char db "%lx",0
ColorResult db "您选择的颜色值为:",13,10,10 dup (0)
.data?
hInstance HINSTANCE ?
cclr CHOOSECOLOR <>
temp db 10 dup (?)
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke WinMain, NULL,NULL,NULL, SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
mov eax, hInstance
mov wc.hInstance,eax
invoke GetStockObject,WHITE_BRUSH
mov wc.hbrBackground,eax
mov wc.lpszMenuName,offset MenuName
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_ASTERISK
mov wc.hIcon,eax
mov wc.hIconSm,0
invoke LoadCursor,NULL,IDC_HAND
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW+WS_EX_TOPMOST,addr ClassName,\
addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
NULL,NULL,hInst,NULL
mov hwnd,eax
invoke ShowWindow,hwnd,CmdShow
invoke UpdateWindow,hwnd
.while TRUE
invoke GetMessage, addr msg,NULL,0,0
.BREAK .IF (!eax)
invoke DispatchMessage, addr msg
.endw
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDM_SELECTCOLOR
mov cclr.lStructSize,sizeof CHOOSECOLOR
mov eax,hWnd
mov cclr.hwndOwner,eax
mov eax,hInstance
mov cclr.hInstance,eax
mov cclr.lpCustColors,offset Color
; mov cclr.rgbResult,0FF0000H
mov cclr.Flags,CC_ANYCOLOR+CC_FULLOPEN +CC_RGBINIT
invoke ChooseColor,addr cclr
; invoke dwtoa,cclr.rgbResult,addr temp
invoke wsprintf,addr temp,addr char,cclr.rgbResult
invoke lstrcat,addr ColorResult,addr temp
invoke MessageBox,NULL,addr ColorResult,addr TitleName,MB_OK
.else
invoke DestroyWindow,hWnd
.endif
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -