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

embedded/2025/1/15 23:37:54/

;运行效果

;win32汇编环境,对话框程序中单选框的一般操作示例
;比如默认哪项选中,判断当前选中哪一项,让哪项选中,得到选中项的名称等
;直接抄进RadAsm可编译运行。重点部分加备注。
;下面为asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc 
include    user32.inc 
include    kernel32.inc 
include    gdi32.inc

includelib user32.lib 
includelib kernel32.lib 
includelib gdi32.lib

; 自定义函数声明
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD   ;对话框窗口函数

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data 
DlgName      db "MyDialog",0 

szTitle      db "提示",0 
szChecked01  db "当前选中的是: 刘备",0 
szChecked02  db "当前选中的是: 关羽",0 
szChecked03  db "当前选中的是: 张飞",0 

.data? 
hInstance HINSTANCE             ? 

.const 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000    ;图标
IDR01    equ 11
IDR02    equ 12 
IDR03    equ 13

IDB01    equ 21   
IDB02    equ 22 
IDB03    equ 23  
IDB04    equ 24   
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code 
start: 
    invoke GetModuleHandle, NULL 
    mov    hInstance,eax 
    invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL 
    invoke ExitProcess,eax 

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
        LOCAL   @DEFAULT_GUI_FONT,@OLD_DEFAULT_GUI_FONT
        LOCAL   @szBuffer[1024]:byte
        
        .if     uMsg == WM_INITDIALOG 
                invoke    LoadIcon,hInstance,ICO_MAIN    ;加载图标
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
            
                invoke  GetStockObject,DEFAULT_GUI_FONT                                 ;调用GetStockObject函数,得到系统默认字体                
                mov @DEFAULT_GUI_FONT,eax  
                invoke  GetDlgItem,hWnd,IDR01
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE               ;设置控件的字体为系统字体,好看一点
                invoke  GetDlgItem,hWnd,IDR02
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  GetDlgItem,hWnd,IDR03
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  GetDlgItem,hWnd,IDB01
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  GetDlgItem,hWnd,IDB02
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  GetDlgItem,hWnd,IDB03
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  GetDlgItem,hWnd,IDB04
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                
                invoke    CheckDlgButton,hWnd,IDR02,BST_CHECKED      ;可以先初始化让哪个处于选定状态,初定为第2项
        .elseif uMsg == WM_COMMAND                
                mov eax,wParam 
                .if lParam == 0                                                                            ;如果lParam参数不包含控件句柄,一般是指菜单信息

                .else 
                        mov edx,wParam                                                                     ;wParam是32位的数值,其高16位为控件标识符,低16位为通知码
                        shr edx,16                                                                         ;将edx右移16位,即让其高16位置0,也即让edx的低16位dx的值为取得的通知码,然后下面进行判断
                        .if dx == BN_CLICKED              
                                .if ax == IDB01
                                        invoke IsDlgButtonChecked,hWnd,IDR01                               ;检查第1项是否选中
                                        .if eax == BST_CHECKED                                            ;如果选中,则弹出提示
                                            invoke MessageBox,NULL,addr szChecked01,addr szTitle,MB_OK    
                                        .endif
                                        invoke IsDlgButtonChecked,hWnd,IDR02
                                        .if eax == BST_CHECKED
                                            invoke MessageBox,NULL,addr szChecked02,addr szTitle,MB_OK
                                        .endif
                                        invoke IsDlgButtonChecked,hWnd,IDR03
                                        .if eax == BST_CHECKED
                                            invoke MessageBox,NULL,addr szChecked03,addr szTitle,MB_OK
                                        .endif
                                .elseif ax == IDB02
                                        invoke  CheckDlgButton,hWnd,IDR01,BST_UNCHECKED                    ;让3项都未选中
                                        invoke  CheckDlgButton,hWnd,IDR02,BST_UNCHECKED
                                        invoke  CheckDlgButton,hWnd,IDR03,BST_UNCHECKED   
                                .elseif ax == IDB03
                                        invoke  CheckDlgButton,hWnd,IDR03,BST_CHECKED                      ;选中第3项
                                        invoke  CheckDlgButton,hWnd,IDR01,BST_UNCHECKED        
                                        invoke  CheckDlgButton,hWnd,IDR02,BST_UNCHECKED
                                .elseif ax == IDB04
                                        invoke GetDlgItemText,hWnd,IDR01,addr @szBuffer,sizeof @szBuffer   ;得到第1项的名称
                                        invoke MessageBox,hWnd,addr @szBuffer,addr szTitle,MB_OK or MB_ICONINFORMATION 
                                .endif       
                        .endif 
                .endif   
        .elseif uMsg == WM_CLOSE 
                invoke EndDialog, hWnd,NULL 
        .else 
                mov eax,FALSE 
                ret 
        .endif 
                mov eax,TRUE 
        ret 
