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

📄 colorchoose.asm

📁 这是一个WIN32汇编程序
💻 ASM
字号:
.386
.model flat, stdcall
option casemap :none
;<<<<<<<<<<<<<<<头文件和导入库文件<<<<<<<<<<<<<<<<<<<<<
    include windows.inc
    include user32.inc
    include kernel32.inc
    include COMDLG32.inc            ;包含颜色通用对话框
    includelib COMDLG32.lib
    includelib user32.lib
    includelib kernel32.lib
    include gdi32.inc               ;createsolidbrush的头文件
    includelib gdi32.lib            ;createsolidbrush的链接库
    include winmm.inc
    includelib winmm.lib
    WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
;<<<<<<<<<<<<<<<<<<<<<<<数据段<<<<<<<<<<<<<<<<<<<<<<<<<<
.data
    hInstance   dd 0                ;应用程序模块句柄
    dlgname     db "MAIN",0
    szColor     db "Color Value:%li",0       ;显示颜色数值
    szMusicName db "yxh",0
.data?
    buffer      db 24 dup(?)                        ;buffer for wsprintf
    rgb         dd 16 dup(?)                        ;value for cc struct
    color       dd ?                                
    hBrush      dd ?                                
    hStatic     dd ?                                
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;                  代码段
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.code

start:

    invoke GetModuleHandle, NULL     ;得到应用程序的句柄
        mov hInstance, eax
    invoke DialogBoxParam,hInstance,ADDR dlgname,0,ADDR WndProc,0    ;创建模式对话框作为主窗口程序
        invoke ExitProcess,eax

WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD         ;如果有消息到达,则由负责该窗口的窗口回调函数处理

LOCAL cc:CHOOSECOLOR                                ;定义局部变量

.if uMsg == WM_INITDIALOG                           ;初始化对话框
    invoke PlaySound, addr szMusicName, hInstance, SND_ASYNC or SND_LOOP
    invoke GetDlgItem,hWin,1000                     ;得到对话框控件句柄ID
        mov hStatic,eax                             ;保存他
            xor eax, eax
                ret
.elseif uMsg == WM_CTLCOLORSTATIC                   ;当一个静态控件要被绘制时发送此消息给父窗口                
    mov eax,lParam
        .if eax == hStatic                          
            invoke CreateSolidBrush,color           ;从指定颜色建立实心刷子
                mov hBrush,eax                      ;保存句柄
                    ret                             
        .endif
.elseif uMsg == WM_COMMAND
    .if wParam == 1001                              
        mov cc.lStructSize,sizeof cc                ;结构体大小
        push hWin                                   
        pop cc.hwndOwner                            
        mov cc.rgbResult,255                        ;开始选择红色作为色彩选择对话框颜色
        mov cc.Flags,CC_FULLOPEN+CC_RGBINIT         ;预期设定此对话框能一直打开
        mov cc.lpCustColors,offset rgb              ;给rgb取地址
            invoke ChooseColor, addr cc             ;建立一个色彩选择对话框
                .if eax == TRUE                     ;选择颜色并且没有关闭对话框时要返回TRUE
                    push cc.rgbResult               ;保存选择的颜色
                    pop color
                        invoke InvalidateRect,hStatic,NULL,TRUE             ;在更新区域中加入一个我们要填充颜色的矩形
                        invoke wsprintf,addr buffer,addr szColor,color      ;格式化字符串,取缓冲区的地址,并填充颜色
                        invoke SetDlgItemText,hWin,2000,addr buffer         ;设置对话框标题,取缓冲区的地址
                        
                .endif
    .endif
        xor eax,eax
            ret
.elseif uMsg == WM_CLOSE                            ;当有关闭对话框的消息时
    invoke DeleteObject,hBrush                      ;删除实心刷子
        invoke EndDialog,hWin,NULL                  ;关闭对话框
            ret
.endif
xor eax, eax
    ret
WndProc endp
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -