【原创】玩笑程序2,看看你是否能点中"否"按钮
2005-07-02 18:56
316 查看
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Name : Dialog1.asm
;Function: 玩笑程序,看看你是否能点中"否"按钮
;Author : Purple Endurer
;Version : 0.1
;-------------------------------------------
;Date Summary
;2005-07-02 Created
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/shell32.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/shell32.lib
DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
btnNo_NewWndProc PROTO :DWORD, :DWORD, :DWORD, :DWORD
MoveCurosrToBtnYes PROTO
m2m MACRO d1, d2
push d2
pop d1
ENDM
.const
IDC_btnYES equ 3000
IDC_btnNO equ 3001
IDC_btnAbout equ 3002
.data
szDlgName db "MyDialog",0
szAppName db "程序设计语言用户调查",0
szAgree db "你的回答真令我高兴,因为"
szAboutMsg db 13, 10, "☆ 我就是由【Purple Endurer】用纯32位汇编语言编写的!☆", 0
szAboutTitle db "汇编语言用户调查程序 1.0", 0
szStaticTxtName db "STATIC", 0
szWarning db "你必须接受调查!", 0
g_dwReplied dword 0
.data?
hInstance HINSTANCE ?
g_hWnd HWND ?
g_hbtnYes HWND ?
g_hbtnNo HWND ?
g_btnYesRect RECT <>
btnNo_OldWndProc dd ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, ADDR szDlgName, NULL, addr DlgProc, NULL
Invoke ExitProcess,eax
;==================================================================
DlgProc proc hWnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
;------------------------------------------------------------------
.IF uMsg == WM_INITDIALOG
push hWnd
pop g_hWnd
;Get the handle of btnNo
invoke GetDlgItem, hWnd, IDC_btnNO
mov g_hbtnNo, eax
;-----------------------------------------
; Subclass btnNo!
;-----------------------------------------
invoke SetWindowLong,eax,GWL_WNDPROC, addr btnNo_NewWndProc
mov btnNo_OldWndProc, eax
;Get the handle of btnYes
invoke GetDlgItem, hWnd, IDC_btnYES
mov g_hbtnYes, eax
invoke SetFocus, eax
.ELSEIF uMsg == WM_CLOSE
.if g_dwReplied==0
invoke MessageBox, hWnd, ADDR szWarning, ADDR szAppName,
MB_OK + MB_ICONWARNING
.else
invoke EndDialog, hWnd, NULL
.endif
.ELSEIF uMsg == WM_COMMAND
.if lParam
;pushad
mov edx,wParam
mov eax,edx
shr edx,16
.IF dx == BN_CLICKED
.if ax == IDC_btnNO
invoke MoveCurosrToBtnYes
invoke PostMessage, hWnd, WM_COMMAND, IDC_btnYES, BM_CLICK;WM_LBUTTONDOWN
.elseif ax == IDC_btnYES
.IF g_dwReplied==0
invoke CreateWindowEx, WS_EX_STATICEDGE or WS_EX_WINDOWEDGE,/
ADDR szStaticTxtName, ADDR szAgree,/
WS_CHILD or WS_VISIBLE or SS_LEFT,/
15, 90, 230, 85, hWnd, 3, hInstance, NULL
mov g_dwReplied, 1
.ENDIF
.else
invoke ShellAbout, hWnd, ADDR szAboutTitle, ADDR szAboutMsg, 0
.endif
.ENDIF
;popad
.endif
.ELSE
mov eax, FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
;===========================================================================
btnNo_NewWndProc PROC hBtn: DWORD, uMsg: DWORD, wParam: DWORD, lParam: DWORD
;===========================================================================
.if uMsg==WM_MOUSEMOVE
invoke MoveCurosrToBtnYes
.elseif uMsg==WM_SETFOCUS
invoke PostMessage, g_hbtnYes,WM_SETFOCUS, hBtn, NULL
.elseif uMsg==WM_KEYDOWN
invoke PostMessage, g_hbtnYes, WM_KEYDOWN, wParam, lParam
.else
invoke CallWindowProc, btnNo_OldWndProc, hBtn, uMsg, wParam, lParam
ret
.endif
xor eax, eax
ret
btnNo_NewWndProc endp
;======================================================================
MoveCurosrToBtnYes proc
;======================================================================
invoke SetFocus, g_hbtnYes
invoke GetWindowRect, g_hbtnYes, addr g_btnYesRect
mov ebx, g_btnYesRect.left
add ebx, 30
mov ecx, g_btnYesRect.top
add ecx, 10
invoke SetCursorPos, ebx, ecx
ret
MoveCurosrToBtnYes endp
end start
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;rsrc.rc
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include "/masm32/include/resource.h"
#define IDC_btnYES 3000
#define IDC_btnNO 3001
#define IDC_btnAbout 3002
#define IDC_Question 3003
MyDialog DIALOG 10, 10, 215, 70
STYLE 0x0001 | DS_CENTER | WS_CAPTION | DS_SYSMODAL |
WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
| WS_POPUP | WS_SYSMENU | WS_EX_TOOLWINDOW
CAPTION "程序设计语言用户调查"
{
DEFPUSHBUTTON "是", IDC_btnYES, 131, 10, 52, 13
PUSHBUTTON "否", IDC_btnNO, 131, 30, 52, 13
PUSHBUTTON "[&A]关于…", IDC_btnAbout, 131, 50, 52, 13
LTEXT "问题:/r/r你喜欢用汇编语言写程序吗?",IDC_Question,10, 10, 110, 55
}
;Name : Dialog1.asm
;Function: 玩笑程序,看看你是否能点中"否"按钮
;Author : Purple Endurer
;Version : 0.1
;-------------------------------------------
;Date Summary
;2005-07-02 Created
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/shell32.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/shell32.lib
DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
btnNo_NewWndProc PROTO :DWORD, :DWORD, :DWORD, :DWORD
MoveCurosrToBtnYes PROTO
m2m MACRO d1, d2
push d2
pop d1
ENDM
.const
IDC_btnYES equ 3000
IDC_btnNO equ 3001
IDC_btnAbout equ 3002
.data
szDlgName db "MyDialog",0
szAppName db "程序设计语言用户调查",0
szAgree db "你的回答真令我高兴,因为"
szAboutMsg db 13, 10, "☆ 我就是由【Purple Endurer】用纯32位汇编语言编写的!☆", 0
szAboutTitle db "汇编语言用户调查程序 1.0", 0
szStaticTxtName db "STATIC", 0
szWarning db "你必须接受调查!", 0
g_dwReplied dword 0
.data?
hInstance HINSTANCE ?
g_hWnd HWND ?
g_hbtnYes HWND ?
g_hbtnNo HWND ?
g_btnYesRect RECT <>
btnNo_OldWndProc dd ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, ADDR szDlgName, NULL, addr DlgProc, NULL
Invoke ExitProcess,eax
;==================================================================
DlgProc proc hWnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
;------------------------------------------------------------------
.IF uMsg == WM_INITDIALOG
push hWnd
pop g_hWnd
;Get the handle of btnNo
invoke GetDlgItem, hWnd, IDC_btnNO
mov g_hbtnNo, eax
;-----------------------------------------
; Subclass btnNo!
;-----------------------------------------
invoke SetWindowLong,eax,GWL_WNDPROC, addr btnNo_NewWndProc
mov btnNo_OldWndProc, eax
;Get the handle of btnYes
invoke GetDlgItem, hWnd, IDC_btnYES
mov g_hbtnYes, eax
invoke SetFocus, eax
.ELSEIF uMsg == WM_CLOSE
.if g_dwReplied==0
invoke MessageBox, hWnd, ADDR szWarning, ADDR szAppName,
MB_OK + MB_ICONWARNING
.else
invoke EndDialog, hWnd, NULL
.endif
.ELSEIF uMsg == WM_COMMAND
.if lParam
;pushad
mov edx,wParam
mov eax,edx
shr edx,16
.IF dx == BN_CLICKED
.if ax == IDC_btnNO
invoke MoveCurosrToBtnYes
invoke PostMessage, hWnd, WM_COMMAND, IDC_btnYES, BM_CLICK;WM_LBUTTONDOWN
.elseif ax == IDC_btnYES
.IF g_dwReplied==0
invoke CreateWindowEx, WS_EX_STATICEDGE or WS_EX_WINDOWEDGE,/
ADDR szStaticTxtName, ADDR szAgree,/
WS_CHILD or WS_VISIBLE or SS_LEFT,/
15, 90, 230, 85, hWnd, 3, hInstance, NULL
mov g_dwReplied, 1
.ENDIF
.else
invoke ShellAbout, hWnd, ADDR szAboutTitle, ADDR szAboutMsg, 0
.endif
.ENDIF
;popad
.endif
.ELSE
mov eax, FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
;===========================================================================
btnNo_NewWndProc PROC hBtn: DWORD, uMsg: DWORD, wParam: DWORD, lParam: DWORD
;===========================================================================
.if uMsg==WM_MOUSEMOVE
invoke MoveCurosrToBtnYes
.elseif uMsg==WM_SETFOCUS
invoke PostMessage, g_hbtnYes,WM_SETFOCUS, hBtn, NULL
.elseif uMsg==WM_KEYDOWN
invoke PostMessage, g_hbtnYes, WM_KEYDOWN, wParam, lParam
.else
invoke CallWindowProc, btnNo_OldWndProc, hBtn, uMsg, wParam, lParam
ret
.endif
xor eax, eax
ret
btnNo_NewWndProc endp
;======================================================================
MoveCurosrToBtnYes proc
;======================================================================
invoke SetFocus, g_hbtnYes
invoke GetWindowRect, g_hbtnYes, addr g_btnYesRect
mov ebx, g_btnYesRect.left
add ebx, 30
mov ecx, g_btnYesRect.top
add ecx, 10
invoke SetCursorPos, ebx, ecx
ret
MoveCurosrToBtnYes endp
end start
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;rsrc.rc
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include "/masm32/include/resource.h"
#define IDC_btnYES 3000
#define IDC_btnNO 3001
#define IDC_btnAbout 3002
#define IDC_Question 3003
MyDialog DIALOG 10, 10, 215, 70
STYLE 0x0001 | DS_CENTER | WS_CAPTION | DS_SYSMODAL |
WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
| WS_POPUP | WS_SYSMENU | WS_EX_TOOLWINDOW
CAPTION "程序设计语言用户调查"
{
DEFPUSHBUTTON "是", IDC_btnYES, 131, 10, 52, 13
PUSHBUTTON "否", IDC_btnNO, 131, 30, 52, 13
PUSHBUTTON "[&A]关于…", IDC_btnAbout, 131, 50, 52, 13
LTEXT "问题:/r/r你喜欢用汇编语言写程序吗?",IDC_Question,10, 10, 110, 55
}
相关文章推荐
- 【原创】玩笑程序1,看看你是否能点中"否"按钮
- JS:三个"点按钮出随机背景色的DIV"的程序
- 如何去除SDI程序中Commandbar上的"新建"按钮
- 解决Installer重新安装补丁错误-"无法打开此修补程序包。请确认该修补程序包存在,并且您可以访问它,或者与应用程序供应商联系,以确认这是否是一个有效的 Windows Installer 修补程序包。"
- 广播接收机制监听用户点击卸载按钮,得到该程序的包名,查看是否是要删除的程序,如果是,删除~~~~
- 【C#机房重构】命名空间"Microsoft"中不存在类型或命名空间名称"Office"(是否缺少程序引用?)
- 【原创】QTP中,录制web程序,录制不到表单、按钮等对象的一种问题解决方法
- ["心里有鬼"大调查]看看你心仪的人与你真正想要的人是否一致? 并祝所有CSDN的会员三.八节 快乐!
- 在企业管理器中操作出现"未找到提供的程序,该程序未正确安装"的解决办法[Lin Shaohua原创]
- 如何去除SDI程序中Commandbar上的"新建"按钮
- 命名空间"Microsoft"中不存在类型或命名空间名称"Office"(是否缺少程序引用?)
- Java 写一个方法判断一个字符串是否对称 "asdfgasdfg"、编写一个程序,将下面的一段文本中的各个单词的字母顺序翻转,
- 【原创】Ubuntu 12.04开机弹出"检测到系统程序出现问题"的临时解决方法
- 微信小程序 判断接口是否可用并给出"弹出提示框"提示
- 【原创】Ubuntu 12.04开机弹出"检测到系统程序出现问题"的临时解决方法
- // .编写一道程序题输入长和宽之后点击按钮可弹出长方形面积。 var long=prompt("请输入长方形的长"); var wide=prompt("请输入长方形的宽"); var area=(
- 【原创】LS程序 - 判定文档在当前视图下是否唯一
- [原创]VB.net技巧之四------为按钮添加 "确认" 对话框
- 小时钟程序-原创Java
- java 程序题 判断两个字符串是否是同构的(isIsomorphic)