特殊对话框

1、          打开和保存对话框:

(1)使用GetOpenFileName(LPOPENFILENAME Ipofn)创建打开对话框;

Lpofn包含了初始化对话框的信息,当此函数返回时这个结构包含文件选择的信息;l

typedef struct tagOFN {

  DWORD         lStructSize; //结构大小

  HWND          hwndOwner; //拥有这个对话框的窗口

  HINSTANCE     hInstance; //拥有此对话框的模块实例句柄

  LPCTSTR       lpstrFilter; //包含过滤信息每个过滤信息含两个字符串用/0结束,例”Text Files/0*.TXT”最

后的过滤信息要/0/0结束,例: "All Files/0*.*/0/0"

  LPTSTR        lpstrCustomFilter; //默认的过滤信息

  DWORD         nMaxCustFilter; ///默认的过滤信息大小,当lpstrCustomFilter不为空时,这个至少要大于40

  DWORD         nFilterIndex; //当前选择的过滤信息索引,当为0时使用lpstrCustomFilter

  LPTSTR        lpstrFile; //包含用户选定文件的全路径和文件名、扩展名

  DWORD         nMaxFile; //lpstrFile的大小

  LPTSTR        lpstrFileTitle; //包含用户选定文件的文件名、扩展名

  DWORD         nMaxFileTitle; //lpstrFileTitle的大小

  LPCTSTR       lpstrInitialDir; //默认的显示路径

  LPCTSTR       lpstrTitle; //标题

  DWORD         Flags; //各种标志

  WORD          nFileOffset; //指定lpstrFile中文件名的偏移量,如lpstrFile为"c:/dir1/dir2/file.ext",则

nFileOffset的值为12;

  WORD          nFileExtension; //指定lpstrFile中扩展名的偏移量如lpstrFile为"c:/dir1/dir2/file.ext",则nFileExtension的值为18

  LPCTSTR       lpstrDefExt; //默认扩展名

  LPARAM        lCustData; //保留吧

  LPOFNHOOKPROC lpfnHook; //可用来重新设定回调函数

  LPCTSTR       lpTemplateName; //以下可以都为NULL了

#if (_WIN32_WINNT >= 0x0500)

  void *        pvReserved;

  DWORD         dwReserved;

  DWORD         FlagsEx;

#endif // (_WIN32_WINNT >= 0x0500)

} OPENFILENAME, *LPOPENFILENAME;

(2)使用GetSaveFileName创建保存对话框;

2、浏览文件夹对话框:

使用SHBrowseForFolder创建

char DirPath[MAX_PATH];

 BROWSEINFO bi;

 ITEMIDLIST * pidl;

 

 bi.hwndOwner = NULL;

 bi.pidlRoot = NULL;

 bi.pszDisplayName = Dir;

 bi.lpszTitle = "请选择图片文件夹。";

 bi.ulFlags = BIF_RETURNONLYFSDIRS;

 bi.lpfn = NULL;

 bi.lParam = 0;

 bi.iImage = 0;

 

 pidl = SHBrowseForFolder(&bi);

 if(pidl == NULL)

  DirPath[0] = 0;

 if(!SHGetPathFromIDList(pidl,Dir))

                DirPath[0] = 0;

 

 //释放内存

 LPMALLOC pMalloc;

 if (SUCCEEDED(SHGetMalloc(&pMalloc)))

 {

  pMalloc->Free(pidl);

  (void)pMalloc->Release();

 }

 

