开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4727|回复: 31
收起左侧

用WIN32汇编写的计算器

 关闭 [复制链接]
结帖率:25% (1/4)
发表于 2011-4-26 23:41:42 | 显示全部楼层 |阅读模式   山西省忻州市
只能个位加,减,乘,除,不会文本连接所以只能写到这了,以后再做更新.只用了2个函数(SetDlgItemText,GetDlgItemInt)见笑了,高手勿喷,代码如下:

子窗口控件定义.rc:

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include  <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN  0x1000 //图标
#define DLG_MAIN  1
#define IDC_TEXT  1201 //文本框1
#define IDC_TEXT2  1202
#define IDC_A1   1201 //按钮1
#define IDC_A2   1002 //按钮2
#define IDC_A3   1003 //按钮3
#define IDC_A4   1004 //按钮4
#define IDC_A5   1005 //按钮5
#define IDC_A6   1006 //按钮6
#define IDC_A7   1007 //按钮7
#define IDC_A8   1008 //按钮8
#define IDC_A9   1009 //按钮9
#define IDC_A0   1010 //按钮0
#define IDC_ADD   1011 //按钮+
#define IDC_SUB   1012 //按钮-
#define IDC_MUL   1013 //按钮*
#define IDC_DIV   1014 //按钮/
#define IDC_C   1015 //按钮C
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON  "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 50, 50, 150, 150
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "计算器"
FONT 9, "宋体"
{
RTEXT "0", IDC_TEXT,3,30,30,10,WS_BORDER   //文本框1
RTEXT "0",IDC_TEXT2,10,14,130,15,WS_BORDER //文本框2
PUSHBUTTON "1", IDC_A1, 0, 50, 30, 14, //按钮1
PUSHBUTTON "2", IDC_A2, 40, 50, 30, 14 //按钮2
PUSHBUTTON "3", IDC_A3, 80, 50, 30, 14 //按钮3
PUSHBUTTON "+", IDC_ADD, 120, 50, 30, 14 //按钮+
PUSHBUTTON "4", IDC_A4, 0, 70, 30, 14 //按钮4
PUSHBUTTON "5", IDC_A5, 40, 70, 30, 14 //按钮5
PUSHBUTTON "6", IDC_A6, 80, 70, 30, 14 //按钮6
PUSHBUTTON "-", IDC_SUB, 120, 70, 30, 14 //按钮-
PUSHBUTTON "7", IDC_A7, 0, 90, 30, 14 //按钮7
PUSHBUTTON "8", IDC_A8, 40, 90, 30, 14 //按钮8
PUSHBUTTON "9", IDC_A9, 80, 90, 30, 14 //按钮9
PUSHBUTTON "*", IDC_MUL, 120, 90, 30, 14 //按钮*
PUSHBUTTON "0", IDC_A0, 0, 110, 30, 14 //按钮0
PUSHBUTTON "/", IDC_DIV, 40, 110, 30, 14 //按钮/
DEFPUSHBUTTON "=", IDOK, 80, 110, 30, 14 //按钮等于
PUSHBUTTON "C", IDC_C, 120, 110, 30, 14 //按钮c
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.ASM文件:
  .386
  .model flat, stdcall
  option casemap :none
include  windows.inc
include  user32.inc
includelib user32.lib
include  kernel32.inc
includelib kernel32.lib
ICO_MAIN equ  1000h ;图标
DLG_MAIN equ  1
IDC_TEXT equ  1201
IDC_TEXT2 equ  1202
IDC_A1  equ  1201 ;按钮1
IDC_A2 equ  1002 ;按钮2
IDC_A3 equ  1003 ;按钮3
IDC_A4 equ  1004 ;按钮4
IDC_A5 equ  1005 ;按钮5
IDC_A6 equ  1006 ;按钮6
IDC_A7 equ  1007 ;按钮7
IDC_A8 equ  1008 ;按钮8
IDC_A9 equ  1009 ;按钮9
IDC_A0 equ  1010 ;按钮0
IDC_ADD equ  1011 ;按钮+
IDC_SUB equ  1012 ;按钮-
IDC_MUL equ  1013 ;按钮*
IDC_DIV equ  1014 ;按钮/
IDC_C  equ  1015 ;按钮C
  .data?

hInstance dd  ?
lpshuju   dd  0
lpshuju1    dd    0
lpshuju2    dd    0
lpshuju3    dd    0
lpshuju4    dd    0
  .code
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam

  local @szbuffer[128]:BYTE
  mov eax,wMsg
  .if eax == WM_CLOSE
   invoke EndDialog,hWnd,NULL
  .elseif eax == WM_INITDIALOG
   invoke LoadIcon,hInstance,ICO_MAIN
   invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
  .elseif eax == WM_COMMAND
   mov eax,wParam
   .if ax == IDOK
    invoke GetDlgItemInt,hWnd,IDC_TEXT,offset lpshuju3,FALSE
    mov lpshuju3,eax
    .if lpshuju3 == 1            ;加法
     invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
     mov lpshuju2,eax
     mov ecx,lpshuju2
     ADD lpshuju,ecx
     invoke SetDlgItemInt,hWnd,IDC_TEXT2,lpshuju,FALSE
    .elseif lpshuju3 == 2          ;减法
     invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
     mov lpshuju2,eax
     mov ecx,lpshuju2
     SBB lpshuju,ecx
     invoke SetDlgItemInt,hWnd,IDC_TEXT2,lpshuju,FALSE
    .elseif lpshuju3 == 3                              ;乘法
     invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
     MUL lpshuju
     invoke SetDlgItemInt,hWnd,IDC_TEXT2,AX,FALSE
    .elseif lpshuju3 == 4                              ;除法
     invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
     mov lpshuju4,eax
     mov edx,0
     mov eax,lpshuju
     mov ecx,lpshuju4
     DIV ecx
     invoke SetDlgItemInt,hWnd,IDC_TEXT2,EAX,FALSE
    .endif        
   .elseif ax == IDC_A1               
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,1,FALSE   
   .elseif ax == IDC_A2               
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,2,FALSE   
   .elseif ax == IDC_A3               
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,3,FALSE   
   .elseif ax == IDC_A4               
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,4,FALSE
   .elseif ax == IDC_A5
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,5,FALSE   
   .elseif ax == IDC_A6               
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,6,FALSE   
   .elseif ax == IDC_A7            
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,7,FALSE   
   .elseif ax == IDC_A8            
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,8,FALSE   
   .elseif ax == IDC_A9               
    invoke SetDlgItemInt,hWnd,IDC_TEXT2,9,FALSE   
   .elseif ax == IDC_ADD
    invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
    mov lpshuju,eax
    invoke SetDlgItemInt,hWnd,IDC_TEXT,1,FALSE  
    invoke SetDlgItemText,hWnd,IDC_TEXT2,addr @szbuffer
   .elseif ax == IDC_SUB               
    invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
    mov lpshuju,eax
    invoke SetDlgItemInt,hWnd,IDC_TEXT,2,FALSE
    invoke SetDlgItemText,hWnd,IDC_TEXT2,addr @szbuffer
   .elseif ax == IDC_MUL
    invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
    mov lpshuju,eax
    invoke SetDlgItemInt,hWnd,IDC_TEXT,3,FALSE
    invoke SetDlgItemText,hWnd,IDC_TEXT2,addr @szbuffer
   .elseif ax == IDC_DIV
    invoke GetDlgItemInt,hWnd,IDC_TEXT2,offset lpshuju1,FALSE
    mov lpshuju,eax
    invoke SetDlgItemInt,hWnd,IDC_TEXT,4,FALSE  
    invoke SetDlgItemText,hWnd,IDC_TEXT2,addr @szbuffer
   .elseif ax == IDC_C                           
    invoke SetDlgItemText,hWnd,IDC_TEXT,addr @szbuffer  
    invoke SetDlgItemText,hWnd,IDC_TEXT2,addr @szbuffer
   .endif
  .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,offset _ProcDlgMain,NULL
  invoke ExitProcess,NULL
  end start
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

成品软件图:

计算器.jpg

源码和文件下载:

计算器.rar (3.35 KB, 下载次数: 30)

评分

参与人数 3好评 +1 精币 +3 收起 理由
bigeq1 + 2 奉上小小红包希望笑纳
冰点 + 1 看来还是有成绩的呀.继续努力啊
a6842402 + 1 感谢你的支持,精易有你更精彩

查看全部评分

结帖率:25% (1/4)
 楼主| 发表于 2011-4-26 23:43:56 | 显示全部楼层   山西省忻州市
补充下,只能个位加,减,乘,除, 也就是 1位的.下载下附件看下就知道了,等我做出完整的还会给大家发出来的,打个小广告:诚心找个WIN32汇编老师联系QQ:(97383723) 昵称:猪小弟!
回复 支持 反对

使用道具 举报

发表于 2011-4-27 00:20:43 | 显示全部楼层   湖南省怀化市
楼主是个强人居然用win32汇编编程厉害佩服。这个需要太多的耐心了啊。
回复 支持 反对

使用道具 举报

结帖率:89% (8/9)
发表于 2011-4-27 06:56:45 | 显示全部楼层   黑龙江省齐齐哈尔市
上面的代码是什么啊? 看上去  很强悍
回复 支持 反对

使用道具 举报

结帖率:94% (15/16)

签到天数: 14 天

发表于 2011-4-27 10:37:33 | 显示全部楼层   广东省深圳市
厉害啊,看来牛人还是很多的啊
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2011-4-27 12:59:37 | 显示全部楼层   贵州省六盘水市
很牛逼!!!!!
回复 支持 反对

使用道具 举报

发表于 2011-4-27 12:59:58 | 显示全部楼层   山西省太原市
鹅鹅鹅鹅路过
回复 支持 反对

使用道具 举报

发表于 2011-4-27 13:20:00 | 显示全部楼层   黑龙江省哈尔滨市
看看,,,,,,,,,,,,,
回复 支持 反对

使用道具 举报

发表于 2011-5-5 21:21:35 | 显示全部楼层   广东省江门市
侃侃。   瞧瞧!!
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 8 天

发表于 2011-5-13 08:27:21 | 显示全部楼层   江苏省徐州市
牛人啊,不过暂时还看不懂 {:3_232:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表