首页
社区
课程
招聘
[求助]关于创建多界面程序问题.....
发表于: 2006-10-28 21:21 4065

[求助]关于创建多界面程序问题.....

2006-10-28 21:21
4065
在win32汇编中,使用DialogBoxParam只是创建一个单界面程序,如图:


只是一个模块对话框,一个单界面下然后在点一个按钮执行,那么,另外的程序界面如图:


这个是可以折叠的,请问该怎么实现?

下面我尝试写了一个,但是有错误:

                .386
                .model flat, stdcall
                option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN        equ                1000        ;图标
DLG_MAIN        equ                1000
DLG_MAIN2 equ      1000
IDC_OK   equ      1001
.data?
hInstance        dd                ?
.data
szOK db '测试',0
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;创建第一个对话框
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain 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,hInstance,ICO_MAIN
        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_OK   ;在消息列队这里,当执行IDC_OK的时候
   invoke        GetModuleHandle,NULL
mov        hInstance,eax       
invoke        DialogBoxParam,hInstance,DLG_MAIN2,NULL,\
           offset _ProcDlgMain1,NULL          ;创建第二个对话框               
        .endif
        .else
mov        eax,FALSE
ret
.endif
mov        eax,TRUE
ret
_ProcDlgMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;第二个对话框开始执行
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DlgMain        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,hInstance,ICO_MAIN
        invoke        SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.elseif        eax == WM_COMMAND
        mov        eax,wParam
.if        ax == IDOK
        invoke        EndDialog,hWnd,NULL                       
.endif
.else
mov        eax,FALS               
ret
.endif
mov        eax,TRUE
ret
_DlgMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke        GetModuleHandle,NULL
mov        hInstance,eax
invoke        DialogBoxParam,hInstance,DLG_MAIN,NULL,\
          offset _ProcDlgMain,NULL
invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end        start

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 261
活跃值: (162)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
2
RadASM中有Tab模版,你可以参考一下.

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL ts:TC_ITEM
mov eax,uMsg
.if eax==WM_COMMAND
         ...  
.elseif eax==WM_INITDIALOG
;Create the tabs
invoke GetDlgItem,hWin,IDC_TAB1
mov hTab,eax
mov ts.imask,TCIF_TEXT
mov ts.lpReserved1,0
mov ts.lpReserved2,0
mov ts.iImage,-1
mov ts.lParam,0
mov ts.pszText,offset TabTitle1
mov ts.cchTextMax,sizeof TabTitle1
invoke SendMessage,hTab,TCM_INSERTITEM,0,addr ts
mov ts.pszText,offset TabTitle2
mov ts.cchTextMax,sizeof TabTitle2
invoke SendMessage,hTab,TCM_INSERTITEM,1,addr ts
mov ts.pszText,offset TabTitle3
mov ts.cchTextMax,sizeof TabTitle3
invoke SendMessage,hTab,TCM_INSERTITEM,2,addr ts
;Create the tab dialogs
invoke CreateDialogParam,hInstance,IDD_TAB1,hTab,addr Tab1Proc,0
mov hTabDlg,eax
invoke CreateDialogParam,hInstance,IDD_TAB2,hTab,addr Tab2Proc,0
mov hTabDlg[4],eax
invoke CreateDialogParam,hInstance,IDD_TAB3,hTab,addr Tab3Proc,0
mov hTabDlg[8],eax
.elseif eax==WM_CLOSE
invoke EndDialog,hWin,NULL
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret

DlgProc endp
2006-10-28 21:54
0
游客
登录 | 注册 方可回帖
返回
//