当前位置: 首页 > news >正文

win32汇编环境,窗口程序中单选框的一般操作示例

;运行效果

;win32汇编环境,窗口程序中单选框的一般操作示例
;比如在窗口程序中生成单选框,默认哪项选中,判断当前选中哪一项,让哪项选中,得到选中项的名称等
;直接抄进RadAsm可编译运行。重点部分加备注。
;以下是ASM文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc           
include      kernel32.inc 
include      gdi32.inc

includelib   kernel32.lib 
includelib   user32.lib 
includelib   gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       
                                                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA                                   
ClassName   db "SimpleWinClass",0        
AppName     db "窗口程序的模版",0        

szButtonClassName   db "button",0              ;单选框属于按钮类名
szTitle             db "提示",0 

szCheckTitle        db "请选一位美女",0
szCheckTitle01      db "西施",0 
szCheckTitle02      db "绍婵",0
szCheckTitle03      db "妲已",0
szChecked01         db "当前选中的是: 西施",0 
szChecked02         db "当前选中的是: 绍婵",0 
szChecked03         db "当前选中的是: 妲已",0 

szCheshi_Format01   db "得到的数字是 %d",0
szCheshi_Format02   db "得到的字符串的字节数是 %d",0

szButtonTitle01     db "点击查看当前选定了哪一项",0 
szButtonTitle02     db "让所有项都处于未选中状态",0 
szButtonTitle03     db "选中第3项",0 
szButtonTitle04     db "得到第1项的名称",0 
szButtonTitle05     db "得到第2个编辑框的密码",0 

.DATA?                                  
hInstance HINSTANCE  ?                
CommandLine LPSTR    ? 
hID_GROUP    dd ?        ;组框控件句柄
hID_CHECK01  dd ?        ;单选框控件句柄
hID_CHECK02  dd ?   
hID_CHECK03  dd ? 

hIDB01       dd ?        ;按钮控件句柄
hIDB02       dd ?  
hIDB03       dd ?  
hIDB04       dd ?

.CONST               
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Equ 等值定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ID_CHECK01  equ 11        ;编辑框控件标识符
ID_CHECK02  equ 12
ID_CHECK03  equ 13  
     
IDB01       equ 21        ;按钮控件标识符
IDB02       equ 22  
IDB03       equ 23  
IDB04       equ 24

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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: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                     
        mov   wc.lpfnWndProc, OFFSET WndProc                        
        mov   wc.cbClsExtra,NULL 
        mov   wc.cbWndExtra,NULL 
        push  hInstance 
        pop   wc.hInstance 
        mov   wc.hbrBackground,COLOR_WINDOW+1 
        mov   wc.lpszMenuName,NULL 
        mov   wc.lpszClassName,OFFSET ClassName 
        invoke LoadIcon,NULL,IDI_APPLICATION                          
        mov   wc.hIcon,eax 
        mov   wc.hIconSm,eax 
        invoke LoadCursor,NULL,IDC_ARROW                              
        mov   wc.hCursor,eax 
        invoke RegisterClassEx, addr wc                              
        invoke CreateWindowEx,NULL, ADDR ClassName,ADDR AppName,WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX ,100,100,250,340, 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 TranslateMessage, ADDR msg 
                invoke DispatchMessage, ADDR msg 
        .endw 
        mov     eax,msg.wParam                                         
        ret 
