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章 使用资源 · 5.4 对话框(3) 下页:第05章 使用资源 · 5.4 对话框(5)

第05章 使用资源

版权所有 © 云南伯恩科技 证书:粤ICP备09170368号