windows环境下32位汇编语言程序设计-第48节
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
在资源脚本文件中定义了一个对话框用做主窗口,同时定义了一个菜单用来选择各种通用对话框。下面结合这个例子说明各种通用对话框的用法。
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第8章 通用对话框
8。2 使用通用对话框(1)
8。2。1 “打开”文件和“保存”文件对话框
“打开”文件和“保存”文件的对话框大概是读者最熟悉的,如图8。1所示。由于Windows操作系统随着版本的升级会对用户界面的风格做一些调整,不同版本的dlg32。dll库文件也随之改变,但不管主流的用户界面如何改变,对程序员来说,编程的接口是不会变的,从Windows 95到Windows XP,通用对话框函数的使用方式并没有什么不同。
显示“打开”文件对话框的函数是GetOpenFileName,显示“保存”文件对话框的函数是GetSaveFileName。这两个对话框可以让用户选择驱动器、目录以及一个文件名(打开文件对话框还允许选择多个文件),但这两个对话框并不对文件进行任何操作,也就是说,它们仅给用户提供一个统一的界面来“选择”文件名,获取文件名以后,对文件的打开、读写等操作还需要程序自己解决。
这两个函数的语法是:
invoke GetOpenFileName,lpofn ;显示打开文件对话框
invoke GetSaveFileName,lpofn ;显示保存文件对话框
lpofn参数是一个指针,指向一个OPENFILENAME结构,程序在调用函数前需要在结构中填写初始化数据,两个函数使用的结构是一样的,只是使用的初始化数据有所不同而已。OPENFILENAME结构是这样定义的:
OPENFILENAMEA STRUCT
LStructSize DWORD ? ;结构的长度,用户填写
HwndOwner DWORD ? ;所属窗口,可以为NULL
HInstance DWORD ? ;
LpstrFilter DWORD ? ;文件筛选字符串
LpstrCustomFilter DWORD ?
NMaxCustFilter DWORD ?
NFilterIndex DWORD ?
LpstrFile DWORD ? ;全路径的文件名缓冲区
NmaxFile DWORD ? ;文件名缓冲区长度
LpstrFileTitle DWORD ? ;不包含路径的文件名缓冲区
NMaxFileTitle DWORD ? ;文件名缓冲区长度
LpstrInitialDir DWORD ? ;初始目录
LpstrTitle DWORD ? ;对话框标题
Flags DWORD ? ;标志
NFileOffset WORD ? ;文件名在字符串中的起始位置
NFileExtension WORD ? ;扩展名在字符串中的起始位置
LpstrDefExt DWORD ? ;默认扩展名
LCustData DWORD ?
LpfnHook DWORD ?
LpTemplateName DWORD ?
OPENFILENAMEA ENDS
OPENFILENAME equ
结构中一些重要的字段含义如下。
● lpstrFilter——指定文件名筛选字符串,该字段决定了对话框中“文件类型”下拉式列表框中的内容,字符串可以由多组内容组成,每组包括一个说明字符串和一个筛选字符串,字符串的最后用两个0结束。如下面的字符串将在列表框中显示两项内容,选择不同项目的时候分别列出“*。txt”文件或者所有文件“*。*”:
'Text Files(*。txt)';0;'*。txt';0;'All Files(*。*)';0;'*。*';0;0
筛选字符串中也可以同时指定多个扩展名,中间用分号隔开,如'*。txt;*。doc'。
● lpstrFile——指向一个包含文件名的缓冲区。如果这个缓冲区中已经包含了一个文件名,那么对话框初始化的时候将显示这个文件名。当用户选择了一个文件的时候,函数在这里返回新的文件名。
● nMaxFile——指定lpstrFile参数指向的缓冲区的长度。
● lpstrFileTitle——指向一个缓冲区,用来接收用户选择的不含路径的文件名。这个字段可以为NULL。
● nMaxFileTitle——指明lpstrFileTitle参数指向的缓冲区的长度。
● lpstrInitialDir——对话框的初始化目录,这个字段可以为NULL。
● lpstrTitle——指向自定义的对话框标题,如果这个字段是NULL,那么“打开”对话框和“保存”对话框的默认标题是“打开”和“另存为”。
● nFileOffset—返回文件名字符串中文件名的起始位置,如当用户选择了文件“c:dir1file。ext”时,这里将返回8。
● nFileExtension——返回文件名字符串中扩展名的起始位置,同样是上面的字符串,这里返回13。如果文件名的最后一个字符是“。”,这里返回0,表示文件没有扩展名,这个字段和nFileOffset字段为分析文件名提供了方便。
● lpstrDefExt——指定默认扩展名,如果用户输入了一个没有扩展名的文件名,那么函数会自动加上这个默认扩展名。
● Flags字段——该标志字段决定了对话框的不同行为,它可以是一些取值的组合。下面是一些比较重要的标志:
■ OFN_ALLOWMULTISELECT——允许同时选择多个文件名。
■ OFN_CREATEPROMPT——如果用户输入了一个不存在的文件名,对话框向用户提问“是否建立文件”。
■ OFN_FILEMUSTEXIST——用户只能选择一个已经存在的文件名,使用这个标志的时候必须同时使用 OFN_PATHMUSTEXIST标志。
■ OFN_HIDEREADONLY——对话框中不显示“以只读方式打开”复选框。
■ OFN_OVERWRITEPROMPT——在“保存”文件对话框中使用的时候,当选择一个已存在的文件时,对话框会提问“是否覆盖文件”。
■ OFN_PATHMUSTEXIST——用户输入文件名时,路径必须存在。
■ OFN_READONLY——对话框中的“以只读方式打开”复选框初始化的时候处于选中状态。
调用显示“打开”或“保存”文件对话框函数时,函数会停留直到对话框关闭为止,当用户单击了对话框中的“确定”按钮时,函数返回TRUE,用户单击“取消”按钮退出时,函数返回FALSE,程序可以由此判断是否需要继续进行打开或保存文件的操作。具体的代码可以参考例子中的_SaveAs和_OpenFile子程序。
8。2。2 选择字体对话框
“选择字体”通用对话框如图8。2所示,对话框列出了系统中安装的字体,用户可以在上面选择字体名称,同时可以选择字体大小、颜色以及一些效果如斜体、粗体、删除线或下划线等,显示选择字体对话框的函数是ChooseFont:
invoke ChooseFont,lpcf
lpcf指向一个CHOOSEFONT结构,这个结构是这样定义的:
图8。2 选择字体对话框
CHOOSEFONTA STRUCT
LStructSize DWORD ? ;结构长度
HwndOwner DWORD ? ;所属窗口
Hdc DWORD ?
LpLogFont DWORD ? ;指向一个LOGFONT结构
IPointSize DWORD ? ;选择的字体大小
Flags DWORD ? ;标志
RgbColors DWORD ? ;选择的字体颜色
LCustData DWORD ?
LpfnHook DWORD ?
LpTemplateName DWORD ?
HInstance DWORD ?
LpszStyle DWORD ?
NFontType WORD ?
Alignment WORD ?
NSizeMin DWORD ?
NSizeMax DWORD ?
CHOOSEFONTA ENDS
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第8章 通用对话框
8。2 使用通用对话框(2)
结构中一些重要的字段含义如下:
● hDC——当Flags字段中指定CF_PRINTERFONTS标志时,它是打印机的DC句柄。
● lpLogFont——指向一个包含LOGFONT结构的缓冲区。LOGFONT结构可以用来指定字体的名称和属性。如果Flags字段中指定CF_INITTOLOGFONTSTRUCT标志的话,对话框将根据这个结构初始化对话框,函数也在这里返回用户选择的字体名称。
● iPointSize——返回用户选择的字体大小,单位是1/10磅。
● rgbColors——如果Flags字段的CF_EFFECTS标志被设置,对话框将根据这个数值初始化“颜色”下拉式列表框。另外,函数返回时在这里返回用户选择的字体颜色。
● nFontType—返回用户选择的字体是属于哪一类的,可能返回的值有BOLD_FONTTYPE,ITALIC_FONTTYPE,PRINTER_FONTTYPE,REGULAR_FONTTYPE和SCREEN_FONTTYPE等。
另一个关键的字段是Flags字段,Flags字段的初始值决定了对话框的不同行为,函数返回的时候也会在这里返回一些用户的选择,它可以是下面取值的组合:
● CF_BOTH——对话框同时列出打印机字体和屏幕字体。
● CF_TTONLY——对话框只列出TrueType字体。
● CF_EFFECTS——对话框中显示“效果”复选框。
● CF_FIXEDPITCHONLY——对话框的字体列表中只显示等宽字体。
● CF_LIMITSIZE——对话框显示的字体尺寸限于nSizeMin和nSizeMax字段指定的数值之间。
● CF_NOSTYLESEL——对话框中不显示“字形”组合列表框。
● CF_NOSIZESEL——对话框中不显示“大小”组合列表框。
● CF_SCREENFONTS——字体列表中只显示屏幕字体。
调用ChooseFont函数时,函数会停留直到对话框关闭为止,当用户单击了对话框中的 “确定”按钮时,函数返回TRUE,用户单击“取消”按钮退出时,函数返回FALSE。具体的使用例子可以参考例子中的_ChooseFont子程序。
在调用ChooseFont之前,lpLogFont字段被指向一个LOGFONT结构,对话框关闭的时候,函数在LOGFONT结构的lfFaceName字段中返回字体的名称,字体的效果和字形也在LOGFONT结构中返回。
用户选择的颜色在rgbColors 字段中返回,字体大小在iPointSize字段中返回,由于单位是1/10磅,所以返回的数值等于对话框中选择的字体大小乘以10。
8。2。3 选择颜色对话框
选择颜色对话框如图8。3所示,左边是基本的选择系统预定义颜色的区域,右边是扩展的区域,可以由用户自己选择或输入颜色值。
图8。3 选择颜色对话框
打开选择颜色对话框使用函数ChooseColor:
invoke ChooseFont,lpcc
lpcc指向一个CHOOSECOLOR结构,这个结构是这样定义的:
CHOOSECOLORA STRUCT
LStructSize DWORD ? ;结构长度
HwndOwner DWORD ? ;所属窗口
HInstance DWORD ?
RgbResult DWORD ? ;用户选择的颜色值
LpCustColors DWORD ? ;用户自定义颜色缓冲区
Flags DWORD ? ;标志
LCustData DWORD ?
LpfnHook DWORD ?
LpTemplateName DWORD ?
CHOOSECOLORA ENDS
结构中几个重要的字段说明如下。
● rgbResult——如果Flags字段指定了CC_RGBINIT标志,那么创建对话框的时候使用这个字段来初始化选择框中的颜色;函数返回的时候在这里返回用户选择的颜色。
● lpCustColors——指向一个16个双字长度的缓冲区,定义16种自定义颜色。
● Flags——标志,可以是下面取值的组合:
■ CC_FULLOPEN——对话框显示右边的扩展部分,如果不指定这个标志,初始化的时候扩展部分不显示,但用户可以通过单击“规定自定义颜色”按钮将对话框展开。
■ CC_PREVENTFULLOPEN——禁止“规定自定义颜色”按钮,也就是说不允许用户展开对话框的扩展