• 读书笔记——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


  • 相关阅读:
    倒排索引在MYSQL,PostgreSQL,ElasticSearch中的设计思想
    MySQL Group Replication: What Is It? Replicated Database State Machine & Paxos implementation
    Redis 6.0 docker Cluster
    What is the "Docker Subnet" used for?
    Windows MYSQL 8.0 或者 5.7 查找my.ini 修改端口号
    Kerberos Network Authentication Service Window & Mac
    协合新能源集团有限公司 | 红海 eHR BPMN
    基于 springBoot 实现webSocket方式的扫码登录
    Python中IO编程-StringIO和BytesIO
    Neo4j基本入门
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202146.html
Copyright © 2020-2023  润新知