要显示“查找”和“替换”文本对话框分别使用函数FindText和ReplaceText:
HWND WINAPI FindText(
__in LPFINDREPLACE lpfr
);
HWND WINAPI ReplaceText(
__inout LPFINDREPLACE lpfr
);
这两个函数都使用同样的FINDREPLACE结构:
typedef struct {
DWORD lStructSize; //结构长度
HWND hwndOwner; //所属窗口
HINSTANCE hInstance; //
DWORD Flags; //标志
LPTSTR lpstrFindWhat; //指向包含查找字符串的指针,缓冲区的长度至少是80字节,这个字符
//串在初始化时出现在“查找内容”编辑框中,函数也在这里返回用户输入的内容
LPTSTR lpstrReplaceWith; //指向包含替换字符串的指针,本字符串在初始化时出线在
//“替换为”编辑框中,函数也在这里返回用户输入的内容,这个字段在FindText时可以
//为NULL,但在使用ReplaceText时必须设置,否则对话框不会显示
WORD wFindWhatLen; //查找字符串缓冲区长度
WORD wReplaceWithLen; //替换字符串缓冲区长度
LPARAM lCustData; //
LPFRHOOKPROC lpfnHook; //
LPCTSTR lpTemplateName; //
} FINDREPLACE, *LPFINDREPLACE;
结构中关键字段说明:
Flags---标志,创建对话框时函数根据标志中的数值初始化对话框中各控件的状态,返回时根据用户的选择来设置标志字段的内容,标志字段是以下值的组合:
FR_FINDNEXT, FR_REPLACE, FR_REPLACEALL, FR_DIALOGTERM //分别表示用户单击了
//“查找下一个”、“替换”、“全部替换”、“取消”按钮
FR_HIDEUPDOWN, FR_HIDEMATCHCASE, FR_HIDEWHOLEWORD //初始化时使用,表示对话框中
//不显示“方向”、“区分大小写”、“全字匹配”按钮
FR_NOMATCHCASE, FR_NOUPDOWN, FR_NOWHOLEWORD //初始化时将“区分大小写”、
//“方向”、“全字匹配”按钮灰化
FR_MATCHCASE, FR_WHOLEWORD //表示用户选择了“区分大小写”或“全字匹配”复选框
FR_DOWN //把“方向”单选钮设置为“向下”
“查找”和“替换”对话框的使用有些特殊,因为这两种对话框是非模态对话框,即FildText和ReplaceText函数被调用后,系统显示对话框马上返回,对话框保持显示状态,直到用户按下了“取消”按钮后对话框才关闭。
如果用户按下了对话框中的某个按钮,对话框设置FINDREPLACE结构中相关字段并通过自定义消息通知父窗口的窗口过程,程序中处理查找和替换的功能集中在这个自定义消息中完成。另外,由于对话框必须向父窗口发送消息,所以hwndOwner字段中必须指定父窗口的句柄,而不能像其他通用对话框一样可以把hwndOwner设置为NULL。
为了让对话框能够使用自定义消息,程序必须首先使用RegisterWindowMessage函数注册自定义消息,这个函数注册消息并返回消息ID,输入参数是消息名称字符串:
UINT WINAPI RegisterWindowMessage(
__in LPCTSTR lpString
);
Windows编程手册中说明了要为查找和替换对话框注册FINDMSGSTRING消息:
#define FINDMSGSTRING TEXT("commdlg_FindReplace")
注意,要把RegisterWindowMessage函数返回的消息ID保存下来,并在主窗口的消息循环中通过判断uMsg是否等于这个消息ID来判断对话框是否返回消息。
因为查找和替换对话框都是非模态对话框,所以使用时要把FINDREPLACE结构和字符串变量放在全局变量中,如果放在窗口过程的局部变量中,对话框还没有关闭的情况下,这些局部变量就已经被释放,以后对话框存取的就会是无效的地址。
函数实例代码片段如下:
//第一步:取得FINDMSGSTRING的消息ID
UINT uFindReplaceMsg; // message identifier for FINDMSGSTRING
uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING);
…..
//第二步:显示对话框
FINDREPLACE fr; // common dialog box structure
HWND hwnd; // owner window
CHAR szFindWhat[80]; // buffer receiving string
HWND hdlg = NULL; // handle to Find dialog box
// Initialize FINDREPLACE
ZeroMemory(&fr, sizeof(fr));
fr.lStructSize = sizeof(fr);
fr.hwndOwner = hwnd;
fr.lpstrFindWhat = szFindWhat;
fr.wFindWhatLen = 80;
fr.Flags = 0;
hdlg = FindText(&fr);
….
//第三步:处理对话框返回的自定义消息
LPFINDREPLACE lpfr;
if (message == uFindReplaceMsg)
{
// Get pointer to FINDREPLACE structure from lParam.
lpfr = (LPFINDREPLACE)lParam;
// If the FR_DIALOGTERM flag is set,
// invalidate the handle that identifies the dialog box.
if (lpfr->Flags & FR_DIALOGTERM)
{
hdlg = NULL;
return 0;
}
// If the FR_FINDNEXT flag is set,
// call the application-defined search routine
// to search for the requested string.
if (lpfr->Flags & FR_FINDNEXT)
{
SearchFile(lpfr->lpstrFindWhat,
(BOOL) (lpfr->Flags & FR_DOWN),
(BOOL) (lpfr->Flags & FR_MATCHCASE));
}
return 0;
}
=======================================================
“页面设置”对话框用来设置打印机参数,用户可以在对话框中选择打印机、打印机纸张大小、页边距和纸张方向,还可以引出一个打印机属性的设置对话框。
显示“页面设置”对话框使用PageSetupDlg函数:
BOOL WINAPI PageSetupDlg(
__inout LPPAGESETUPDLG lppsd
);
lppsd参数指向一个PAGESETUPDLG参数:
typedef struct tagPSD {
DWORD lStructSize; //结构长度
HWND hwndOwner; //所属窗口
HGLOBAL hDevMode; //指向DEVMODE结构
HGLOBAL hDevNames; //指向DEVNAME结构
DWORD Flags; //标志
POINT ptPaperSize; //一个POINT结构,返回纸张大小
RECT rtMinMargin; //返回最小允许的页边距
RECT rtMargin; //返回用户选择的页边距
HINSTANCE hInstance; //
LPARAM lCustData; //
LPPAGESETUPHOOK lpfnPageSetupHook; //
LPPAGEPAINTHOOK lpfnPagePaintHook; //
LPCTSTR lpPageSetupTemplateName; //
HGLOBAL hPageSetupTemplate; //
} PAGESETUPDLG, *LPPAGESETUPDLG;
结构中有关字段说明:
hDevMode---如果用户选择了打印机,那么这里返回一个指针,指向包含DEVMODE结构的内存地址,DEVMODE结构中包含了打印机的名称;
hDevNames---如果用户选择了打印机,那么这里返回一个指针,指向包含DEVNAMES结构的内存地址,DEVNAMES结构包含了打印机的各种属性;
Flags---标志,以下值的组合:
PSD_DEFAULTMINMARGINS //将页边距设置为打印机允许的最小页边距
PSD_DISABLEMARGINS //灰化页边距设置输入框
PSD_DISABLEORIENTATION //灰化纸张方向选择框
PSD_DISABLEPAPER //灰化纸张方向选择框
PSD_DISABLEPAGEPAINTING //不绘画最上方的打印示例图示
PSD_DISABLEPRINTER //灰化“打印机”按钮
PSD_MARGINS //函数用rtMargin字段的值初始化对话框中的数值
PSD_RETURNDEFAULT //函数不显示对话框,马上返回并在hDevNames和hDevMode字段中返回
//默认打印机的设置情况
PSD_INTHOUSANDTHSOFINCHES//指明ptPagerSize、rtMinMargin和rtMargin等字段使用的单位是英寸
PSD_INHUNDREDTHSOFMILLIMETERS //指明ptPagerSize、rtMinMargin和rtMargin等字段
//使用的单位是毫米
分享到:
相关推荐
4.如何使用查找与替换对话框?(Visual C++编程 源代码)4.如何使用查找与替换对话框?(Visual C++编程 源代码)4.如何使用查找与替换对话框?(Visual C++编程 源代码)4.如何使用查找与替换对话框?(Visual C++...
Visual C++ 开发技术 通用对话框编程 查找替换对话框例程,例程来自《Visual C++ 开发技术大全》,全部打包下载可点击http://download.csdn.net/detail/zhou625315237/5103878
Visual C++ 开发技术 通用对话框编程 页面设置对话框例程,例程来自《Visual C++ 开发技术大全》,全部打包下载可点击http://download.csdn.net/detail/zhou625315237/5103878
1.对话框程序标题栏设置(Visual C++编程 源代码)1.对话框程序标题栏设置(Visual C++编程 源代码)1.对话框程序标题栏设置(Visual C++编程 源代码)1.对话框程序标题栏设置(Visual C++编程 源代码)1.对话框程序...
如何调用系統的【查找】、【替换】的对话框?
由于包太大分成2个发出来。这个包含核心实例1 制作对话框程序核心实例2 制作可扩展的对话框核心实例3 让程序“说”想说的话
Visual C++编程技巧 通用对话框如字体对话框,颜色对话框,页面设置对话框,查找和替代对话框,文件对话框,预览位图文件等等;包含源代码
windows编程入门,讲解MFC运行的机制,并详细讲解对话框的操作设置,附有详细代码,一步一步指导,适合初学者。
3.如何使用页面设置对话框?(Visual C++编程 源代码)3.如何使用页面设置对话框?(Visual C++编程 源代码)3.如何使用页面设置对话框?(Visual C++编程 源代码)3.如何使用页面设置对话框?(Visual C++编程 源...
对话框和对话框类 模式对话框 无模式对话框 属性页对话框 通用对话框
VisualC 实效编程 9 非模态对话框VisualC 实效编程 9 非模态对话框VisualC 实效编程 9 非模态对话框VisualC 实效编程 9 非模态对话框VisualC 实效编程 9 非模态对话框VisualC 实效编程 9 非模态对话框VisualC 实效...
包含扩展实例1 设置对话框的背景颜色扩展实例2 在对话框程序中加入背景图像扩展实例3 屏幕软键盘扩展实例4 函数式计算器扩展实例5 中国农历
Windows编程基础 Windows API编程 基于对话框的Windows应用程序 对话框应用程序框架
非常简单的Windows程序,对于菜单和对话框的编写一目了然。适合初学者对于Windows编程的学习。
1)编程实现如下应用程序,含有菜单,单击“新建”时弹出新建对话框(非模态对话框),单击对话框颜色按钮后应用程序窗口字体和背景色发生相应的变化。单击“关于”菜单项时弹出关于对话框(模态对话框)。 (Winodws...
对话框编程
VC中模态对话框和非模态对话框的编程
Vb调用Windows颜色和文件对话框,比较初级的小技巧,本程序是VB简明教程第八章中的一个窗体小例子,希望刚学VB的朋友们参考学习。
主要介绍了对话框和对话框类、模式对话框、无模式对话框、属性页对话框和通用对话框