WIN32汇编语言教程:第08章 通用对话框 · 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——禁止“规定自定义颜色”按钮,也就是说不允许用户展开对话框的扩展部分。

■  CC_RGBINIT——对话框显示的时候用rgbResult字段的值初始化选择框中的颜色。

如果用户单击“确定”按钮,函数返回TRUE,否则函数返回FALSE。读者可以在例子文件中的_ChooseColor子程序中找到使用这个函数的详细代码。

使用ChooseColor函数要注意的是:lpCustColors指针不能为NULL,所以必须分配一个16个双字长度缓冲区,如果指针是NULL会导致函数违规访问00000000h处的内存,就等着看“非法操作”吧!

8.2.4 查找和替换文本对话框

查找文本对话框如图8.4的上图所示,替换文本对话框如图8.4的下图所示,要显示这两种通用对话框可分别使用FindText和ReplaceText函数:

   invoke FindText,lpfr
   invoke ReplaceText,lpfr


图8.4 查找和替换对话框

这两个函数都使用同样的FINDREPLACE结构:

FINDREPLACEA STRUCT
 LStructSize        DWORD    ?     ;结构长度
 HwndOwner          DWORD    ?     ;所属窗口
 HInstance          DWORD    ?
 Flags              DWORD    ?     ;标志
 LpstrFindWhat      DWORD    ?     ;查找字符串
 LpstrReplaceWith   DWORD    ?     ;替换字符串
 WFindWhatLen       WORD     ?     ;查找字符串长度
 WReplaceWithLen    WORD     ?     ;替换字符串长度
 LCustData          DWORD    ?
 LpfnHook           DWORD    ?
 LpTemplateName     DWORD    ?
FINDREPLACEA ENDS
FINDREPLACE equ <FINDREPLACEA>

上页:第08章 通用对话框 · 8.2 使用通用对话框(1) 下页:第08章 通用对话框 · 8.2 使用通用对话框(3)

第08章 通用对话框

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