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.mzph.cn/news/753897.shtml

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

相关文章

哪些AI知识库比较好用?企业高管必看!

在科技进步的时代&#xff0c;工作效率和知识管理是企业面临的两大挑战。而AI知识库&#xff0c;正是解决这个问题的利剑。接下来&#xff0c;我将与你分享三款好用的AI知识库平台&#xff0c;感兴趣就往下看吧。 首先&#xff0c;我们不得不提的是Helplook。这是一个根据人工智…

如何在Spring Boot应用中高效集成Spring Cache与Redis实现高性能缓存机制

一、引言 在现代Web应用程序开发中&#xff0c;缓存是一种常见的优化手段&#xff0c;能够显著提升系统性能&#xff0c;减轻数据库负载。Spring Cache作为Spring框架内建的缓存抽象层&#xff0c;提供了一种简单易用的方式来统一处理缓存逻辑。而Redis作为一种高性能的内存键…

【兆易创新GD32H759I-EVAL开发板】 TLI(TFT LCD Interface)用法详细介绍

大纲 1. 引言 2. TLI外设特点 3. TLI硬件架构 4. TLI寄存器功能 5. TLI的配置和使用步骤 6. TLI图层概念 7. 图像处理和显示优化 8. 基于GD32H759I-EVAL开发板的TLI应用示例 1. 引言 在当今的嵌入式系统设计中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的应…

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…

spring-boot-starter-thymeleaf加载外部html文件

在Spring MVC中&#xff0c;我们可以使用Thymeleaf模板引擎来实现加载外部HTML文件。 1.Thymeleaf介绍 Thymeleaf是一种现代化的服务器端Java模板引擎&#xff0c;用于构建漂亮、可维护且易于测试的动态Web应用程序。它适用于与Spring框架集成&#xff0c;并且可以与Spring M…

每日OJ题_牛客HJ12 字符串反转(IO型OJ)

目录 牛客HJ12 字符串反转 解析代码 牛客HJ12 字符串反转 字符串反转_牛客题霸_牛客网 解析代码 #include <iostream> using namespace std; int main() {string str "";cin >> str;int left 0, right str.size() - 1;while (left < right){ch…

算法简单小技巧

主页&#xff1a;xiaocr_blog 1.最小公倍数和最大公约数 #include<iostream> using namespace std; int main(){int a,b;cin>>a>>b;int r a%b;while (r!0){a b;b r;r a%b;}cout<<b<<endl;return 0 ; } #include<iostream> using nam…

Flink源码解析(1)TM启动

网络传输模型 首先在看之前,回顾一下akka模型: Flink通讯模型—Akka与Actor模型-CSDN博客 注:ActorRef就是actor的引用,封装好了actor 下面是jm和tm在通讯上的概念图: RpcGateway 不理解网关的作用,可以先移步看这里:网关_百度百科 (baidu.com) 用于定义RPC协议,是…

#每天一道面试题# 什么是MySQL的回表查询

MySQL中的索引按照物理存储的方式分为聚集索引和非聚集索引&#xff1b; 聚集索引索引和数据存储在一起&#xff0c;B树的叶子节点就是表数据&#xff0c;如果通过聚集索引查询数据&#xff0c;直接就可以查询出我们想要的数据&#xff1b;非聚集索引B树的叶子节点存储的是主键…

WebSocket 鉴权实践:从入门到精通

WebSocket 作为实时通信的利器&#xff0c;越来越受到开发者的青睐。然而&#xff0c;为了确保通信的安全性和合法性&#xff0c;鉴权成为不可或缺的一环。本文将深入探讨 WebSocket 的鉴权机制&#xff0c;为你呈现一揽子的解决方案&#xff0c;确保你的 WebSocket 通信得心应…

【C语言】【牛客】BC161 大吉大利,今晚吃鸡

文章目录 题目思路代码呈现 题目 链接: link 思路 这道题的本质其实不是考察C语言的运用&#xff0c;而是来考察我们对通项公式的总结。 我们可以看一下下面这道汉诺塔问题 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&…

【全网最详细】ComfyUI下,Insightface安装指南-聚梦小课堂

&#x1f96e;背景 ComfyUI下使用IP-adapter下的faceID模型的时候&#xff0c;大家可能会遇到如下错误&#xff1a; Error occurred when executing InsightFaceLoader: No module named insightface File "F:\ComfyUI-aki\execution.py", line 151, in recursive_…

VUE3 自定义指令

概念 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令 (Custom Directives)。自定义指令主要是为了重用涉及普通元素的底层 DOM 访问的逻辑。 指令钩子 一个指令的定义对象可以提供几种钩子函数 (都是可选的)&#xff1a;示…

MySQL调优之SQL语句

1 慢 SQL 语句的几种常见诱因 1.1 无索引、索引失效导致慢查询 如果在一张几千万数据的表中以一个没有索引的列作为查询条件&#xff0c;大部分情况下查询会非常耗时&#xff0c;这种查询毫无疑问是一个慢 SQL 查询。所以对于大数据量的查询&#xff0c;我们需要建立适合的索…

凝思操作系统离线安装mysql和node

PS&#xff1a;下面这就是国产凝思的界面,测试版本是V6.0.80&#xff0c;第一次听说这种系统&#xff0c;于是去官网下载部署包&#xff0c;下面是地址 注意:这个系统如果没有激活&#xff0c;ip都不会有&#xff0c;这样文件都不能传到服务器&#xff0c;xshell这些工具都连不…

自托管状态页面工具Kener

什么是 Kener &#xff1f; Kener 是开源的 Node.js 状态页面工具&#xff0c;旨在轻松监控服务和处理事故。它提供了一个时尚且用户友好的界面&#xff0c;简化了对服务中断的跟踪&#xff0c;并改善了我们在事故期间的沟通方式。而最好的部分是&#xff0c;Kener 与 GitHub 无…

hosts文件丢失了怎么办?

hosts文件的位置&#xff1a;C:\Windows\System32\drivers\etc 丢失了恢复的方法&#xff1a; 在“管理员&#xff1a;命令提示符中输入&#xff1a; &#xff08;winR 然后cmd&#xff09; for /f %P in (dir %windir%\WinSxS\hosts /b /s) do copy %P %windir%\System32\d…

天题赛座位分配(pta团体天梯题c++简易版)

天梯赛每年有大量参赛队员&#xff0c;要保证同一所学校的所有队员都不能相邻&#xff0c;分配座位就成为一件比较麻烦的事情。为此我们制定如下策略&#xff1a;假设某赛场有 N 所学校参赛&#xff0c;第 i 所学校有 M[i] 支队伍&#xff0c;每队 10 位参赛选手。令每校选手排…

超实用!免费软件站大盘点,总有一款适合你

相信用Mac电脑的同学都知道一个网站MacWK&#xff0c;可以白嫖几乎所有常用软件&#xff0c;不用付费&#xff0c;但不好的消息是在2022年10月宣布关站&#xff0c;小编从此走上了开源免费的道路&#xff0c;尽管不太好用&#xff0c;奈何口袋木有钱&#xff0c;经过小编的不断…

找出字符串中第一个匹配项的下标-力扣

纯自己手写 int strStr(char* haystack, char* needle) {int haylenstrlen(haystack);int nelenstrlen(needle);if(strlen(haystack)<strlen(needle)) return -1;int slow0;//用于标记从haystack哪个字符开始比较int fast0;//用于标记haystack中正在进行比较的字符int ne…