Road_7 发表于 2014-4-22 22:44:07

用win32汇编写计算器

学长让我用汇编写个win7系统自带的计算器,然后我是用非模态对话框建的,但是不知道为什么就是不能加载菜单栏,另外,如何在点按钮的同时,显示在EDITTEXTZHONG ,并且进行计算,将结果显示在EDITTEXT中,大家能给点思路吗,主要是输入问题,比如,点7,想缓冲区写入7,在点8,想缓冲区写8,但是在计算时,有如何化为10进制数呢,如何对运算福判断等,真心求助,求帮忙

Road_7 发表于 2014-4-22 23:28:08

   .386
                        .model flat,stdcall
                        option casemap:none
                       
include         windows.inc
include         user32.inc
include                kernel32.inc
includelib        user32.lib
includelib        kernel32.lib


ICO_MAIN        equ        1000h
IDA_MAIN        equ        2000h
IDM_MAIN        equ        2000h
IDM_EDIT        equ        2001h
IDM_LOOK        equ        2003h
IDM_LOOKHELPequ 2004h
IDM_GUANYU        equ        2005h
IDM_FUZHI        equ        2006h
IDM_ZHANTIE       equ 2007h
IDM_OLDRECORDequ 2008h
IDM_STD                equ 2009h
IDM_SCI        equ        2010h
IDM_PRO                equ 2011h
IDM_LISHI        equ        2012h
IDM_TOTAL        equ        2013h
IDM_SHUZI        equ        2014h
IDM_JIBEN        equ        2015h
IDM_CHANGE        equ        2016h
IDM_DATE        equ        2017h
IDM_SHEET        equ        2018h
DLG_MAIN        equ        100
IDC_TEXT        equ        101
IDC_MC        equ                102
IDC_MR        equ                103
IDC_MS        equ                104
IDC_MH        equ                105
IDC_MK        equ                106
IDC_BACK        equ        107
IDC                equ        0
IDC1                equ        1
IDC2                equ        2
IDC3                equ        3
IDC4                equ        4
IDC5                equ        5
IDC6                equ        6
IDC7                equ        7
IDC8                equ        8
IDC9                equ        9
IDC_CE        equ                10
IDC_C                equ        11
IDC_ZHENFU        equ        12
IDC_DOT                equ 13
IDC_ADD                equ 14
IDC_MUL                equ 15
IDC_DIV                equ 16
IDC_SUB        equ        17
IDC_PERCENT        equ 18
IDC_GENHAO        equ        19
IDC_DENGHAO        equ 20
IDC_BILIE                equ 21

                        .data?
                       
hInstance    dd?
hMenu               dd ?
hAccelerator dd ?
hDlg               dd       ?               
                       
                       
                       
               
                       
                       
                        .code
szInit        db ' adsad' ,0                       
szend        db '[%d]',0ah,0dh

_ADD                proc
                        ret

_ADD                endp

_SUB        proc
_SUB        endp

_DIV        proc
_DIV        endp

_MUL        proc
_MUL        endp

_ProcDlgMain        procuses ebx esi edi hWnd,wMsg,wParam,lParam
                                local@szBuffer:byte
                               
                                mov eax ,wMsg
                        .if eax ==WM_CLOSE
                                invoke         EndDialog , hWnd,NULL
                               
                               
                        .elseifeax == WM_INITDIALOG
                                               
                                invoke LoadMenu ,hInstance,IDM_MAIN
                                mov hMenu , eax
                                invoke wsprintf , addr @szBuffer ,addrszInit
                       
                        .elseifeax == WM_COMMAND
                                        mov eax ,wParam
                                        .if ax == IDC_ADD
                                                call _ADD
                                        .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
                                mov hDlg        ,eax
                        invoke ExitProcess,NULL
                        end start
       
这是我的代码,但是不知道为什么显示不了菜单栏




































志华 发表于 2014-4-24 21:02:35

是不是菜单没定义好,应该是可以显示的。
得到数字用GetDlgItemInt.
一个按钮对应一个运算符,你只要知道按下的是哪个按钮就知道是什么运算符了。

Road_7 发表于 2014-4-24 22:11:25

志华 发表于 2014-4-24 21:02 static/image/common/back.gif
是不是菜单没定义好,应该是可以显示的。
得到数字用GetDlgItemInt.
一个按钮对应一个运算符,你只要知道 ...

对于同一个文本编辑框,怎么样才能让里面的内容双行显示,还是说用静态的文本框

志华 发表于 2014-4-24 23:08:40

不太明白你的意思,要换行的话就在后面加0ah,0dh.

为之疯狂 发表于 2014-4-24 23:29:53

虽然看不懂,但是还是看了。
页: [1]
查看完整版本: 用win32汇编写计算器