Win32汇编---对话框资源的综合应用

本文通过一个具体的实验项目,详细介绍了使用各种对话框控件的方法,包括GROUPBOX、AUTOCHECKBOX、COMBOBOX等,并提供了RC文件及汇编源代码示例。

这个实验中基本上把改用的对话框资源都用上了,GROUPBOX, AUTOCHECKBOX,COMBOBOX,EDITTEXT,TEXT,SCROLLBAR,PUSHBUTTON...一开始对于控件的位置可能把握不好,但是我想先把一些基本组件的特征写出来,位置,大小都设置为0,保存为RC文件,然后用编译成RES文件,用VC++6.0来编辑这些控件,把位置,大小都弄成合适的大小,保存。也可以另存为一份RC文件,里面把位置,大小的数值都列出来了~~


资源文件Control.rc源代码如下:

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include        <resource.h>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#define ICO_MAIN        0x1000
#define DLG_MAIN        1
#define IDB_1           1
#define IDB_2           2
#define IDC_ONTOP       101
#define IDC_SHOWBMP     102
#define IDC_ALOWCHG     103
#define IDC_MODALFRAME  104
#define IDC_THICKFRAME  105
#define IDC_TITLETEXT   106
#define IDC_CUSTOMTEXT  107
#define IDC_BMP         108
#define IDC_SCROLL      109
#define IDC_SBVALUE     110
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ICO_MAIN        ICON    "Main.ico"
IDB_1           BITMAP  "Picture1.bmp"
IDB_2           BITMAP  "Picture2.bmp"
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
DLG_MAIN DIALOG 150, 200, 325, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "对话框空间示例"
FONT 9, "宋体"
BEGIN
    GROUPBOX            "选项", -1, 64, 8, 122, 101
    AUTOCHECKBOX        "总在最前", IDC_ONTOP, 74, 23, 100, 8
    AUTOCHECKBOX        "显示图片", IDC_SHOWBMP, 74, 41, 100, 10
    AUTOCHECKBOX        "允许更换图片", IDC_ALOWCHG, 74, 58, 100, 11
    CONTROL             "", -1, "Static", SS_ETCHEDHORZ | WS_VISIBLE | WS_CHILD, 72, 71, 102, 1
    AUTORADIOBUTTON     "模态边框(&Modal Frame)", IDC_MODALFRAME, 74, 78, 100, 10, WS_TABSTOP
    AUTORADIOBUTTON     "可变边框(&Thick Frame)", IDC_THICKFRAME, 74, 92, 72, 10, WS_TABSTOP
 
    GROUPBOX            "标题文字", -1, 201, 8, 123, 101
    COMBOBOX            IDC_TITLETEXT, 208, 23, 102, 70, CBS_DROPDOWNLIST | WS_TABSTOP
    LTEXT               "自定义文字: ", -1, 208, 43, 98, 9
    EDITTEXT            IDC_CUSTOMTEXT, 208, 56, 101, 14
    LTEXT               "请在此选择显示在标题栏上面的文字,或者选择“自定义”后自行输入", -1, 208,75,105,26, WS_BORDER
    CONTROL             "", -1, "Static", SS_ETCHEDHORZ | WS_VISIBLE | WS_CHILD, 0, 115, 325, 1
    DEFPUSHBUTTON       "更换图片(&C)", IDOK, 175, 120, 63, 14
    PUSHBUTTON          "退出(&X)", IDCANCEL, 252, 120, 62, 14
    CONTROL             IDB_1, IDC_BMP, "Static", SS_BITMAP | WS_VISIBLE | WS_CHILD, 11, 8, 43, 100
    SCROLLBAR           IDC_SCROLL, 9, 122, 122, 12
    LTEXT               "0", IDC_SBVALUE, 138, 124, 34, 10
END

 

对于功能函数,对于此例子也学会了对话框的基本性质,以及如何去把握窗口的风格,DS_MODALFRAME 和 WS_THICKFRAME分别可以控制窗口大小是否可变。

      所有控件中,对于SCROLLBAR的控制略显复杂。垂直滚动条发送WM_VSCROLL,水平的则发送WM_HSCROLL消息,对于这两种消息的处理则是大同小异,传参细节如下:

      wParam低16位是nScrollCode   ;动作码

      wParam高16位是nPos             ;滚动条当前位置

      lParam = hwndScrollCode      ;滚动条控件当前句柄

