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.mzph.cn/web/66051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从transformer到informer

Transformer和Informer都是深度学习领域中的模型架构,它们主要用于处理序列数据,如自然语言处理(NLP)和时间序列预测任务。 **Transformer**: Transformer模型最初在2017年由Google的研究者提出,它在NLP领…

hive知识体系

hive知识体系 hive知识体系 链接: 1Hive概览 链接: 2Hive表类型 链接: 3Hive数据抽样 链接: 4Hive计算引擎 链接: 5Hive存储与压缩 链接: 6Hive Sql 大全 链接: 6Hive Sql 大全-Hive 函数 链接: 6Hive Sql 大全-窗口函数 链接: 7Hive执行计划 链接: 8Hive SQL底层执行原理 链接…

优化 Azure Synapse Dedicated SQL Pool中的 SQL 执行性能的经验方法

在 Azure Synapse Dedicated SQL Pool中优化 SQL 执行涉及了解底层体系结构(例如分布和分区)、查询优化(例如避免不必要的子查询和联接),以及利用具体化视图和 PolyBase 等工具进行高效数据加载。 1.有效使用分布和分…

个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)

前言 最近开始准备秋招,打算做一个个人主页,以便在秋招市场上更有竞争力。 目前,现有的一些搭建主页的博文教程存在以下一些问题: 使用Github Page进行部署,这在国内访问容易受阻使用宝塔面板等框架,功能…

Spring MVC简单数据绑定

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》_springspringmvcmybatis从零开始 代码、课件、教学视频与相关软件包下载-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版&…

嵌入式系统Linux实时化(四)Xenomai应用开发测试

1、Xenomai 原生API 任务管理 Xenomai 本身提供的一系列多任务调度机制,主要有以下一些函数: int rt_task_create (RT_TASK task, const char name, int stksize, int prio, intmode) ; 任务的创建;int rt_task_start(RT_TASK task, void(entry)(void cookie), void cookie…

如何在Ubuntu上安装和配置Git

版本控制系统(VCS)是软件开发过程中不可或缺的工具之一,它帮助开发者跟踪代码变更、协作开发以及管理不同版本的项目。Git作为当前最流行的分布式版本控制系统,因其高效性和灵活性而广受青睐。本文将指导你如何在Ubuntu操作系统上…

[python] bisect_right

等价于C中的upper_bound bisect_right 函数介绍 在Python的 bisect 模块中, bisect_right (别名 bisect )用于在有序序列中查找插入点。插入点是在序列中插入元素后,序列仍保持有序的位置。 bisect_right 函数返回的插入点是在已…

Mac上安装Label Studio

在Mac上安装Anaconda并随后安装Label Studio,可以按照以下步骤进行: 1. 在Mac上安装Anaconda 首先,你需要从Anaconda的官方网站下载适用于Mac的安装程序。访问Anaconda官网,点击“Download Anaconda”按钮,选择适合M…

vscode开启调试模式,结合Delve调试器调试golang项目详细步骤

1.前期准备 (1).在vs code中的扩展程序中搜索并安装Go扩展程序 (2).安装 Delve 调试器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打开vs code的命令面板,输入Go: Install/Update Tools,并单击该命令执行,安装或更新Go语…

SQL面试题1:连续登陆问题

引言 场景介绍: 许多互联网平台为了提高用户的参与度和忠诚度,会推出各种连续登录奖励机制。例如,游戏平台会给连续登录的玩家发放游戏道具、金币等奖励;学习类 APP 会为连续登录学习的用户提供积分,积分可兑换课程或…

爬山算法与模拟退火算法的全方面比较

一、基本概念与原理 1. 爬山算法 爬山算法是一种基于启发式的局部搜索算法,通过不断地向当前解的邻域中搜索更优解来逼近全局最优解。它的核心思想是,从当前解出发,在邻域内找到一个使目标函数值更大(或更小)的解作为新的当前解,直到找不到更优的解为止。 2.模拟退火算…

PostgreSQL 超级管理员详解

1. 什么是 PostgreSQL 超级管理员 PostgreSQL 超级管理员(superuser)是拥有数据库系统最高权限的用户。他们可以执行任何数据库操作,包括但不限于创建和删除数据库、用户、表空间、模式等。超级管理员权限是 PostgreSQL 中权限的最高级别。 …

安装本地测试安装apache-doris

一、安装前规划 我的服务器是三台麒麟服务器,2台跑不起来,这是我本地的,内存分配的也不多。 fe192.168.1.13 主数据库端口9030访问 8Gbe192.168.1.13内存4G 硬盘50be192.168.1.14内存4G 硬盘50be192.168.1.12内存4G 硬盘5013同时安装的fe和be 。 原理:192.168.1.13 服…

GPT(General Purpose Timer)定时器

基本概念: 在嵌入式系统中,General Purpose Timer(GPT)是一种非常重要的硬件组件,用于提供定时功能。 定义:通用定时器是一种能够提供精确时间测量和控制功能的电子设备或电路模块。它可以产生周期性的时…

集中式架构vs分布式架构

一、集中式架构 如何准确理解集中式架构 1. 集中式架构的定义 集中式架构是一种将系统的所有计算、存储、数据处理和控制逻辑集中在一个或少数几个节点上运行的架构模式。这些中央节点(服务器或主机)作为系统的核心,负责处理所有用户请求和…

数据挖掘实训:天气数据分析与机器学习模型构建

随着气候变化对各行各业的影响日益加剧,精准的天气预测已经变得尤为重要。降雨预测在日常生活中尤其关键,例如农业、交通和灾害预警等领域。本文将通过机器学习方法,利用历史天气数据预测明天是否会下雨,具体内容包括数据预处理、…

kalilinux - 目录扫描之dirsearch

情景导入 先简单介绍一下dirsearch有啥用。 假如你现在访问一个网站,例如https://www.example.com/ 它是一个电商平台或者其他功能性质的平台。 站在开发者的角度上思考,我们只指导https://www.example.com/ 但不知道它下面有什么文件,文…

关于 ThinkPHP 与 PostgreSQL 结合使用的一些要点

ThinkPHP 是一款流行的 PHP 开发框架,而 PostgreSQL 是功能强大的开源关系型数据库。它们可以结合使用来开发各类应用,以下是关于 ThinkPHP 与 PostgreSQL 结合使用的一些要点: 配置数据库连接 编辑配置文件:在 ThinkPHP 项目中&…

进程同步之信号量机制

信号量机制 信号量机制是一种用于进程同步和互斥的基本工具,特别是在并发编程中,广泛用于控制对共享资源的访问,避免数据竞争和死锁等问题。信号量机制由荷兰计算机科学家Edsger Dijkstra在1965年提出,并在操作系统的进程同步中发…