以前学习过自定义的对话框,属性需要自己定义,包括边框,标题,模态与非模态等等,如果创建模态对话框(windows为它内建的消息循环),你不用再去自己写消息循环与注册窗口和显示窗口这几个部分,可以很好的偷懒,这次要介绍的是WINDOWS已经建立好的对话框(已经写好在Comdlg32.dll中),因此当你用到相关的通用对话框的时候,需要在程序的开头写上相关的声明:include comdlg32.inc 与includelib comdlg32.lib
每当我们使用windows操作系统的时候,当你使用画图工具的时候,你选择“选择颜色”属性的时候,就会跳出一个标题为颜色的对话框ChooseColor(刚开始对于这个对话框我有一个疑问就是能不能把这个对话框的标题改为自己定义的字符串,仔细查看每个通用对话框相应的结构才发现只有“打开”和“另存为” 两个通用对话框的相关的结构中包含对话框的标题lpstrtitle 这个元素,而其他的几个通用对话框相应的结构中并没有哪一项涉及到修改对话框的标题的元素,对于这个问题现在还是很疑惑希望了解的人给与评论),这个对话框就是系统的通用对话框;当你使用QQ截图的时候你选择另存为这个选项的时候,就会弹出一个标题为"另存为"的通用对话框GetSaveFileName(这个标题是可以自己定义的),当你新建一个文本文档需要打开一个以前写好的文本的时候,就会弹出一个标题为“打开”的通用对话框GetOpenFileName(这个通用对话框的标题也是可以修改的),当你在一个文本文档里面选择“格式”--“字体”选项的时候会弹出一个标题为“字体”的通用对话框ChooseFont,用来选择需要选择的字体和字体的大小。同样还有“页面设置”这个通用对话框PageSetupDlg,“查找字符串”的通用对话框FindText
“替换字
符串”的通用对话框ReplaceText。其中每一个通用对话框都对应一个相关的数据结构,用来对对话框的一些属性值进行设置,每个对话框的名字和相应的函数以及相应的结构如下表:
通用对话框 | 使用的函数 | 使用的数据结构 |
选择颜色 | ChooseColor() | CHOOSECOLOR |
打开文件 | GetOpenFileName() | OPENFILENAME |
保存文件 | GetSaveFileName() | OPENFILENAME |
页面设置 | PageSetupDlg() | PAGESETUPDLG |
选择字体 | ChooseFont() | CHOOSEFONT |
查找字符串 | FindText() | FINDREPLACE |
替换字符串 | ReplaceText() | FINDREPLACE |
介绍完了通用对画框的基本内容,下面来看一下资源文件的建立:资源文件需要三个部分
首先是最简单的程序图标文件,为了简单,我建立的是一个加粗了的“2”(IDI_ICON1),关于图标,有一个问题:因为创建的是模态对话框(DialogboxParam),不需要再去注册窗口类,写消息循环,显示窗口这几步操作,所以加载图标不需要写出来,windows自己会加载资源图标,对于这个问题当时也是很纠结,图标文件在资源文件定义的时候并没有被选择加入到对话框资源中,菜单是被选择加入到对话框的,它可以附带着对话框的的过程被载入到程序中,但是这个图标并没有相关的操作,我自己理解为是windows自己加载的,(还请了解的指点)
下面看一下资源脚本代码:
// Generated by ResEdit 1.6.6
// Copyright (C) 2006-2015
// http://www.resedit.net
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"
//
// Menu resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDR_MENU1 MENU
{
POPUP "文件(&F)"
{
MENUITEM "打开文件(&O)", IDM_OPEN
MENUITEM "文件另存为(&C)", IDM_SAVEAS
MENUITEM SEPARATOR
MENUITEM "页面设置(&P)", IDM_PAGESETUP
MENUITEM SEPARATOR
MENUITEM "退出(&X)", IDM_EXIT
}
POPUP "查看"
{
MENUITEM "查找字符串(&S)", IDM_FIND
MENUITEM "替换字符串(&R)", IDM_REPLACE
MENUITEM SEPARATOR
MENUITEM "选择字体(&F)", IDM_SELFONT
MENUITEM "选择颜色(&B)", IDM_SELCOLOR
}
}
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG1 DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
EXSTYLE WS_EX_STATICEDGE
CAPTION "通用对话框示例"
MENU IDR_MENU1
FONT 8, "Ms Shell Dlg"
{
}
//
// Icon resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDI_ICON1 ICON "icon2.ico"
这次资源文件代码也挺短的,参数都占了一大堆,编译就不说了,都很熟悉了。
下面来看一下实现程序的功能代码的一些疑问
首先第一个问题:看下程序中这几句代码,用意就是利用wsprintf()函数将数值或者字符按指定的格式翻译成字符串,具体查看该函数的详细用法,太长了,没有出现什么问题就不详细介绍用法了。看代码:这是数据段的一个变量的定义。
szFormatFont db‘您的选择:‘,0dh,0ah,‘字体名称:%s‘,0dh,0ah
db ‘字体颜色值:%08x,字体大小:%d ‘,0
要注意的是“字体大小:%d ‘,0”这句,意思就是输出整数在这个位置,就是选中字体的大小,但是运行程序后可以发现其实对话框中输出的数值(即选择字体的大小)后面多一个“0”,刚开始很不理解,来看一下选择字体这个通用对话框所对应的数据结构CHOOSEFONT中的iPointSize字段的含义:返回用户选择的字号大小,单位是1/10磅,因此返回的数值等于对话框中选择的字号大小乘以10,刚开始因为不知道字体的大小使用的是什么单位,认为返回的数值和弹出的字体通用对话框中选择的字体大小相等,纠结了许久。关于字体单位大小可以参考一下下面这个表:(这个表我也是在网上看到别人写的写得很好就采用了)
每一个通用对话框都有相对应的数据结构,每个数据结构中的字段比较多,在书写的时候,很容易出现错误,不仅仅是书写,就像上面这个疑问,就是对某个字段没有理解造成的。其他就没什么错误了,下面来看一下源代码:
.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 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDI_ICON1 equ
110
IDD_DIALOG1 equ108
IDR_MENU1 equ
111
IDM_OPEN equ
100
IDM_SAVEAS equ101
IDM_PAGESETUP equ102
IDM_EXIT equ
103
IDM_FIND equ
104
IDM_REPLACE equ105
IDM_SELFONT equ106
IDM_SELCOLOR equ107
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd
?
hWinMain dd
?
dwFontColor dd?
dwBackColor dd?
dwCustColors dd16 dup (?)
stLogFont LOGFONT<?>
szFileName db
MAX_PATH dup (?)
szBuffer db
1024 dup (?)
;********************************************************************
; 查找替换对话框使用
;********************************************************************
idFindMessage dd?
stFind FINDREPLACE<?>
szFindText db
100 dup (?)
szReplaceText db100 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,‘All Files(*.*)‘,0,‘*.*‘,0,0
szDefExt db
‘txt‘,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 页面设置对话框
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_PageSetup proc
local @stPS:PAGESETUPDLG
invoke
RtlZeroMemory,addr @stPS,sizeof @stPS
mov @stPS.lStructSize,sizeof @stPS
push hWinMain
pop @stPS.hwndOwner
invoke
PageSetupDlg,addr @stPS
.if eax && @stPS.hDevMode
mov eax,@stPS.hDevMode
mov eax,[eax]
invoke
wsprintf,addr szBuffer,addr szFormatPrt,eax
invoke
MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
.endif
ret
_PageSetup endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 显示“保存文件”对话框
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_SaveAs proc
local @stOF:OPENFILENAME
invoke
RtlZeroMemory,addr @stOF,sizeof @stOF
mov @stOF.lStructSize,sizeof @stOF
push hWinMain
pop @stOF.hwndOwner
mov @stOF.lpstrFilter,offset szFilter
mov @stOF.lpstrFile,offset szFileName
mov @stOF.nMaxFile,MAX_PATH
mov @stOF.Flags,OFN_PATHMUSTEXIST
mov @stOF.lpstrDefExt,offset szDefExt
mov @stOF.lpstrTitle,offset szSaveCaption
invoke
GetSaveFileName,addr @stOF
.if eax
invoke
MessageBox,hWinMain,addr szFileName,addr szCaption,MB_OK
.endif
ret
_SaveAs endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 显示“打开文件”对话框
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_OpenFile proc
local @stOF:OPENFILENAME
invoke
RtlZeroMemory,addr @stOF,sizeof @stOF
mov @stOF.lStructSize,sizeof @stOF
push hWinMain
pop @stOF.hwndOwner
mov @stOF.lpstrFilter,offset szFilter
mov @stOF.lpstrFile,offset szFileName
mov @stOF.nMaxFile,MAX_PATH
mov @stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
invoke
GetOpenFileName,addr @stOF
.if eax
invoke
MessageBox,hWinMain,addr szFileName,addr szCaption,MB_OK
.endif
ret
_OpenFile endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 选择颜色
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ChooseColor proc
local @stCC:CHOOSECOLOR
invoke
RtlZeroMemory,addr @stCC,sizeof @stCC
mov @stCC.lStructSize,sizeof @stCC
push hWinMain
pop @stCC.hwndOwner
push dwBackColor
pop @stCC.rgbResult
mov @stCC.Flags,CC_RGBINIT or CC_FULLOPEN
mov @stCC.lpCustColors,offset dwCustColors
invoke
ChooseColor,addr @stCC
.if eax
push @stCC.rgbResult
pop dwBackColor
invoke
wsprintf,addr szBuffer,addr szFormatColor,dwBackColor
invoke
MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
.endif
ret
_ChooseColor endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 选择字体
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ChooseFont proc
local @stCF:CHOOSEFONT
invoke
RtlZeroMemory,addr @stCF,sizeof @stCF
mov @stCF.lStructSize,sizeof @stCF
push hWinMain
pop @stCF.hwndOwner
mov @stCF.lpLogFont,offset stLogFont
push dwFontColor
pop @stCF.rgbColors
mov @stCF.Flags,CF_SCREENFONTS or CF_INITTOLOGFONTSTRUCT or CF_EFFECTS
invoke
ChooseFont,addr @stCF
.if eax
push @stCF.rgbColors
pop dwFontColor
invoke
wsprintf,addr szBuffer,addr szFormatFont,addr stLogFont.lfFaceName,\
dwFontColor,@stCF.iPointSize
invoke
MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
.endif
ret
_ChooseFont endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain procuses ebx edi esi hWnd,wMsg,wParam,lParam
local @szBuffer[128]:byte
mov eax,wMsg
.if eax ==WM_CLOSE
invoke
EndDialog,hWnd,NULL
.elseif
eax == WM_INITDIALOG
;********************************************************************
; 注册“查找”对话框消息,初始化“查找”对话框的结构
;********************************************************************
mov eax,hWnd
mov hWinMain,eax
mov stFind.hwndOwner,eax
mov stFind.lStructSize,sizeof stFind
mov stFind.Flags,FR_DOWN
mov stFind.lpstrFindWhat,offset szFindText
mov stFind.wFindWhatLen,sizeof szFindText
mov stFind.lpstrReplaceWith,offset szReplaceText
mov stFind.wReplaceWithLen,sizeof szReplaceText
invoke
RegisterWindowMessage,addr FINDMSGSTRING
mov idFindMessage,eax
.elseif
eax == WM_COMMAND
mov eax,wParam
.if ax ==IDM_EXIT
invoke
EndDialog,hWnd,NULL
.elseif
ax == IDM_OPEN
invoke
_OpenFile
.elseif
ax == IDM_SAVEAS
invoke
_SaveAs
.elseif
ax == IDM_PAGESETUP
invoke
_PageSetup
.elseif
ax == IDM_FIND
and stFind.Flags,not FR_DIALOGTERM
invoke
FindText,addr stFind
.elseif
ax == IDM_REPLACE
and stFind.Flags,not FR_DIALOGTERM
invoke
ReplaceText,addr stFind
.elseif
ax == IDM_SELFONT
invoke
_ChooseFont
.elseif
ax == IDM_SELCOLOR
invoke
_ChooseColor
.endif
;********************************************************************
.elseif
eax == idFindMessage
xor ecx,ecx
.if stFind.Flags & FR_FINDNEXT
mov ecx,offset szFindNext
.elseif
stFind.Flags & FR_REPLACE
mov ecx,offset szReplace
.elseif
stFind.Flags & FR_REPLACEALL
mov ecx,offset szReplaceAll
.endif
.if ecx
invoke
wsprintf,addr szBuffer,addr szFormatFind,\
ecx,addr szFindText,addr szReplaceText
invoke
MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
.endif
;********************************************************************
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke
GetModuleHandle,NULL
mov hInstance,eax
invoke
DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset _ProcDlgMain,NULL
invoke
ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
win32汇编程序总会有许多相似的东西,就就像是一些固定的模板代码总是大同小异。关于源代码不再多赘述,也没什么问题了,下面来介绍一下本次遇到的一些新的API函数,以及新的结构类型:
结构体:
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>
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 <OPENFILENAMEA>
CHOOSEFONT 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 ?
CHOOSEFONT ENDS
CHOOSECOLOR STRUCT ?
LStructSize DWORD ? ;结构长度
HwndOwner DWORD ? ;所属窗口
HInstance DWORD ?
rgbResult DWORD ? ;用户选择的颜色值
lpCustColors DWORD ? ;用户自定义颜色缓冲区
Flags DWORD ? ;标志
lCustData DWORD ?
lpfnHook DWORD ?
lpTemplataName DWORD ?
CHOOSECOLOR ENDS
PAGESETUPDLG STRUCT ?
LStructSize DWORD ? ;结构长度
HwndOwner DWORD ? ;所属窗口
hDevMode DWORD ? ;指向DEVMODE结构
hDevNames DWORD ? ;指向DEVNAMES结构
Flags DWORD ? ;标志
PtPaperSize POINT ? ;返回纸张尺寸
RtMinMargin RECT ? ;返回最小允许的页边距
rtMargin RECT ? ;返回用户选择的页边距
hInstance DWORD ?
lCustData DWORD ?
lpfnPageSetupHook DWORD ?
lpfnPagePaintHook DWORD ?
lpPageSetupTemplateName DWORD ?
hPageSetupTemplate DWORD ?
PAGESETUPDLG ENDS
API函数:
PageSetupDlg()
功能:
该函数创建一个PageSetup对话框,此对话框能使用户指定打印页的属性。这些属性包括纸张大小和来源,送纸方向和页边距。
原型:
BOOL PageSetupDlg(LPPAGESETUPDLGI ppsd)
参数:
Ippsd:指向一个包含初始化对话框信息的PAGESETUPDLG结构。当函数返回时,该结构存放有关用户选择的信息
返回值:
返回如果用户点击OK钮,返回值为非零值,Ippsp参数指向的PAGESETUPDLG结构中的成员显示用户的选择。如果用户取消或关闭PageSetup对话框或错误出现,返回值为零
GetSaveFileName()
功能:
该函数创建一个Save公共对话框,以便用户指定驱动器、目录和文件名
原型:
BOOL GetSaveFileName(LPOPENFILENAME Ipofn)
参数:
Ipofn:指向一个包含初始化对话框信息的OPENFILENAME结构。当GetsaveFileName函数返回时,此结构含有关于用户文件选择的信息。
返回值:
如果用户指定了一个文件名且点击OK按钮,返回值为非零值。由OPENFILENAME结构中的归IpstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Save对话框或错误出现,返回值为零
GetOpenFileName()
功能:
创建一个Open公共对话框,使用户指定驱动器、目录和文件名、或使用户打开文件
原型:
BOOL GetOpenFileName(LPOPENFILENAME Ipofn);
参数;
Ipofn:指向包含初始化对话框的信息的一个OPENFILENAME结构。当OpenfileName函数返回时,此结构包含有关用户文件选择的信息。
返回值:
如果用户指定了一个文件名,点击OK按钮,返回值为非零。由OPENFILENAME结构的IPstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Open对话框或错误出现,返回值为零。
ChooseColor()
功能:
该函数创建一个能使用户从中选择颜色的通用颜色对话框
原型:
BOOL ChooseColor(LPCHOOSECOLOR IpCC);
参数;
lpCC:指向一个包括初始化对话框信息的CHOOSECOLOR结构。当ChooseColor函数返回时,此结构含有有关用户颜色选择的信息。
返回值:
如果用户点击对话框中的OK按钮,返回值为非零值。CHOOSECOLOR结构中的rgbResult成员含有用户选择的颜色的RGB颜色值。如果用户取消或关闭Color对话框或错误出现,返回值为零。
ChooseFont()
功能:
该函数创建一个使用户选择逻辑字体属性的对话框,这些属性包括字体名称、字体风格(如粗体、斜体或正常体)、字号、效果(如强调线,下划线或字体颜色)和手写体(或字符集)。
原型:
BOOL ChooseFont(LPCHOOSEFONT Ipcf)
参数:
Ipcf:指向一个含有初始化对话框信息的CHOOSEFONT结构。当返回ChooseFont函数时,此结构含有用户对字体选择的信息。
返回值:
如果用户点击对话框的OK按钮,返回值为非零值,CHOOSEFONT结构中的成员表明用户的选择。如果用户取消或关闭Font对话框或出现错误信息,返回值为零。