DlgProc endp 

end start 
 

;下面为rc文件内容
#include "resource.h"           //提示缺少该文件,可以在资源里下载
#define    ICO_MAIN    1000    //图标
#define IDR01       11          //单选框标识符
#define IDR02       12
#define IDR03       13

#define IDB01       21          //按钮标识符
#define IDB02       22
#define IDB03       23
#define IDB04       24
ICO_MAIN    ICON        "Main.ico"


//定义对话框
MyDialog DIALOG 10, 10, 120, 150 
STYLE  DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK | WS_THICKFRAME
CAPTION "对话框程序模版" 

BEGIN 
     AUTORADIOBUTTON "刘备", IDR01, 10, 10, 100, 12, WS_TABSTOP    //定义单选框,使用AUTORADIOBUTTON关键字定义的单选框,会形成一组,只能单选其中一个
     AUTORADIOBUTTON "关羽", IDR02, 10, 25, 100, 12, WS_TABSTOP
     AUTORADIOBUTTON "张飞", IDR03, 10, 40, 100, 12, WS_TABSTOP

     CONTROL "点击查看当前选定了哪一项",IDB01,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,10,60,100,14
     CONTROL "让所有项都处于未选中状态",IDB02,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,10,80,100,14
     CONTROL "选中第3项",IDB03,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,10,100,100,14
     CONTROL "得到第1项的名称",IDB04,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,10,120,100,14
END 


 


http://www.ppmy.cn/embedded/153871.html

相关文章

iOS 解决两个tableView.嵌套滚动手势冲突

我们有这样一个场景,就是页面上有一个大的tableView, 每一个cell都是和屏幕一样高的,然后cell中还有一个可以 tableView,比如直播间的情形,这个时候如果我们拖动 cell里面的tableView滚动的话,如果滚动到内…

【C++DFS 图论 时间戳】2360. 图中的最长环|1897

本文涉及知识点 C图论 CDFS LeetCode2360. 图中的最长环 给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示,节点 i 到节点 edges[i] 之间有一条有向…

【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录

一、import导入css样式 在项目文件中创建一个common文件夹,下面创建一个css文件夹,里面放上style.css文件,编写的是公共样式,我们现在要在App.vue中引入该样式。 在App.vue中引入该样式,这样就会使样式全局生效&#…

Web前端界面开发

前沿:介绍自适应和响应式布局 自适应布局:-----针对页面1个像素的变换而变化 就是我们上一个练习的效果 我们的页面效果,随着我们的屏幕大小而发生适配的效果(类似等比例) 如:rem适配 和 vw/vh适配 …

React使用Redux

Redux Redux 是一个用于 JavaScript 应用的状态容器,Redux 的核心思想是将应用程序的所有状态存储在一个单一的、全局的 store 中,并提供了一套规则来确保状态以一种可预测的方式进行变更. 安装 npm i reduxjs/toolkit react-redux创建目录 创建store文件夹&…

波场靓号生成工具

1、波场靓号地址生成器_精准快速生成TRC20钱包靓号地址 - 波场靓号 波场靓号是什么? 波场靓号是指由你自己选择的TRC20地址,使其看起来不那么普通。 比如: TMBeViiBxxSGmPiMgbvWBwF4ngSbmr8888 TL1234aiqsJacvpji9QWMBazeEbTCKHpTN THoa8888hHCSNt2eW…

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛,旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程,体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

什么是 XSS(跨站脚本攻击)?

XSS(Cross-Site Scripting)是一种常见的安全漏洞,攻击者通过在页面中注入恶意脚本代码,诱导用户的浏览器执行这些代码,从而达到窃取用户数据、伪造操作或劫持用户会话的目的。 XSS 的攻击目标通常是用户的浏览器&…