WinMain endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM  
        LOCAL   @DEFAULT_GUI_FONT,@OLD_DEFAULT_GUI_FONT
        LOCAL   @szBuffer[256]:byte
        LOCAL   @szBuffer01[256]:byte
        
        .if uMsg == WM_CREATE              
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szCheckTitle, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_GROUPBOX,10,10,220,105,hWnd,NULL,NULL,NULL                      ;创建组框控件                 
                mov hID_GROUP,eax  
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szCheckTitle01, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_AUTORADIOBUTTON,20,30,200,25,hWnd,ID_CHECK01,NULL,NULL        ;创建单选框控件                 
                mov hID_CHECK01,eax   
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szCheckTitle02, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_AUTORADIOBUTTON,20,55,200,25,hWnd,ID_CHECK02,NULL,NULL                    
                mov hID_CHECK02,eax   
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szCheckTitle03, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_AUTORADIOBUTTON,20,80,200,25,hWnd,ID_CHECK03,NULL,NULL                   
                mov hID_CHECK03,eax   
                              
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle01, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON   ,20,140,200,25,hWnd,IDB01,NULL,NULL           ;创建按钮控件                 
                mov hIDB01,eax                
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle02, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,180,200,25,hWnd,IDB02,NULL,NULL                       
                mov hIDB02,eax                
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle03, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,220,200,25,hWnd,IDB03,NULL,NULL                        
                mov hIDB03,eax                
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle04, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,260,200,25,hWnd,IDB04,NULL,NULL                        
                mov hIDB04,eax                
                 
                invoke  GetStockObject,DEFAULT_GUI_FONT                                        ;调用GetStockObject函数,得到系统默认字体                
                mov @DEFAULT_GUI_FONT,eax  
                invoke  SendMessage,hID_GROUP,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                 ;发送WM_SETFONT消息,设置控件的字体                            
                invoke  SendMessage,hID_CHECK01,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                               
                invoke  SendMessage,hID_CHECK02,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE 
                invoke  SendMessage,hID_CHECK03,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE               
              
                invoke  SendMessage,hIDB01,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                
                invoke  SendMessage,hIDB02,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                
                invoke  SendMessage,hIDB03,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                
                invoke  SendMessage,hIDB04,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                
              
                invoke  DeleteObject,@DEFAULT_GUI_FONT                                          ;删除本程序新建的字体

                invoke    CheckDlgButton,hWnd,ID_CHECK02,BST_CHECKED                            ;可以先初始化让哪个处于选定状态,初定为第2项 
        .elseif uMsg == WM_COMMAND                                
                mov eax,wParam                 
                .if lParam != 0                                                                                                               
                        mov edx,wParam                                                                                           
                        shr edx,16                                                                                               
                        .if dx == BN_CLICKED                                              
                                .if ax == IDB01                                        
                                        invoke IsDlgButtonChecked,hWnd,ID_CHECK01                               ;检查第1项是否选中                                        
                                        .if eax == BST_CHECKED                                                  ;如果选中,则弹出提示                                            
                                                invoke MessageBox,NULL,addr szChecked01,addr szTitle,MB_OK                                            
                                        .endif                                        
                                        invoke IsDlgButtonChecked,hWnd,ID_CHECK02                                        
                                        .if eax == BST_CHECKED                                            
                                                invoke MessageBox,NULL,addr szChecked02,addr szTitle,MB_OK                                        
                                        .endif                                        
                                        invoke IsDlgButtonChecked,hWnd,ID_CHECK03                                       
                                        .if eax == BST_CHECKED                                           
                                                invoke MessageBox,NULL,addr szChecked03,addr szTitle,MB_OK                                        
                                        .endif                                
                                .elseif ax == IDB02                                        
                                        invoke  CheckDlgButton,hWnd,ID_CHECK01,BST_UNCHECKED                    ;让3项都未选中                                        
                                        invoke  CheckDlgButton,hWnd,ID_CHECK02,BST_UNCHECKED                                        
                                        invoke  CheckDlgButton,hWnd,ID_CHECK03,BST_UNCHECKED                                   
                                .elseif ax == IDB03                                        
                                        invoke  CheckDlgButton,hWnd,ID_CHECK03,BST_CHECKED                      ;选中第3项                                        
                                        invoke  CheckDlgButton,hWnd,ID_CHECK01,BST_UNCHECKED                                                
                                        invoke  CheckDlgButton,hWnd,ID_CHECK02,BST_UNCHECKED                                
                                .elseif ax == IDB04                                        
                                        invoke GetDlgItemText,hWnd,ID_CHECK01,addr @szBuffer,sizeof @szBuffer   ;得到第1项的名称                                        
                                        invoke MessageBox,hWnd,addr @szBuffer,addr szTitle,MB_OK or MB_ICONINFORMATION                                 
                                .endif                              
                        .endif                
                .endif   
        .elseif uMsg==WM_DESTROY                                           
                invoke PostQuitMessage,NULL                               
        .else 
                invoke DefWindowProc,hWnd,uMsg,wParam,lParam             
        ret 
    .endif 
    xor eax,eax 
    ret 
WndProc endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start                                                      

http://www.lryc.cn/news/521116.html

相关文章:

  • 如何移除git中被跟踪的commit文件
  • 结合night compute分析 利用tensor core 优化K值较大的矩阵乘(超过cublas50%)
  • Docker 部署 Typecho
  • 【大数据】机器学习-----模型的评估方法
  • 【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空
  • FPGA EDA软件的位流验证
  • 信号与系统初识---信号的分类
  • 信号量机制之苹果-橘子问题
  • 三相无刷电机控制|FOC理论04 - 克拉克变换 + 帕克变换的最终目标
  • Nacos: 一个动态服务发现与配置管理平台
  • 认识机器学习中的结构风险最小化准则
  • 计算机网络 (35)TCP报文段的首部格式
  • ubuntu24.04安装docker显卡工具包nvidia-container-toolkit
  • rknn环境搭建之docker篇
  • OpenCV相机标定与3D重建(56)估计物体姿态(即旋转和平移)的函数solvePnPRansac()的使用
  • vue倒计时组件封装,根据每个循环项的倒计时是否结束添加新类名。
  • 缩放 对内外参的影响
  • SQL面试题2:留存率问题
  • 晨辉面试抽签和评分管理系统之九:随机编排考生的分组(以教师资格考试面试为例)
  • 【EtherCATBridge】- KRTS C++示例精讲(9)
  • C++实现设计模式--- 观察者模式 (Observer)
  • iOS 解决两个tableView.嵌套滚动手势冲突
  • Lianwei 安全周报|2025.1.13
  • rtthread学习笔记系列(2) -- 宏
  • 美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台
  • 服务端开发模式-thinkphp-重新整理workman
  • HTB:Access[WriteUP]
  • 【论文笔记】SmileSplat:稀疏视角+pose-free+泛化
  • 电机控制的数字化升级:基于DSP和FPGA的仿真与实现
  • 1/14 C++