3、ChooseColor 
函数功能:该函数创建一个能使用户从中选择颜色的通用颜色对话框。 
函数原型:BOOL ChooseColor(LPCHOOSECOLOR IpCC); 
参数: 
lpCC:指向一个包括初始化对话框信息的CHOOSECOLOR结构。当ChooseColor函数返回时,此结构含有有关用户颜色选择的信息。 
返回值:如果用户点击对话框中的OK按钮,返回值为非零值。CHOOSECOLOR结构中的rgbResult成员含有用户选择的颜色的RGB颜色值。如果用户取消或关闭Color对话框或错误出现,返回值为零。若想获得更多错误信息,请调用CommDlgExtondedError函数,此函数的返回值为下列中的一个: 
   CDERR_FINDRESFAILURE;CDERR_MEMLOCKFAILURE;CDERR_INITIALIZATION; 
   CDERR_NOHINSTANCE;CDERR_LOCKRESFAILURE;CDERR_NOHOOK 
   CDERR_LOADRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADSTRFAlLURE; 
   CDERR_STRUCTSIZE;CDERR_MEMALLOCFAILURE 
备注Color对话框不支持彩色调色板,对话框提供的颜色的选择仅限于系统颜色和这些颜色的混合值,可以为对话框提供一个CCHOOKProc程序,此挂钩程序能处理发送给对话框的信息。通过建立CHOOSECOLOR结构中Flags成员的CC_ENABLEHOOK标志和指定IpfnHook成员中挂钩程序的地址,可使挂钩程序生效。

 

4、ChooseFont 
函数功能:该函数创建一个使用户选择逻辑字体属性的对话框,这些属性包括字体名称、字体风格(如粗体、斜体或正常体)、字号、效果(如强调线,下划线或字体颜色)和手写体(或字符集)。 
函数原型:BOOL ChooseFont(LPCHOOSEFONT Ipcf); 
参数: 
Ipcf:指向一个含有初始化对话框信息的CHOOSEFONT结构。当返回ChooseFont函数时,此结构含有用户对字体选择的信息。 
返回值:如果用户点击对话框的OK按钮,返回值为非零值,CHOOSEFONT结构中的成员表明用户的选择。如果用户取消或关闭Font对话框或出现错误信息,返回值为零。若想获得更多错误信息。请调用CommDlgExtendedError函数,其返回值如下: 
   CDERR_FINDRESFAILURE;CDERR_NOHINSTANCE;CDERR_INITIALIZATION;CDERR_NOHOOK 
   CDERR_LOCKRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADRESFAILURE; 
   CDERR_STRUCTSIZE;CDERR_LOADSTRFAILURE;CDERR_MAXLESSTHANMIN 
   CDERR_MEMALLOCFAILURE;CDERR_NOFONTS;CDERR_MEMLOCKFAILURE 
备注:可以为Font对话框提供一个CFHOOKProc挂钩程序。此挂钩程序能够处理发送给对话框的信息。 
通过建立CHOOSEFONT结构中Flags成员的CE ENABLEHOOK标志和指定IPfn Hook成员中挂钩程序的地址可以使挂钩程序有效。 
挂钩程序可以把信息WM_CHOOSEFONT_GETLOGLONT,WM_CHOOSEFONT_SETFLAGS和 
WM_CHOOSEFONT_SETLOGFONT消息发送给对话框以便得到和创建当前值和对话框的图标。

5、FindText 
函数功能:该函数创建一个系统定义的无模式Find对话框,为使用户指定一个串来查找文本内的文字。 
函数原型:HWND FindText(LPFINDREPLACE lpfr); 
参数: 
Ipfr:指向一个FINDEPLACE结构,此结构包含用来初始对话框的信息。对话框用此结构把用户输入的信息传送到应用程序。有关更多的信息,请参见下面说明部分。 
返回值:如果函数调用成功,返回值是对话框的窗口句柄。可以使用窗口句柄与对话框联系或关闭它;如果函数调用失败,返回值为NULL。若想获得更多的错误信息,请调用CommDlgExtendedError函数。其返回值如下: 
   CDERR_FINDRESFAILURE;CDERR_MEMLOCKFAILURE;CDERR_INITIALIZATION 
   CDERR_NOHINSTANCE;CDERR_LOCKRESFAILURE;CDERR_NOHOOK 
   CDERR_LOADRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADSTRFAILURE 
   CDERR_STRUCTSIZE;CDERR_MEMALLOCFAILURE;FRERR_BUFFERLENGTHZERO 
