WIN32汇编语言教程:第05章 使用资源 · 5.4 对话框(4)
看下面的例子:
GROUPBOX "选项", -1, 55, 5, 120, 100 PUSHBUTTON "退出", IDCANCEL, 255, 115, 50, 14 这两条语句和下面的语句编译后产生的二进制资源文件是一模一样的: CONTROL "选项", -1, "Button", BS_GROUPBOX | WS_TABSTOP, 55, 5, 120, 100 CONTROL "退出", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP, 255, 115, 50, 14 第一种语句的用法比第二种语句不但要直观许多,而且不必书写默认的窗口风格。 当用到的控件没有缩写语法时,那就必须用CONTROL定义了,下面的两句分别定义了一条横线和一个图片框,它们并没有缩写的用法: CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 60, 65, 110, 1 CONTROL BMP_ID, -1, "Static", SS_BITMAP | WS_CHILD | WS_VISIBLE, 5, 5, 40, 95
下面以一个例子来演示各种子窗口控件的用法,读者可以在所附光盘的Chapter05\Control目录中找到全部的源代码,其中的Control.rc文件如下:
//################################################################## #include <resource.h> //################################################################## #define ICO_MAIN Ox1000 //图标 #define DLG_MAIN 1 #define IDB_1 1 #define IDB_2 2 #define IDC_ONTOP 101 #define IDC_SHOWBMP 102 #define IDC_ALOW 103 #define IDC_MODALFRAME 104 #define IDC_THICKFRAME 105 #define IDC_TITLETEXT 106 #define IDC_CUSTOMTEXT 107 #define IDC_BMP 108 #define IDC_SCROLL 109 #define IDC_VALUE 110 //################################################################## ICO_MAIN ICON "Main.ico" IDB_1 BITMAP "Picture1.bmp" IDB_2 BITMAP "Picture2.bmp" //################################################################## DLG_MAIN DIALOG 193, 180, 310, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "对话框子窗口控件示例" FONT 9, "宋体" { GROUPBOX "选项", -1, 55, 5, 120, 100 AUTOCHECKBOX "总在最前面", IDC_ONTOP, 65, 20, 100, 12 AUTOCHECKBOX "显示图片", IDC_SHOWBMP, 65, 35, 100, 12 AUTOCHECKBOX "允许更换图片", IDC_ALOW, 65, 50, 100, 12 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 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 COMBOBOX 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④,COMBOBOX⑤,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
第05章 使用资源
版权所有 © 云南伯恩科技 证书:粤ICP备09170368号