win32汇编弹出对话框

之前书上有一个win32 asm 的odbc例子,它有一个窗体,可以执行sql;下面看一下弹出一个录入数据的对话框;

之前它在.code段包含2个单独的asm文件,增加第三个,增加的这个里面是弹出对话框的窗口过程,

    include        _ListView.asm
    include        _RecordSet.asm
    include         input.asm

input.asm,

_InputDlg	proc	uses ebx edi esi,hWnd,uMsg,wParam,lParammov	eax,uMsg.if	eax ==	WM_INITDIALOG.elseif	eax ==	WM_CLOSEinvoke	EndDialog,hWnd,NULL.elsemov	eax,FALSEret.endifmov	eax,TRUEret_InputDlg	endp

资源文件odbc.rc里面增加一段,

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include	<resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define	ICO_MAIN		1000
#define	DLG_MAIN		2000
#define IDC_CONN_STR	2001
#define	IDC_CONN		2002
#define	IDC_DISCONN		2003
#define	IDC_SQL			2004
#define	IDC_EXEC		2005
#define	IDC_LIST		2006
#define	IDC_INFO		2007
#define IDC_COMMIT		2008
#define IDC_ROLLBACK	2009
#define IDC_INPUT       2010
#define	DLG_INPUT		3000#define	IDC_GRPID    3000
#define	IDC_NAME    3001
#define	IDC_MOBILE    3002
#define	IDC_SEX    3003
#define	IDC_COMPANY    3004
#define	IDC_ADDR    3005
#define	IDC_PHONE    3006
#define	IDC_POST    3007
#define	IDC_MEMO    3008
#define IDC_INPUTOK 3009//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN	icon	"Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 51, 78, 465, 237
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "ODBC数据库操作例子"
FONT 9, "宋体"
{EDITTEXT IDC_CONN_STR, 65, 5, 290, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOPPUSHBUTTON "连接(&C)", IDC_CONN, 359, 4, 50, 14PUSHBUTTON "断开(&D)", IDC_DISCONN, 412, 4, 50, 14, WS_DISABLED | WS_TABSTOPEDITTEXT IDC_SQL, 40, 22, 261, 12, ES_AUTOHSCROLL | WS_DISABLED | WS_BORDER | WS_TABSTOPDEFPUSHBUTTON "执行(&E)", IDC_EXEC, 306, 21, 50, 14, BS_DEFPUSHBUTTON | WS_DISABLED | WS_TABSTOPPUSHBUTTON "提交(&M)", IDC_COMMIT, 359, 21, 50, 14, WS_DISABLED | WS_TABSTOPPUSHBUTTON "回滚(&R)", IDC_ROLLBACK, 412, 21, 50, 14, WS_DISABLED | WS_TABSTOPPUSHBUTTON "录入(&I)", IDC_INPUT, 412, 51, 50, 14, WS_TABSTOPCONTROL "", IDC_LIST, "SysListView32", 13 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 2, 56, 460, 179LTEXT "SQL语句", -1, 5, 24, 34, 8LTEXT "ODBC连接字符串", -1, 5, 8, 60, 8LTEXT "", IDC_INFO, 5, 38, 455, 18
}DLG_INPUT DIALOG 51, 78, 465, 237
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "录入数据"
FONT 9, "宋体"
{LTEXT "组id", -1, 5, 5, 34, 8LTEXT "姓名:", -1, 5, 35, 34, 8LTEXT "手机:", -1, 5, 65, 34, 8LTEXT "性别:", -1, 5, 95, 34, 8LTEXT "单位:", -1, 5, 125, 34, 8LTEXT "地址:", -1, 5, 155, 34, 18LTEXT "座机:", -1, 5, 185, 34, 8LTEXT "邮编:", -1, 5, 215, 34, 8LTEXT "备注:", -1, 5, 245, 34, 18EDITTEXT IDC_GRPID, 65, 5, 290, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_NAME, 65, 35, 290, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_MOBILE, 65, 65, 261, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_SEX, 65, 95, 290, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_COMPANY, 65, 125, 290, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_ADDR, 65, 155, 261, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_PHONE, 65, 185, 290, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_POST, 65, 215, 290, 12, WS_BORDER | WS_TABSTOPEDITTEXT IDC_MEMO, 65, 245, 261, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOPPUSHBUTTON "确定(&Q)", IDC_INPUTOK, 412, 21, 50, 14, WS_TABSTOP}//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DLG_MAIN DIALOG 51, 78, 465, 237,这是原来的主对话框的资源描述;DLG_INPUT DIALOG 51, 78, 465, 237,这是弹出的对话框的资源描述,这是新加的;

主对话框上增加一个按钮,

     PUSHBUTTON "录入(&I)", IDC_INPUT, 412, 51, 50, 14, WS_TABSTOP

 点击时弹出input对话框;

资源文件里增加,

    #define IDC_INPUT       2010
    #define    DLG_INPUT        3000

odbc.asm的等值定义里增加,

    DLG_INPUT       equ     3000
    IDC_INPUT       equ     2010

这是之前程序的弹出主对话框的语句,

    invoke    DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,0

    DLG_MAIN,是对话框资源标识,_ProcDlgMain是对话框的窗口过程;
 

