| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
汇编写基于对话框的程序
作者:佚名    文章来源:网络    点击数:    更新时间:2006-12-9
  用汇编写基于对话框的程序,可以和写VB程序一样清晰简单,并且相当多的程序都是这样的结构。用VB写的所以程序几乎都是这样的

    。设计程序界面
        和在VC中一样,界面(对话框已经各种控件)一般是以资源的方式存在的。编辑资源文件完全可以使用VC的资源编辑器。但是熟悉
        一下资源文件的写法及意义是编程所必须的。下面是一个资源文件的例子:
        #include "\masm32\include\resource.h"
        #define IDC_ED99v 3000
        #define IDC_BUTTON 3001
        #define IDC_EX99v 3002
        MyDialog DIALOG 10, 10, 205, 60
        STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
        WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
        CAPTION "我的对话框"
        {
        ED99vTEXT IDC_ED99v, 15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
        DEFPUSHBUTTON "显示编辑框中的内容", IDC_BUTTON, 141,10,52,13
        PUSHBUTTON "退出程序", IDC_EX99v, 141,26,52,13
        }

        记住,在使用QE时为了使得编译成功,必须将它保存为rsrc.rc这个文件名(使用命令行就无所谓了)。选择Project->Compile         Resource File。资源文件就编译成功了,就可以被连接使用了。建议你用VC的资源编辑器打开这个资源文件看看。

        第一行的#include "\masm32\include\resource.h"就和C一样,是包含一个头文件,这个文件中有各种常数的定义,如        
        PUSHBUOTTON等,感兴趣的话,可以打开这个文件看看。

        接下来定义了一些常数,就和C中的用法一样,是为了增强程序的可读性。

        "MyDialog DIALOG 10, 10, 205, 60"这一句用DIALOG这个关键字定义一个名为MyDialog的对话框,名字当然可以随便取。后面           的4个数字是对话框的位置大小,一般是在资源编辑器中调试。

        "STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED |         DS_MODALFRAME | DS_3DLOOK "是描述对话框的风格的。如WS_MINIMIZEBOX是说有最小化按钮。DS_3DLOOK是说对话框是3D外形
        等等。这些一般在资源编辑器中改动,各种常数的意义,可以在MSDN中查找。

        CAPTION "我的对话框"就是指定对话框的标题是"我的对话框"

        再下面用{}框起来的就是对话框中的各个控件。这个例子中用到了ED99vTEXT编辑框控件,PUSHBUTTON按钮控件,
        DEFPUSHBUTTON默认按钮控件(默认选中状态),IDC_ED99v,IDC_EX99v,IDC_BUTTON分别是他们3个的ID号,注意上面的定义,是不
        能相同的。不一定非要使用#define来预先定义,使用数字也可以,前者可以增强程序的可读性。其他的很多控件如单选框,复
        选框等等的使用可以在资源编辑器下编辑后查看源代码获得。

        程序的界面就设计完了,接下来是设计程序。

 

  程序的设计
        我们来做一个简单的程序,在按下“显示编辑框中的内容”这个按钮时,将弹出一个消息框显示现在编辑框中的内容。按“退出
       程序”按钮将退出程序。

        .386
        .model flat,stdcall
        option casemap:none

        DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD

        include \masm32\include\windows.inc
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib

.        data
        DlgName db "MyDialog",0
        AppName db "My own dialog",0

        .data?
        hInstance HINSTANCE ?
        buffer db 512 dup(?)

        .const
        IDC_ED99v equ 3000
        IDC_BUTTON equ 3001
        IDC_EX99v equ 3002

        .code
        start:
        invoke GetModuleHandle, NULL
        mov hInstance,eax
        invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
        invoke ExitProcess,eax

        DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
        .IF uMsg==WM_IN99vDIALOG
        invoke GetDlgItem, hWnd,IDC_ED99v
        invoke SetFocus,eax
        .ELSEIF uMsg==WM_CLOSE
        invoke EndDialog, hWnd,NULL
        .ELSEIF uMsg==WM_COMMAND
        mov eax,wParam
        .IF eax==IDC_BUTTON
        invoke GetDlgItemText,hWnd,IDC_ED99v,ADDR buffer,512
        invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
        .ELSEIF ax==IDC_EX99v
        invoke EndDialog, hWnd,NULL
        .ENDIF
        .ELSE
        mov eax,FALSE
        ret
        .ENDIF
        mov eax,TRUE
        ret
        DlgProc endp
        end start

 

[1] [2] 下一页


  • 上一篇文章: 没有了

  • 下一篇文章:
  • 相关文章