备注:FindText函数不执行查找操作,相反,对话框把FINDMSGSTRING己登记的信息传送到对话框窗口的窗口函数。当创建对话框时FINDReplace结构中的hwndCwner成员标识窗口。 
     调用Find Text函数前,必须调用RegisterWindowMessage函数以得到FINDMSGSTRING信息的标识符,对话框函数在用户点击FindNext按钮或对话框被关闭时利用此标识符传送信息。FINDMSGSTRING信息的IParam参数包含一个指向FINDREPLACE结构的指针,此结构的Flags成员显示开诚信息的事件。 
其他成员显示用户的输入。 
     若想创建对话框,必须利用应用程序的主信息链中的IsDialogMessage函数来保证对话框正确处理键盘输入,例如Tab和Esc键。IsDialogMessage返回值显示Find对话框是否处理信息。
     可以为Find对话框提供一个挂钩函数FRHookProc。挂钩函数可处理发送到对话框中的信息。为使挂钩函数生效,可设置HNDREPLACE结构的Flags成员的FR_ENABLEHOOK标志,且指定IpfnHook成员中挂钩函数的地址。

6、PageSetupDlg 
函数功能:该函数创建一个PageSetup对话框,此对话框能使用户指定打印页的属性。这些属性包括纸张大小和来源,送纸方向和页边距。 
函数原型:BOOL PageSetupDlg(LPPAGESETUPDLGI ppsd); 
参数: 
Ippsd:指向一个包含初始化对话框信息的PAGESETUPDLG结构。当函数返回时,该结构存放有关用户选择的信息。 
返回值:如果用户点击OK钮,返回值为非零值,Ippsp参数指向的PAGESETUPDLG结构中的成员显示用户的选择。如果用户取消或关闭PageSetup对话框或错误出现,返回值为零。若想获得更多的错误信息,请调用CommDlgExtendedError函数

7、PrintDlg 
函数功能:该函数显示打印对话框或打印设置对话框。打印对话框使用户指定特殊的打印工作的特点。 
打印设置对话框不能应用在新应用程序中,它已经被PageSetupDlg函数创建的打印设置公共对话框所替代。 
函数原型:BOOL PrintDIg(LPPRINTDLG Ippd); 
参数: 
Ippd:指向一个含有初始化对话框信息的PRINTDLG结构。当PRINTDLG函数返回时,此结构含有关用户选择的信息。 
返回值:如果用户点击OK按钮,返回值为非零值。由lppd参数指向的PRINTDLG结构中的成员显示用户的选择。如果用户取消或关闭Print或PrinterSetup对话框或错误出现,返回值为零。若想获得更多的错误信息,请调用CommDlgError函数。如果用户取消或关闭对话框,函数返回零值:否则,返回值如下: 
   CDERR_FINDRESFAILURE PDERR_CRETELCFAILUPE 
   COERR_INITIALIZATION PDERR_DEFAULTDIFFERENT 
   CDERR_LOADRESFAILURE PDERR_DNDMMISMATCH 
   CDERR_LOADSTRFAILURE PDERR_GETDEVMODEFAIL 
   CKERR_LOCKRESFAILURE PDERR_INITFAILURE 
   CDERR_MEMALLOCFAILURE PDERR LOADDRVFAILURE 
   CDERR_MEMLOCKFAILURE PDERR_NODEFAULTPRN 
   CDERR_NOHINSTANCE PDERR_NODEVICES 
   CDFRR_NOHOOK PDERR_PARSEFAILURE 
   CDERR_NOTEMPLATE PDERR_PRINTERNOTFOUND 
   CDERR_STRUCTSIZE PDERR_RETDEFFAILURE 
备注:如果挂钩函数(由PRINTDLG结构中的IpfnrintHOOk成员或IpfnSetupHOOk成员指向的)处理WM_CTLCOLORDLG信息,挂钩函数必须返回一个刷子句柄,此刷了用来刷控制背景。

posted on 2012-11-09 14:05  fanhongyue  阅读(185)  评论(0编辑  收藏  举报

导航