这些大家都可以在MSDN上更详细的看到

Control.asm源代码如下:

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                .386
                .model  flat, stdcall
                option  casemap :none
        
include         windows.inc
include         user32.inc
includelib      user32.lib
include         kernel32.inc
includelib      kernel32.lib
include         gdi32.inc
includelib      gdi32.lib
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ICO_MAIN        equ     1000h   ;图标
DLG_MAIN        equ     1
IDB_1           equ     1
IDB_2           equ     2
IDC_ONTOP       equ     101
IDC_SHOWBMP     equ     102
IDC_ALOW        equ     103
IDC_MODALFRAME  equ     104
IDC_THICKFRAME  equ     105
IDC_TITLETEXT   equ     106
IDC_CUSTOMTEXT  equ     107
IDC_BMP         equ     108
IDC_SCROLL      equ     109
IDC_VALUE       equ     110
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                .data?
hInstance       dd      ?
hBmp1           dd      ?
hBmp2           dd      ?
dwPos           dd      ?
                .const
szText1         db      "Hello, world!",0
szText2         db      "Win32 Assumbly!",0
szText3         db      "自定义",0
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                .code
_ProcDlgMain    proc    uses ebx edi esi hWnd, uMsg, wParam, lParam
        local   @szBuffer[126]:BYTE     
        
        .if     uMsg == WM_CLOSE
                invoke  EndDialog,hWnd,NULL
                invoke  DeleteObject,hBmp1
                invoke  DeleteObject,hBmp2
        .elseif uMsg == WM_INITDIALOG
                ;====================================设置标题栏图标
                invoke  LoadIcon,hInstance,ICO_MAIN
                invoke  SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
                ;====================================初始化组合框
                invoke  SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText1
                invoke  SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText2
                invoke  SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText3
                invoke  SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_SETCURSEL,0,0
                invoke  GetDlgItem,hWnd,IDC_CUSTOMTEXT
                invoke  EnableWindow,eax,FALSE
                invoke  LoadBitmap,hInstance,IDB_1
                mov     hBmp1,eax
                invoke  LoadBitmap,hInstance,IDB_2
                mov     hBmp2,eax
                ;====================================初始化单选钮和复选框
                invoke  CheckDlgButton,hWnd,IDC_SHOWBMP,BST_CHECKED
                invoke  CheckDlgButton,hWnd,IDC_ALOW,BST_CHECKED
                invoke  CheckDlgButton,hWnd,IDC_THICKFRAME,BST_CHECKED
                ;====================================初始化滚动条
                invoke  SendDlgItemMessage,hWnd,IDC_SCROLL,SBM_SETRANGE,0,100
                
        .elseif uMsg == WM_COMMAND
                mov     eax,wParam
                .if     ax  ==  IDCANCEL
                        invoke  EndDialog,hWnd,NULL
                        invoke  DeleteObject,hBmp1
                        invoke  DeleteObject,hBmp2
                ;====================================更换图片
                .elseif ax  ==  IDOK
                        mov     eax,hBmp1
                        xchg    eax,hBmp2
                        mov     hBmp1,eax
                        invoke  SendDlgItemMessage,hWnd,IDC_BMP,STM_SETIMAGE,IMAGE_BITMAP,eax
                ;===================================="总在最前"
                .elseif ax  ==  IDC_ONTOP
                        invoke  IsDlgButtonChecked,hWnd,IDC_ONTOP
                        .if     eax ==  BST_CHECKED
                                invoke  SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE
                        .else
                                invoke  SetWindowPos,hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE
                        .endif
                ;====================================显示或隐藏图片
                .elseif ax  ==  IDC_SHOWBMP
                        invoke  GetDlgItem,hWnd,IDC_BMP
                        mov     ebx,eax
                        invoke  IsWindowVisible,ebx
                        .if     eax
                                invoke  ShowWindow,ebx,SW_HIDE
                        .else   
                                invoke  ShowWindow,ebx,SW_SHOW
                        .endif
                ;===================================允许和灰化"更换图片"按钮
                .elseif ax  ==  IDC_ALOW
                        invoke  IsDlgButtonChecked,hWnd,IDC_ALOW
                        .if     eax ==  BST_CHECKED
                                mov     ebx,TRUE
                        .else
                                xor     ebx,ebx
                        .endif
                        invoke  GetDlgItem,hWnd,IDOK
                        invoke  EnableWindow,eax,ebx
                ;=================================="模态边框" 还是 "可变边框"
                .elseif ax  ==  IDC_MODALFRAME
                        invoke  GetWindowLong,hWnd,GWL_STYLE
                        and     eax,not WS_THICKFRAME
                        invoke  SetWindowLong,hWnd,GWL_STYLE,eax
                .elseif ax  ==  IDC_THICKFRAME
                        invoke  GetWindowLong,hWnd,GWL_STYLE
                        or      eax,WS_THICKFRAME
                        invoke  SetWindowLong,hWnd,GWL_STYLE,eax
                ;==================================处理下拉式组合框
                .elseif ax  ==  IDC_TITLETEXT
                        shr     eax,16
                        .if     ax  ==  CBN_SELENDOK
                                invoke  SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_GETCURSEL,0,0
                                .if     eax ==  2
                                        invoke  GetDlgItem,hWnd,IDC_CUSTOMTEXT
                                        invoke  EnableWindow,eax,TRUE
                                .else
                                        mov     ebx,eax
                                        invoke  SendDlgItemMessage,hWnd,IDC_TITLETEXT,/
                                                CB_GETLBTEXT,ebx,addr @szBuffer
                                        invoke  SetWindowText,hWnd,addr @szBuffer
                                        invoke  GetDlgItem,hWnd,IDC_CUSTOMTEXT
                                        invoke  EnableWindow,eax,FALSE
                                .endif
                        .endif
                ;=================================在文本框输入文字
                .elseif ax  ==  IDC_CUSTOMTEXT
                        invoke  GetDlgItemText,hWnd,IDC_CUSTOMTEXT,addr @szBuffer,sizeof @szBuffer
                        invoke  SetWindowText,hWnd,addr @szBuffer
                .endif
        ;==========================处理滚动条信息
        .elseif uMsg == WM_HSCROLL
                mov     eax,wParam
                .if     ax  ==  SB_LINELEFT
                        dec     dwPos
                .elseif ax  ==  SB_LINERIGHT
                        inc     dwPos
                .elseif ax  ==  SB_PAGELEFT
                        sub     dwPos,10
                .elseif ax  ==  SB_PAGERIGHT
                        add     dwPos,10
                .elseif ax  ==  SB_THUMBPOSITION || ax == SB_THUMBTRACK ;******
                        mov     eax,wParam
                        shr     eax,16
                        mov     dwPos,eax
                .else
                        mov     eax,TRUE
                        ret
                .endif
                cmp     dwPos,0
                jge     @F
                mov     dwPos,0
                @@:
                cmp     dwPos,100
                jle     @F
                mov     dwPos,100
                @@:
                invoke  SetDlgItemInt,hWnd,IDC_VALUE,dwPos,FALSE
                invoke  SendDlgItemMessage,hWnd,IDC_SCROLL,SBM_SETPOS,dwPos,TRUE ;TRUE表示重绘
        .else
                mov     eax,FALSE
                ret
        .endif
        mov     eax,TRUE
        ret
                
