WIN32汇编语言之通用对话框的使用

以前学习过自定义的对话框,属性需要自己定义,包括边框,标题,模态与非模态等等,如果创建模态对话框(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对话框或出现错误信息,返回值为零。

时间: 2024-10-13 10:28:30

WIN32汇编语言之通用对话框的使用的相关文章

【Windows编程】系列第八篇:通用对话框

上一篇我们学习了菜单的基本编程,本篇来了解一下通用对话框的使用.Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单.工具栏.状态栏以及各个控件.当然除了这些单独的控件之外,对于像文件打开.保存对话框,字体对话,颜色对话框等对于Windows本身会用到,在很多第三方的应用程序中也会用到.因此微软公司也早就清楚这种现实情况会存在,所以Windows把这种常见的公共对话就做了统一的接口函数,供Windows自己和第三方开发者使用. Wind

Android通用对话框组件设计

DialogFragment实现自定义的通用对话框,效果图如下面显示的: 一二两张图是DialogFragment实现,第三张图为一个自定义的Toast.一二张图满足基本需求,稍微修改可以用到自己的项目中去,一二中可以根据代码传递View,实现内容区不仅仅显示文字,也可修改后显示你想现实的任何View组件[自己实现即可,这里不给源码].                      源代码下载地址:http://download.csdn.net/detail/itjavawfc/9009887 版

Win32 实现 MFC CFileDialog 对话框

void CWriteWnd::OpenFileDialog(){    OPENFILENAME ofn;          TCHAR szFile[MAX_PATH] = _T(""); ZeroMemory(&ofn, sizeof(ofn));      ofn.lStructSize = sizeof(ofn);    ofn.hwndOwner   = *this;    ofn.lpstrFile   = szFile;       ofn.nMaxFile  

win32调用系统颜色对话框

参考网站:http://blog.csdn.net/u013242177/article/details/50437358 首先要包含commdlg.h头文件,这个是通用对话框的头文件,包括文件对话框,颜色对话框,打印对话框等. 然后再声明一个CHOOSECOLOR类型的变量,声明一个COLORREF类型的变量rgbLineColor,用来存储用户选择的颜色. static CHOOSECOLOR stChooseColor; static COLORREF rgbLineColor; 其中CH

第11章 对话框_11.3 通用对话框

11.3 通用对话框 11.3.1 完善POPAD (1)通用对话框:#include<commdlg.h> (2)OPENFILENAME结构 字段 含义 备注 lStructSize 结构体的大小 hwndOwner 所属窗口,可以为NULL hInstance lpstrFilter 文件筛选字符串 TCHAR szFilter[] = TEXT ("Text Files (*.TXT)\0*.txt\0")\ TEXT ("ASCII Files (*.A

CFileDialog类 通用对话框

CFileDialog类 SetBitmap LoadImage 动态显示图片   一.CFileDialog类 构造函数 CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentW

如何调用通用对话框(2)

如何让通用对话框支持多选: 1 void C通用对话框Dlg::OnBnClickedButton1() 2 { 3 CFileDialog fileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,_T("Text Files(*.txt)|*.txt|Execute Files(*.exe)|*.exe|WinRAR Files(*.rar)|*rar|ALL Files(*.*)|*.*

自己动手让Visual Studio的Win32向导支持生成对话框程序

Visual Studio的MFC向导可以生成基于对话框的程序,而win32向导却不支持,是不是很不给力呢?虽然VAX可以直接插入对话框的代码段,但还是没有直接生成来得爽,下面就动手来改造吧. 本文所做的修改仅在自己的VS里测试通过,大家修改之前请备份原文件. 那我们需要改什么呢?看图吧. 首先,找到"VS安装目录\VC\VCWizards\AppWiz\Generic\Application\",如我电脑上的目录就是 "D:\Program Files\Microsoft

使用WIN32汇编语言实现一个基本windows窗体的过程分析

一个常规的windows窗体一般都是一些一样的构造.你假设想要更改一些个性化的设置,你能够在这个一般的模板伤添砖加瓦.构造自己比較喜欢的类型.下边就分析一下一般的windows窗体的一般模板. 一. 首先看一下一般的windows窗体都包括什么框架(NO picture you say a J8.....上图上图)例如以下(罗云斌win32汇编书中92页的一张图): 该图简单的描写叙述了一个主要的窗体的框架. 下图是我们分析的第一个窗体的执行演示样例截图: 这个窗体较为简单.可是包括了窗体的基本