AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

学写基于对话框的程序

51自学网 http://www.51zixue.net

 

        .386; 声明使用386指令系统
        .model flat,stdcall;声明内存的寻址方式
        option casemap:none;声明是否对大小写敏感

        ;上面3行可以认为是固定的,必须的

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

        ;..........此处声明自己定义的函数,上面的这个是对话框的主函数(必须有),名字可以换成别的

        include masm32includewindows.inc
        include masm32includeuser32.inc
        include masm32includekernel32.inc
        includelib masm32libuser32.lib
        includelib masm32libkernel32.lib

        ;...........此处包含需要的头文件,上面几个是最长用到的

        .data
        DlgName db "MyDialog",0
        AppName db "My own dialog",0
        ;............这里定义各个预先赋值的变量,db是定义一个字节长,dw是定义一个字长等等,还有很多类型的宏定义,包含在
        windows.h中。

        .data?
        hInstance HINSTANCE ?
        ;............这里定义各个变量,但是是没有预先赋值的

.        const
        ;..........如果需要预先定义一些常量,放在这段里面,用关键字equ定义

        .code ;以下就是代码段,注意函数也是放在代码段里面的!
        start:;不一定非要使用start,可以是任何的字符串如begin,entry等等。
        invoke GetModuleHandle, NULL
        mov hInstance,eax
        invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
        invoke ExitProcess,eax

        上面的几行也是比较固定的,invoke是用来调用函数的,用过VB的人都知道call,这就相当于那个命令

        DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
        ;..............这是你主要集中精力要写的地方

        DlgProc endp
        end start;主要和上面的start对应

        基本上,你可以把上面的绿色部分当作模版使用,只需要在.data和.data?以及.const段增加你所需要的变量和常量就可以了。
        剩下的任务就是写上面红色的部分,也就是处理各个消息。

        我们来分析几个消息,在调用DialogBoxPrarm创建对话框后,对话框会收到WM_INITDIALOG即对话框初始化消息,uMsgz这个参数
        接受到消息。在这个程序中,我们用GetDlgItem这个函数来取得编辑框控件的句柄,然后调用SetFocus来将焦点设置在它上面。
        注意这些函数都是API函数,这些函数的意义都可以在msdn中找到。

        当按下对话框右上角的关闭按钮时,会产生WM_CLOSE,必须处理这个函数,否则不能用×来关闭对话框(这是由于内置的函数没
        有设计处理这个消息),而对于最大化最小化等消息则有默认的处理。

        当按下对话框上的按钮时会产生WM_COMMAND消息,并且wParam中传递的是控件的ID。根据不同的ID完成不同的功能,在本例中如
        果是IDC_BUTTON这个ID说明是显示编辑框内容的控件按钮被按下,这样就执行GetDlgItemText函数得到编辑框的内容,然后用
        messagebox来显示。如果是IDC_EXIT说明按下了“退出程序”这个按钮,则执行EndDialog这个函数退出程序。

    程序就是通过处理各种消息完成的!在更大的程序里面也都是这种结结构,只不过处理的消息更多而已。

 
 

上一篇:汇编语言中‘子程序’的设计方法  下一篇:处理程序多重启动