天天看點

windows的特殊對話框

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資訊,挂鈎函數必須傳回一個刷子句柄,此刷了用來刷控制背景。

繼續閱讀