_ProcDlgMain    endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
start:
                invoke  GetModuleHandle,NULL
                mov     hInstance,eax
                invoke  DialogBoxParam,hInstance,DLG_MAIN,NULL,addr _ProcDlgMain,NULL
                invoke  ExitProcess,NULL
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<              
                end     start

注释基本上都写上去了,这个实验本也没有什么技术含量,寒假在家没事的时候做了两遍,出于纪念意义还是贴上去吧!由于图片上传功能暂时关闭,等有时间再把图片贴上去吧

参考文献:罗云彬的windows下32位汇编教程

转载于:https://www.cnblogs.com/kedebug/archive/2010/03/02/2791760.html

实例代码: 第1章(\cha01) 1.1.htm 自动类型转换 1.2.htm 显式类型转换 1.3.htm 提升基本类型为对象 第2章(\cha02) 2.1.htm if语句 2.2.htm switch语句 2.3.htm while循环 2.4.htm do-while循环 2.5.htm for循环 第3章(\cha03) 3.1.htm 遍历数组元素 3.2.htm 改变数组元素 3.3.htm 用对象的方式实现数组 3.4.htm 将数组转换为字符串 3.5.htm 操作数组元素 3.6.htm 实现多维数组 第4章(\cha04) 4.1.htm 求平方根 4.2.htm 求质数 4.3.htm 简单数制转换 4.4.htm 数制转换函数 4.5.htm 实现计算器 第5章(\cha05) 5.1.htm 带开关的时钟 5.2.htm 不同风格的时间显示 5.3.htm 倒计时效果 5.4.htm 模拟时钟 5.5.htm 显示农历日期 5.6.htm 温度计样式时钟 5.7.htm 位置固定的时钟 第6章(\cha06) 6.1.htm HTML事件绑定 6.2.htm 非标准事件绑定 6.3.htm 事件处理器绑定 6.4.htm 使用函数 6.5.htm 直接在表单上调用事件 第7章(\cha07) 代码说明:本章代码只能在Mozilla Firefox中运行。 7.1.htm 事件流 7.2.htm DOM2鼠标事件 7.3.htm 取消默认动作 7.4.htm 创建DOM2事件 第8章(\cha08) 8.1.htm 页面预览 8.2.htm 图像切换 8.3.htm 点亮文本 8.4.htm 鼠标跟随 8.5.htm 鼠标感应 8.6.htm 禁用鼠标按键 第9章(\cha09) 9.1.htm 文字的垂直滚动 9.2.htm 文字的渐隐渐显 9.3.htm 文字的闪烁显示 9.4.htm 文字的随意拖动 9.5.htm 文字的坠落显示 9.6.htm 页面内飘动的文字 9.7.htm 漫天飞舞的文字 9.8.htm 文字下落效果 第10章(\cha10) 10.1.htm 霓虹灯文字 10.2.htm 色彩渐变 10.3.htm 文字的渐大渐小 10.4.htm 文字大小动态变化 10.5.htm 文字变色显示 10.6.htm 打字效果显示 第11章(\cha11) 代码说明:代码11.6.htm需要IE5.5或以上版本支持 11.1.htm 随机显示 11.2.htm 打字效果 11.3.htm UBB代码实例 11.4.htm 从右至左排列的文字 11.5.htm 古汉语文字排版 11.6.htm 蒙古族文字排版 第12章(\cha12) 12.1.htm 文档颜色设置 12.2.htm 上次修改时间 12.3.htm DOM 1中的文档属性与聚集 12.4.htm 访问HTML元素属性 第13章(\cha13) 13.1.htm 按位置访问元素 13.2.htm 按名称访问元素 13.3.htm 动态修改元素内容 13.4.htm 改变的内容 13.5.htm 改变页面样式 第14章(\cha14) 14.1.htm 节点插入与追加 14.2.htm 节点复制 14.3.htm 节点删除与替换 14.4.htm 修改节点内容 第15章(\cha15) 15.1.htm HTML中的表格 15.2.htm 设置表格属性 15.3.htm 操作表格元素 15.4.htm 操作表元 第16章(\cha16) 16.1.htm 验证输入内容是否为空 16.2.htm 验证E-mail地址 16.3.htm 电话号码检测 第17章(\cha17) 17.1.htm 混合表单验证 17.2.htm onchange事件 17.3.htm 按键屏蔽 第18章(\cha18) 18.1.htm 打开窗口 18.2.htm 关闭窗口 18.3.htm 窗口写入 18.4.htm 窗口交互 18.5.htm 提示与警告对话框 第19章(\cha19) 19.1.htm 窗口移动 19.2.htm 改变大小 19.3.htm 窗口滚动 19.4.htm 设置超时 19.5.htm 窗口事件 19.6.htm IE窗口扩展 第20章(\cha20) 20.1.htm 访问框架 20.2.htm 内联框架 20.3.htm 框架间的交叉通信 20.4.htm 嵌套框架交叉通信 第21章(\cha21) 21.1.htm 图片的随机显示 21.2.htm 图像显隐 21.3.htm 图像滚动显示 21.4.htm 探照灯扫描 21.5.htm 多幅图像翻页显示 21.6.htm 水纹效果显示 21.7.htm 全景图效果 21.8.htm 手电效果 21.9.htm 雷达显示效果 第22章(\cha22) 22.1.htm 图像拖动 22.2.htm 按钮控制 22.3.htm 感应鼠标 22.4.htm 花环效果 22.5.htm 流星效果 22.6.htm 图像运动 22.7.htm 图像显示 22.8.htm 图像飞行一 22.9.htm 图像飞行二 第23章(\cha23) 23.1.htm 随机更换页面背景 23.2.htm 用户自选背景之一 23.3.htm 用户自选背景之二 23.4.htm 用户自选背景之三 23.5.htm 页面背景的闪电效果 第24章(\cha24) 24.1.htm 有图像的Media Player 24.2.htm 无图像的Media Player 24.3.htm 有图像的RealPlayer 24.4.htm 无图像的RealPlayer 24.5.htm 播放Flash文件 第25章(\cha25) 25.1.htm 位置固定的对联广告 25.2.htm 随页面滚动的对联广告 25.3.htm 全屏飘动的广告 25.4.htm 循环滚动的多幅广告 25.5.htm 漂浮3D广告 第26章(\cha26) 26.1.htm 基本的下拉菜单 26.2.htm 改进的下拉菜单 26.3.htm 渐显的下拉菜单 第27章(\cha27) 27.1.htm 折叠菜单 27.2.htm 远程菜单 27.3.htm 弹出菜单 第28章(\cha28) 28.1.htm 旋转导航菜单 28.2.htm 隐藏滑动菜单 28.3.htm 仿QQ菜单 28.4.htm 触发型导航菜单 28.5.htm 下拉列表菜单 28.6.htm 树型导航菜单 28.7.htm 变色标题菜单 第29章(\cha29) 29.1.htm 获取文本框中的内容 29.2.htm 显示和修改文字内容(DHTML) 29.3.htm 处理网页表格内容(DHTML) 29.4.htm 显示和修改网页内容(W3C) 29.5.htm 处理网页表格内容(W3C) 29.6.htm 综合应用 第30章(\cha30) 30.1.htm 显示浏览器名称与版本 30.2.htm JavaScript检测 30.3.htm 获取浏览器窗口大小 30.4.htm 设置屏幕对象的尺寸 30.5.htm 有选择地显示图片 30.6.htm 简单的性能检测 30.7.htm 模拟浏览器菜单 第31章(\cha31) 31.1.htm 实现md5加密 31.2.htm 编制自己的加密算法 第32章(\cha32) 代码说明:本章代码都具有一定危害性,可按照页面提示进行操作。 32.1.htm 字符串翻倍 32.2.htm 函数循环交叉调用 32.3.htm 无限递归调用 32.4.htm 构造无限数组 32.5.htm 载入超大图像 32.6.htm 关不掉的对话框 32.7.htm 一直弹出新窗口 第33章(\cha33) 代码说明: 1.代码33.1.htm须使用IE浏览器打开 2.代码33.2.htm须使用Mozilla Firefox浏览器打开 33.1.htm 使用IE处理XML 33.2.htm 使用Mozilla处理XML 33.3.htm XML文件内容分页显示 第34章(\cha34) 34.1.htm 格式化输出 34.2.htm 动态增删记录 第35章(\cha35) 代码说明: 1.对于代码35.1.htm,使用Mozilla Firefox浏览器可直接运行,如果使用IE浏览器,需要在服务器端运行。 2.对于代码35.2.html,需要IIS+PHP+MySQL或Apache+PHP+MySQL环境支持 35.1.htm 读取XML文档 35.2.html 实现联动选择 35.3.htm 实现菜单特效 第36章(\cha36) 代码说明: 1.代码36.1.index.php需要IIS+PHP环境或Apache+PHP环境支持 2.代码Default.aspx需要IIS+ASP.net环境支持 \36.1\ 36.1.index.php 实现简单相册 \36.2\ Default.aspx 实现文本聊天室
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值