在之前的主对话框窗口过程的消息处理分支的WM_COMMAND处理分支下面增加IDC_INPUT按钮的处理,

.if    eax ==    WM_COMMAND
            mov    eax,wParam

            .if    ax ==    IDC_CONN_STR
。。。。。。
            .elseif    ax ==    IDC_SQL
。。。。。。
            .elseif    ax ==    IDC_CONN
。。。。。。
            .elseif    ax ==    IDC_DISCONN
。。。。。。
            .elseif    ax ==    IDC_INPUT
                invoke    DialogBoxParam,hInstance,DLG_INPUT,NULL,offset _InputDlg,NULL
            .endif

当点击IDC_INPUT按钮时,执行

    invoke    DialogBoxParam,hInstance,DLG_INPUT,NULL,offset _InputDlg,NULL

    _InputDlg是弹出对话框的窗口过程;

如果不小心加或写错.endif,如下图有2个.endif, 就会出现下图错误,

odbc.asm(286) : fatal error A1011: directive must be in control block

    指令必须在控制块中; .if ...... .endif ,是一个控制块;

点击新加的按钮后弹出如下界面,

有时间继续; 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/549347.html

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

相关文章

一文快速掌握docker的理念和基本使用

写在文章开头 写于一个周末&#xff0c;在复盘梳理文章时候发现这一篇关于早期了解docker时记录的文档&#xff0c;仔细阅读了一下&#xff0c;为了保证文章更加清晰以便读者使用。故再次重新一次梳理一次&#xff0c;通过这篇文章&#xff0c;你将会对docker的基本理念和基础…

MATLAB的使用(一)

一&#xff0c;MATLAB的编程特点 a,语法高度简化&#xff1b; b,脚本式解释型语言&#xff1b; c,针对矩阵的高性能运算&#xff1b; d,丰富的函数工具箱支持&#xff1b; e,通过matlab本体构建跨平台&#xff1b; 二&#xff0c;MATLAB的界面 工具栏:提供快捷操作编辑器…

window 查看特定端口占用并停掉

要查看Windows上特定端口的占用情况并停止相关进程&#xff0c;你可以使用以下步骤&#xff1a; 查看端口占用&#xff1a; 首先&#xff0c;你可以使用netstat命令来查看特定端口的占用情况。假设你想要查看端口号为8080的情况&#xff0c;你可以运行以下命令&#xff1a; net…

Unity类银河恶魔城学习记录10-14 p102 Applying damage to skills and clean up源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic;…

Jenkins流水线将制品发布到Nexus存储库

1、安装jenkins&#xff08;建议别用docker安装&#xff0c;坑太多&#xff09; docker run -d -p 8089:8080 -p 10241:50000 -v /var/jenkins_workspace:/var/jenkins_home -v /etc/localtime:/etc/localtime --name my_jenkins --userroot jenkins/jenkins:2.449 坑1 打开x…

免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;直接改进即可&#x1f680;&#x1f680;&#x1f…

设计模式学习笔记 - 设计原则与思想总结:2.运用学过的设计原则和思想完善之前性能计数器项目

概述 在 《设计原则 - 10.实战&#xff1a;针对非业务的通用框架开发&#xff0c;如何做需求分析和设计及如何实现一个支持各种统计规则的性能计数器》中&#xff0c;我们讲解了如何对一个性能计数器框架进行分析、设计与实现&#xff0c;并且实践了一些设计原则和设计思想。当…

Axure 中继器的Repeater属性的使用

dataCount 中继器当中存在多少条数据&#xff0c;总数。 visibleltemCount 中继器列表中可见项数量&#xff0c;也就是当前页面显示的数量。 pageCount 获取中继器分页的总数量&#xff0c;即能够获取分页后共有多少页。 pageIndex 获取中继器当前显示的页码

攻防世界新手模式例题(Web)

PHP2 首先我们查看页面&#xff0c;查看前端代码 发现均没有什么有效信息&#xff0c;由题目可知&#xff0c;此问题与php相关&#xff0c;于是我们可以看一下他的index.php文件 查看时用?index.phps 补充知识&#xff1a;phps文件就是php的源代码文件&#xff0c;通常用于…

Javaweb学习记录(二)web开发入门(请求响应)

第一个基于springboot的web请求程序 通过创建一个带有springboot的spring项目&#xff0c;项目会自动生成一个程序启动类&#xff0c;该类启动时会启动该整个项目&#xff0c;而我们需要写一个web请求类&#xff0c;要求在本地浏览器上发送请求后&#xff0c;浏览器显示Hello&…

Chrome历史版本下载地址:Google Chrome Older Versions Download (Windows, Linux Mac)

最近升级到最新版本Chrome后发现页面居然显示错乱,是在无语, 打算退回原来的版本, 又发现官方只提供最新的版本下载, 为了解决这个问题所有收集了Chrome历史版本的下载地址分享给大家. Google Chrome Windows version 32-bit VersionSizeDate104.0.5112.10279.68 MB2022-05-30…

day03vue学习

day03 一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.综合案例-小黑记账清单 列表渲染添加/删除饼图渲染 3.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 4.综合案例-小兔仙首页 拆分模块-局部注册结构样式完善…