现在的位置: 首页 > 综合 > 正文

Win32汇编–非模式对话框实例

2018年02月09日 ⁄ 综合 ⁄ 共 2508字 ⁄ 字号 评论关闭
;----------------------
;非模式对话框程序
;----------------------


.386
.model flat,stdcall
option casemap:none
WinMain proto:DWORD,:DWORD,:DWORD,:DWORD
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib






IDD_DIALOG_MML equ 101
IDC_BUTTON_ADD equ 1001
IDC_BUTTON_DEC equ 1002
IDM_EXIT equ 40001
IDC_EDIT equ 1000


.data
ClassName db "DLGCLASS",0
DlgName db "ModelessDialog",0
szShowInf db "该消息框在处理WM_DESTROY消息时产生",0
szMsgCap db "对话框退出",0
szMsgCre db "对话框产生",0
szShowCre db "该消息再处理WM_CREAT消息时产生",0




.data?
dwVal dd ?
hInstance HINSTANCE ?
hDlg dd ?


.code
;---------主程序段----------
start:
  invoke GetModuleHandle,NULL    ;创建窗口第一步:得到应用程序的句柄
  mov hInstance ,eax
 
  invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
  invoke ExitProcess,NULL

WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    
.if uMsg==WM_DESTROY
invoke MessageBox,NULL,addr szShowInf,addr szMsgCap,MB_OK
invoke PostQuitMessage,NULL
.elseif uMsg==WM_CREATE
invoke MessageBox,NULL,addr szShowInf,addr szMsgCap,MB_OK
.elseif uMsg==WM_INITDIALOG
               mov dwVal,11
invoke SetDlgItemInt,hWnd,IDC_EDIT,dwVal,FALSE


.elseif uMsg==WM_COMMAND
mov eax,wParam

.if ax==IDC_BUTTON_ADD
               inc dwVal
invoke SetDlgItemInt,hWnd,IDC_EDIT,dwVal,FALSE
.elseif ax==IDC_BUTTON_DEC
               dec dwVal
invoke SetDlgItemInt,hWnd,IDC_EDIT,dwVal,FALSE
.elseif ax==IDM_EXIT
invoke DestroyWindow,hWnd
.endif
.elseif uMsg==WM_CLOSE
invoke DestroyWindow,hWnd    ;模式对话框中使用EndDialog
.else
mov eax,FALSE
ret
.endif

mov eax,TRUE
ret


WndProc endp
;-非模式对话框--消息循环由用户建立 


WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

LOCAL msg:MSG
invoke CreateDialogParam,hInst,IDD_DIALOG_MML,NULL,WndProc,NULL
mov hDlg,eax
invoke ShowWindow,hDlg,SW_SHOWNORMAL
invoke UpdateWindow,hDlg
;------设置输入焦点
invoke GetDlgItem,hDlg,IDC_BUTTON_ADD
invoke SetFocus,eax


;------非模式对话框的消息循环
.WHILE TRUE
invoke GetMessage,ADDR msg,NULL,0,0
.BREAK .IF(!eax)
invoke IsDialogMessage,hDlg,ADDR msg
.IF eax==FALSE
invoke TranslateMessage,ADDR msg
invoke DispatchMessage,ADDR msg
.endif

.endw

mov eax,msg.wParam


ret


WinMain endp

end start








#include<resource.h>
#define IDD_DIALOG_MML 101
#define IDR_MENU_DLG 102
#define IDC_EDIT 1000
#define IDC_BUTTON_ADD 1001
#define IDC_BUTTON_DEC 1002
#define IDM_EXIT 40001
#define IDC_STATIC -1


//Dialog----在对话框中添加菜单
//非模式对话框在资源文件中和模式对话框无区别


IDD_DIALOG_MML DIALOG DISCARDABLE 0,0,170,60
STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU
CAPTION "Modeless Dialog"
MENU IDR_MENU_DLG
FONT 10,"System"
BEGIN


      PUSHBUTTON "增  加(&c)",IDC_BUTTON_ADD,21,37,50,11
      EDITTEXT  IDC_EDIT,7,7,156,15,ES_AUTOHSCROLL
      GROUPBOX "操作",IDC_STATIC,7,26,156,27
      PUSHBUTTON "减  少(&c)",IDC_BUTTON_DEC,95,37,50,11
END


IDR_MENU_DLG MENU DISCARDABLE
BEGIN
      POPUP "File"
      BEGIN
         MENUITEM "E&xit",IDM_EXIT
      END
END
      

抱歉!评论已关闭.