|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
状态栏学习
----------------------------------
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include Comctl32.inc
includelib Comctl32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000
DLG_MAIN equ 1000
IDM_MAIN equ 1000
IDM_EXIT equ 1104
IDM_MENUHELP equ 1300
ID_STATUSBAR equ 1
ID_EDIT equ 2
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
hWinStatus dd ?
hWinEdit dd ?
lpsz1 dd ?
lpsz2 dd ?
.const
szClass db 'EDIT',0
szFormat0 db '%02d:%02d:%02d',0
szFormat1 db '字节数:%d',0
sz1 db '插入',0
sz2 db '改写',0
dwStatusWidth dd 60,140,172,-1
dwMenuHelp dd 0,IDM_MENUHELP,0,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Resize proc
local @stRect:RECT,@stRect1:RECT
invoke MoveWindow,hWinStatus,0,0,0,0,TRUE ;自动设置状态栏子窗口位置
invoke GetWindowRect,hWinStatus,addr @stRect ;获取状态栏的位置
invoke GetClientRect,hWinMain,addr @stRect1 ;获取主窗口客户区的左上角和右下角坐标
mov ecx,@stRect1.right
sub ecx,@stRect1.left ;得到宽度
mov eax,@stRect1.bottom
sub eax,@stRect1.top ;得到高度
sub eax,@stRect.bottom
add eax,@stRect.top ;编辑框高度:客户区高度减去状态栏高度
invoke MoveWindow,hWinEdit,0,0,ecx,eax,TRUE ;移动编辑框的位置
ret
_Resize endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
local @szBuffer[128]:byte
local @stST:SYSTEMTIME
local @stPoint:POINT,@stRect:RECT
mov eax,wMsg
;********************************************************************
.if eax == WM_TIMER
invoke GetLocalTime,addr @stST ;得到本地时间
movzx eax,@stST.wHour
movzx ebx,@stST.wMinute
movzx ecx,@stST.wSecond
invoke wsprintf,addr @szBuffer,addr szFormat0,eax,ebx,ecx ;格式化字符窜放入缓冲区
invoke SendMessage,hWinStatus,SB_SETTEXT,0,addr @szBuffer ;发送消息:设置时间到第一个项目里面
;********************************************************************
.elseif eax == WM_CLOSE
invoke KillTimer,hWnd,1
invoke EndDialog,hWnd,NULL
;********************************************************************
.elseif eax == WM_INITDIALOG
mov eax,hWnd
mov hWinMain,eax
invoke CreateStatusWindow,WS_CHILD OR WS_VISIBLE OR SBS_SIZEGRIP,NULL,hWinMain,ID_STATUSBAR ;创建状态栏子窗口,ID_STATUSBAR为ID
mov hWinStatus,eax
invoke SendMessage,hWinStatus,SB_SETPARTS,4,offset dwStatusWidth ;将状态栏分成按照dwStatusWidth里的4个数据划分长度(1,2,3,4)
mov lpsz1,offset sz1
mov lpsz2,offset sz2
invoke SendMessage,hWinStatus,SB_SETTEXT,2,lpsz1 ;发送消息:设置第三个项目的字符窜lpsz1:插入(0,1,2,3)
invoke CreateWindowEx,WS_EX_CLIENTEDGE,addr szClass,NULL,\ ;创建编辑框
WS_CHILD or WS_VISIBLE or ES_MULTILINE or ES_WANTRETURN or WS_VSCROLL or ES_AUTOHSCROLL,\
0,0,0,0,hWnd,ID_EDIT,hInstance,NULL
mov hWinEdit,eax
call _Resize ;调整程序布局
invoke SetTimer,hWnd,1,300,NULL ;定时器:0.3s频率
;********************************************************************
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDM_EXIT
invoke EndDialog,hWnd,NULL
.elseif ax == ID_EDIT
invoke GetWindowTextLength,hWinEdit ;获取编辑框的字符窜长度
invoke wsprintf,addr @szBuffer,addr szFormat1,eax ;格式化字符窜后存入缓冲区
invoke SendMessage,hWinStatus,SB_SETTEXT,1,addr @szBuffer ;将长度数据写入状态栏的第二个项目中
.endif
;********************************************************************
.elseif eax == WM_MENUSELECT
invoke MenuHelp,WM_MENUSELECT,wParam,lParam,lParam,hInstance,hWinStatus,offset dwMenuHelp
.elseif eax == WM_SIZE ;当窗口第一次显示和改变时将收到该消息
call _Resize
;********************************************************************
; 检测用户在第3栏的按鼠标动作并将文字在“插入”和“改写”之间切换
;********************************************************************
.elseif eax == WM_NOTIFY
.if wParam == ID_STATUSBAR ;CreateStatusWindow中的第一个参数ID
mov eax,lParam
mov eax,[eax + NMHDR.code] ;得到CODE通知码(将方括号里面的地址相加后的地址数据存入eax)
.if eax == NM_CLICK ;当鼠标左键按下
invoke GetCursorPos,addr @stPoint ;获取当前鼠标坐标
invoke GetWindowRect,hWinStatus,addr @stRect ;得到窗口左上角和右下角坐标
mov eax,@stRect.left
mov ecx,eax
add eax,140
add ecx,172
.if (@stPoint.x >= eax) && (@stPoint.x <= ecx) ;大于状态栏第二个项目小于第三个项目
mov eax,lpsz1
xchg eax,lpsz2
mov lpsz1,eax ;数据互换
invoke SendMessage,hWinStatus,SB_SETTEXT,2,lpsz1 ;将字符窜写入状态栏第三个项目
.endif
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
状态栏学习.rc
----------------------------------------------
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN 1000
#define DLG_MAIN 1000
#define IDM_MAIN 1000
#define IDM_OPEN 1101
#define IDM_SAVEAS 1102
#define IDM_PAGESETUP 1103
#define IDM_EXIT 1104
#define IDM_FIND 1201
#define IDM_REPLACE 1202
#define IDM_SELFONT 1203
#define IDM_SELCOLOR 1204
#define IDM_MENUHELP 1300
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 150, 180, 250, 130
MENU IDM_MAIN
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "状态栏示例"
FONT 9, "宋体"
{
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDM_MAIN menu discardable
BEGIN
popup "文件(&F)"
BEGIN
menuitem "打开文件(&O)...", IDM_OPEN
menuitem "文件另存为(&C)...",IDM_SAVEAS
menuitem separator
menuitem "页面设置(&P)...",IDM_PAGESETUP
menuitem separator
menuitem "退出(&X)", IDM_EXIT
END
popup "查看(&V)"
BEGIN
menuitem "查找字符串(&S)...",IDM_FIND
menuitem "替换字符串(&R)...",IDM_REPLACE
menuitem separator
menuitem "选择字体(&F)...",IDM_SELFONT
menuitem "选择颜色(&B)...",IDM_SELCOLOR
END
END
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
stringtable discardable
BEGIN
IDM_MENUHELP "包含文件操作的命令"
IDM_MENUHELP+1 "包含操作视图的命令"
IDM_FIND "在窗口中搜索文字"
IDM_REPLACE "在窗口中搜索文字并替换"
IDM_SELFONT "选择窗口中文字使用的字体"
IDM_SELCOLOR "选择窗口的背景颜色"
IDM_OPEN "打开需要编辑的文件"
IDM_SAVEAS "以另外一个文件名保存文件"
IDM_PAGESETUP "选择打印机以及设置页边距、纸张大小等打印参数"
IDM_EXIT "退出本程序"
END
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
评分
-
查看全部评分
|