按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
60; 65; 110; 1
AUTORADIOBUTTON 〃模态边框(&Modal Frame)〃; IDC_MODALFRAME;
65; 70; 100; 12; WS_TABSTOP
AUTORADIOBUTTON 〃可变边框(&Thick Frame)〃; IDC_THICKFRAME;
65; 85; 100; 12; WS_TABSTOP
GROUPBOX 〃标题栏文字〃; …1; 180; 5; 125; 100; BS_GROUPBOX
BOBOX IDC_TITLETEXT; 190; 20; 105; 70; CBS_DROPDOWNLIST | WS_TABSTOP
LTEXT 〃自定义文字:〃; …1; 190; 40; 105; 10
EDITTEXT IDC_CUSTOMTEXT; 190; 55; 105; 12
LTEXT 〃请在此选择显示在标题栏上面的文字,或者选择“自定义”后自行输入〃;
…1; 191; 73; 105; 26; WS_BORDER
CONTROL 〃〃; …1; 〃Static〃; SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE;
5; 110; 300; 1
DEFPUSHBUTTON 〃更换图片(&C)〃; IDOK; 200; 115; 50; 14
PUSHBUTTON 〃退出(&X)〃; IDCANCEL; 255; 115; 50; 14
CONTROL IDB_1; IDC_BMP; 〃Static〃; SS_BITMAP | WS_CHILD | WS_VISIBLE;
5; 5; 40; 95
SCROLLBAR IDC_SCROLL; 6; 119; 125; 10
LTEXT 〃0〃; IDC_VALUE; 138; 120; 50; 8
}
编译后的Control。exe运行后的界面如图5。6所示。
图5。6中的子窗口控件分别是GROUPBOX①,AUTOCHECBOX②,SS_ETCHEDHORZ风格的Static类③,AUTORADIOBUTTON④,BOBOX⑤,EDITTEXT⑥,WS_BORDER风格LTEXT⑦,DEFPUSHBUTTON⑧,SS_BITMAP风格的Static类⑨和滚动条⑩。
图5。6 子窗口控件使用的例子
程序有这些功能:按下“更换图片”按钮⑧可以切换图片框⑨的图片;在组合框⑤中可以选择更换标题栏的文字,选“自定义”的时候可以激活文本编辑框⑥并输入自定义文字;默认状态下对话框是可以调整大小的,如果将单选钮④切换到“模态边框”,那么大小就无法调整。Control。asm源代码如下:
。386
。model flat; stdcall
option casemap :none
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; Include 文件定义
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
include windows。inc
include user32。inc
includelib user32。lib
include kernel32。inc
includelib kernel32。lib
include gdi32。inc
includelib gdi32。lib
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; Equ 等值定义
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
ICO_MAIN equ 1000h
DLG_MAIN equ 1
IDB_1 equ 1
IDB_2 equ 2
IDC_ONTOP equ 101
IDC_SHOWBMP equ 102
IDC_ALOW equ 103
IDC_MODALFRAME equ 104
IDC_THICKFRAME equ 105
IDC_TITLETEXT equ 106
IDC_CUSTOMTEXT equ 107
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第5章 使用资源
5。4 对 话 框(5)
IDC_BMP equ 108
IDC_SCROLL equ 109
IDC_VALUE equ 110
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 数据段
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
。data?
hInstance dd ?
hBmp1 dd ?
hBmp2 dd ?
dwPos dd ?
nst
szText1 db 'Hello; World!';0
szText2 db '嘿,你看到标题栏变了吗?';0
szText3 db '自定义';0
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 代码段
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
de
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_ProcDlgMain proc uses ebx edi esi hWnd;wMsg;wParam;lParam
local @szBuffer'128':byte
mov eax;wMsg
。if eax WM_CLOSE
invoke EndDialog;hWnd;NULL
invoke DeleteObject;hBmp1
invoke DeleteObject;hBmp2
。elseif eax WM_INITDIALOG
;********************************************************************
; 设置标题栏图标
;********************************************************************
invoke LoadIcon;hInstance;ICO_MAIN
invoke SendMessage;hWnd;WM_SETICON;ICON_BIG;eax
;********************************************************************
; 初始化组合框
;********************************************************************
invoke SendDlgItemMessage;hWnd;
IDC_TITLETEXT;CB_ADDSTRING;0;addr szText1
invoke SendDlgItemMessage;hWnd;
IDC_TITLETEXT;CB_ADDSTRING;0;addr szText2
invoke SendDlgItemMessage;hWnd;
IDC_TITLETEXT;CB_ADDSTRING;0;addr szText3
invoke SendDlgItemMessage;hWnd;
IDC_TITLETEXT;CB_SETCURSEL;0;0
invoke GetDlgItem;hWnd;IDC_CUSTOMTEXT
invoke EnableWindow;eax;FALSE
invoke LoadBitmap;hInstance;IDB_1
mov hBmp1;eax
invoke LoadBitmap;hInstance;IDB_2
mov hBmp2;eax
;********************************************************************
; 初始化单选钮和复选框
;********************************************************************
invoke CheckDlgButton;hWnd;IDC_SHOWBMP;BST_CHECKED
invoke CheckDlgButton;hWnd;IDC_ALOW;BST_CHECKED
invoke CheckDlgButton;hWnd;
IDC_THICKFRAME;BST_CHECKED
;********************************************************************
; 初始化滚动条
;********************************************************************
invoke SendDlgItemMessage;hWnd;
IDC_SCROLL;SBM_SETRANGE;0;100
;********************************************************************
。elseif eax WM_MAND
mov ax;wParam
;********************************************************************
; 由于印刷宽度有限,WM_MAND消息处理代码的缩进格式有所影响,请读者注意
;********************************************************************
。if ax IDCANCEL
invoke EndDialog;hWnd;NULL
invoke DeleteObject;hBmp1
invoke DeleteObject;hBmp2
;********************************************************************
; 更换图片
;********************************************************************
。elseifax IDOK
mov eax;hBmp1
xchg eax;hBmp2
mov hBmp1;eax
invoke SendDlgItemMessage;hWnd;IDC_BMP;STM_SETIMAGE;IMAGE_BITMAP;eax
;********************************************************************
; 设置是否“总在最前面”
;********************************************************************
。elseifax IDC_ONTOP
invoke IsDlgButtonChecked;hWnd;IDC_ONTOP
。if eax BST_CHECKED
invoke SetWindowPos;hWnd;HWND_TOPMOST;0;0;0;0;
SWP_NOMOVE or SWP_NOSIZE
。else
invoke SetWindowPos;hWnd;HWND_NOTOPMOST;0;0;0;0;
SWP_NOMOVE or SWP_NOSIZE
。endif
;********************************************************************
; 演示隐藏和显示图片控件
;********************************************************************
。elseifax IDC_SHOWBMP
invoke GetDlgItem;hWnd;IDC_BMP
mov ebx;eax
invoke IsWindowVisible;ebx
。if eax
invoke ShowWindow;ebx;SW_HIDE
。else
invoke ShowWindow;ebx;SW_SHOW
。endif
;********************************************************************
; 演示允许和灰化“更换图片”按钮
;********************************************************************
。elseifax IDC_ALOW
invoke IsDlgButtonChecked;hWnd;IDC_ALOW
。if eax BST_CHECKED
mov ebx;TRUE
。else
xor ebx;ebx
。endif
invoke GetDlgItem;hWnd;IDOK
invoke EnableWindow;eax;ebx
;********************************************************************
。elseifax IDC_MODALFRAME
invoke GetWindowLong;hWnd;GWL_STYLE
and eax;not WS_THICKFRAME
invoke SetWindowLong;hWnd;GWL_STYLE;eax
。elseifax IDC_THICKFRAME
invoke GetWindowLong;hWnd;GWL_STYLE
or eax;WS_THICKFRAME
invoke SetWindowLong;hWnd;GWL_STYLE;eax
;********************************************************************
; 演示处理下拉式组合框
;********************************************************************
。elseif ax IDC_TITLETEXT
shr eax;16
;********************************************************************
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第5章 使用资源
5。4 对 话 框(6)
。if ax CBN_SELENDOK
invoke SendDlgItemMessage;hWnd;
IDC_TITLETEXT;CB_GETCURSEL;0;0
。if eax 2
invoke GetDlgItem;hWnd;IDC_CUSTOMTEXT
invoke EnableWindow;eax;TRUE 。else
mov ebx;eax
invoke SendDlgItemMessage;hWnd;IDC_TITLETEXT;
CB_GETLBTEXT;ebx;addr @szBuffer
invoke SetWindowText;hWnd;addr @szBuffer
invoke GetDlgItem;hWnd;IDC_CUSTOMTEXT
invoke EnableWindow;eax;FALSE
。endif
。endif
;********************************************************************
; 在文本框中输入文字
;********************************************************************
。elseifax IDC_CUSTOMTEXT
invoke GetDlgItemText;hWnd;IDC_CUSTOMTEXT;
addr @szBuffer;sizeof @szBuffer
invoke SetWindowText;hWnd;addr @szBuffer
。endif
;********************************************************************
; 恢复代码的缩进格式,请读者注意
;********************************************************************
; 处理滚动条消息
;********************************************************************
。elseif eax WM_HSCROLL
mov eax;wParam
。if ax SB_LINELEFT
dec dwPos
。elseif ax SB_LINERIGHT
inc dwPos
。elseif ax SB_PAGELEFT
sub dwPos;10
。elseif ax SB_PAGERIGHT
add dwPos;10
。elseif ax SB_THUMBPOSITION || ax SB_THUMBTRACK
mov eax;wParam
shr eax;16
mov dwPos;eax
。else
mov eax;TRUE
ret
。endif
cmp dwPos;0
jge @F
mov dwPos;0
@@:
cmp dwPos;100
jle @F
mov dwPos;100
@@:
invoke SetDlgItemInt;hWnd;IDC_VALUE;dwPos;FALSE
invoke SendDlgItemMessage;hWnd;
IDC_SCROLL;SBM_SETPOS;dwPos;TRUE
;******************************************************************** 。else
mov eax;FALSE
ret
。endif
mov eax;TRUE
ret
_ProcDlgMain endp