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 @szBuffer256:byte

LOCAL @szBuffer01256: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

相关推荐
2601_962296513 天前
C/C++:编译全过程——预处理、编译、汇编、链接(包含预处理指令:宏定义,文件包括、条件编译)
汇编·预处理·链接·c/c++·编译过程
Freak嵌入式3 天前
Pico PIO 汇编语法深度详解:标识符、指令、伪指令全解析
汇编·stm32·单片机·嵌入式硬件·fpga开发·硬件架构
kyle~9 天前
x86 汇编LOCK前缀 --- 硬件架构向软件提供的核心同步原语
汇编·c++·性能优化·硬件架构·实时系统
典典分享指南9 天前
飞书 + 企业微信 + 微信文档多端协同实践指南
汇编·flask·intellij-idea·fastapi
极客互动API14 天前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad
wechatbot88819 天前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa
祈禾24 天前
计算机组成原理之编译、汇编、链接、解释
开发语言·汇编·笔记·学习
水饺编程1 个月前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
iCxhust1 个月前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
·薯条大王1 个月前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python