WIN32汇编语言教程:第08章 通用对话框 · 8.1 通用对话框简介

Windows操作系统为一些常用功能提供了一些通用对话框(Common Dialog Box),比如在不同的应用程序中进行打开文件、选择字体、选择颜色等操作时,不同程序显示的对话框的模样都是一样的。另外,把同样的应用程序放到不同版本的Windows下执行就会发现,这些对话框会随着操作系统版本的不同而不同,如图8.1所示,选择同样的“打开”文件菜单项时,在Windows XP下显示的对话框是左边的样子,而在Windows 98下显示的是右边的样子,但程序中并没有为不同版本的操作系统设计不同的对话框。造成这些现象的原因就是这些对话框是操作系统提供的,实现对话框的代码包括在Comdlg32.dll库文件中,由于不同版本的Comdlg32.dll在设计上可能有所不同,所以不同版本Windows下的对话框会有所不同。


图8.1 不同操作系统下的“打开”文件对话框

8.1 通用对话框简介

通用对话框函数由Comdlg32.dll提供,所以在使用之前需要在源程序中包含相应的include和includelib语句:

   include    comdlg32.inc
   includelib comdlg32.lib

Windows提供多种通用对话框,每种通用对话框都使用一个专用的函数来创建和显示,另外,提供一个数据结构供初始化对话框使用,并在同一个数据结构中返回用户在对话框中输入的数据。使用这些对话框是很简单的,只需要填写结构中的初始化数据,然后调用函数并把结构地址传入就可以了。

Comdlg32.dll中提供的通用对话框如表8.1所示,表中还包括创建这些对话框使用的函数以及数据结构名称。

 

表8.1 通用对话框列表

通用对话框使 用 函 数使用数据结构
选择颜色ChooseColorCHOOSECOLOR
查找字符串FindTextFINDREPLACE
替换字符串ReplaceTextFINDREPLACE
选择字体ChooseFontCHOOSEFONT
打开文件GetOpenFileNameOPENFILENAME
保存文件GetSaveFileNameOPENFILENAME
页面设置PageSetupDlgPAGESETUPDLG

在这些对话框中,查找字符串和替换字符串的对话框是非模态的,方便用户在查找到一个字符串以后,不必关闭对话框就可以继续查找另一个字符串,其他的对话框都是模态对话框。通用对话框使用的例子可以参考所附光盘的Chapter08\CommDlg目录中的代码,包括汇编源代码CommDlg.asm和资源脚本文件CommDlg.rc。CommDlg.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           Comdlg32.inc
includelib        Comdlg32.lib
;####################################################################
; Equ 等值定义
;####################################################################
ICO_MAIN          equ 1000
DLG_MAIN          equ 1000
IDM_MAIN          equ 1000
IDM_OPEN          equ 1101
IDM_SAVEAS        equ 1102
IDM_PAGESETUP     equ 1103
IDM_EXIT          equ 1104
IDM_FIND          equ 1201
IDM_REPLACE       equ 1202
IDM_SELFONT       equ 1203
IDM_SELCOLOR      equ 1204
;####################################################################
; 数据段
;####################################################################
                          .data?
hInstance         dd      ?
hWinMain          dd      ?
dwFontColor       dd      ?
dwBackColor       dd      ?
dwCustColors      dd      16 dup (?)
stLogFont         LOGFONT         <?>
szFileName        db      MAX_PATH dup (?)
szBuffer          db      1024 dup (?)
;********************************************************************
; 查找替换对话框使用
;********************************************************************
idFindMessage     dd     ?
stFind            FINDREPLACE    <?>
szFindText        db     100  dup (?)
szReplaceText     db     100  dup (?)
                  .const
FINDMSGSTRING     db     'commdlg_FindReplace',0
szSaveCaption     db     '请输入保存的文件名',0
szFormatColor     db     '您选择的颜色值:%08x',0
szFormatFont      db     '您的选择:',0dh,0ah,'字体名称:%s',0dh,0ah
                  db     '字体颜色值:%08x,字体大小:%d',0
szFormatFind      db     '您按下了“%s”按钮',0dh,0ah,'查找字符串:%s',0dh,0ah
                  db     '替换字符串:%s',0
szFormatPrt       db     '您选择的打印机:%s',0
szCaption         db     '执行结果',0
szFindNext        db     '查找下一个',0
szReplace         db     '替换',0
szReplaceAll      db     '全部替换',0
szFilter          db     'Text Files(*.txt)',0,'*.txt',0
                  db     'All Files(*.*)',0,'*.*',0,0
szDefExt          db     'txt',0
;####################################################################
; 代码段
;####################################################################
                  .code
;####################################################################
; 页面设置对话框
;####################################################################
_PageSetup        proc
                  local  @stPS:PAGESETUPDLG
 

上页:第07章 图形操作 · 7.5 区域和路径 下页:第08章 通用对话框 · 8.1 通用对话框简介(2)

第08章 通用对话框

版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号