zoukankan      html  css  js  c++  java
  • 读书笔记——Windows环境下32位汇编语言程序设计(5)模态对话框

    资源可以用VC之类的生成,然后拷贝出来。

    例如:每一个MFC工程都有一个resource.h,没有做任何修改时,这个resource.h文件是原来自带的。当对资源进行过修改添加之类的时,新添加的资源的ID都会被加入的这个工程的resource.h中。在Win32汇编的RC文件中,开头包含的那个resource.h没有做过任何修改,所以要把新添加的资源的ID用#define宏添加进来。

    #include <resource.h>
    
    #define IDD_DLG 130
    #define IDC_BTN_TEST 1001
    #define IDI_ICO_HEHE 1002
    
    IDI_ICO_HEHE ICON	"hehe.ico"
    
    IDD_DLG DIALOGEX 0, 0, 316, 90
    STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "尝试对话框"
    FONT 8, "MS Shell Dlg", 400, 0, 0x1
    BEGIN
        DEFPUSHBUTTON   "确定",IDOK,205,69,50,14
        PUSHBUTTON      "取消",IDCANCEL,259,69,50,14
        PUSHBUTTON      "测试",IDC_BTN_TEST,113,18,50,14
    END
    对于ASM文件,这个自然是要动动手写了。

    对于DialogBoxParam的回调函数,一定要写好判断逻辑。这个不比VC里好调试。

    另外应用程序实例用的是dd,不过还好写错了编译会有提示。

    不要忘了定义一下在RC文件里的控件ID,不过还好没写编译时也会有提示。

    .386
    .model flat,stdcall
    option casemap:none
    
    include windows.inc
    include kernel32.inc
    includelib kernel32.lib
    include user32.inc
    includelib user32.lib
    
    IDD_DLG equ 130
    IDC_BTN_TEST equ 1001
    IDI_ICO_HEHE equ 1002
    
    .data
    gszCaption	db	'Caption',0
    gszText		db	'Text',0
    .data?
    ghInstance	dd	?
    
    .code
    DlgFunc proc uses ebx edi esi hWnd,wMsg,wParam,lParam
    	
    	mov eax,wMsg
    	.if eax==WM_CLOSE
    		invoke EndDialog,hWnd,NULL
    	.elseif eax==WM_INITDIALOG
    		invoke LoadIcon,ghInstance,IDI_ICO_HEHE
    		invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
    	.elseif eax==WM_COMMAND
    		mov eax,wParam
    		.if ax==IDOK
    			invoke EndDialog,hWnd,NULL
    		.elseif ax==IDC_BTN_TEST
    			invoke MessageBox,hWnd,addr gszText,addr gszCaption,MB_OK
    		.endif
    	.else
    			mov eax,FALSE
    			ret
    	.endif
    	
    	mov eax,TRUE
    	ret
    DlgFunc endp
    
    start:
    	invoke GetModuleHandle,NULL
    	mov ghInstance,eax
    	invoke DialogBoxParam,ghInstance,IDD_DLG,NULL,addr DlgFunc,NULL
    	invoke ExitProcess,NULL
    end start


  • 相关阅读:
    单例类
    UITableView汇总
    JVM虚拟机——垃圾收集算法
    集合框架 HashMap 的扩容机制, ConcurrnetHashMap 的原理
    java判断两个单链表是否相交
    java中Comparator 和 Comparable的区别
    String getProperty(String key, String def)
    JAVA 单步调试快捷键
    Stanford Word Segmenter使用
    使用ifstream和getline读取文件内容[c++]
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202146.html
Copyright © 2011-2022 走看看