⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selcolor.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 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 + -