版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
WindowsAPI 調(diào)用系統(tǒng)對(duì)話框轉(zhuǎn)一些從shell32.dll 導(dǎo)出的函外殼對(duì)話框外殼對(duì)話框的秘密常見的的通用對(duì)話框被封裝在 Comdlg32.dll ,這給我們的編提供了很大的便利。但它還不夠完整,我們?cè)谙到y(tǒng)里經(jīng)常能看到大量的可重復(fù)使用的對(duì)話框,但在的文檔里你卻找不到它們的調(diào)用方法。而如果我們自己去做這樣的界面是非常費(fèi)時(shí)費(fèi)力的而且也是沒有必要的,因?yàn)檫@些對(duì)話框?qū)嶋H上很容易得到。這里我要介紹一些已經(jīng)眾所周知或不為認(rèn)知的對(duì)話框,它們可以應(yīng)用在我們的程序中使程序顯得非常友好和專業(yè)。瀏覽文件夾對(duì)話框圖2.23大多數(shù)Delphi 程序員都知道如何使用 的TOpenDialog控件來讓用戶瀏覽將要打開的文件。然而有時(shí)你可能只想讓用戶選擇文件夾而不是特定的文件,windows已經(jīng)提供了一個(gè)這樣的對(duì)話框如圖 2.23所示。我們可以通過公開的函數(shù) SHBrowseForFolder來調(diào)用(這個(gè)函數(shù)定義在 ShlObj單元),函數(shù)義如下:functionSHBrowseForFolder(varBrowseInfo :TBrowseInfo):PItemIDList ;stdcall ;這個(gè)函數(shù)只有一個(gè)參數(shù),但這個(gè)參數(shù)是一個(gè)比較復(fù)雜的記錄類型TBrowseInfo=packedrecordr :pidlRoot :PItemIDList ;lpszTitle ulFlags:lpfn:m:iImage:Integer ;end;第1 頁數(shù)據(jù)成員包含對(duì)話框的父窗體的窗口句柄,可以把它設(shè)成 0PIdlRoot 數(shù)據(jù)成員指向一個(gè) PIDL的指針對(duì)應(yīng)于對(duì)話框初始化時(shí)的根目錄。指定了PIdlRoot 后,就只有根目錄及它的子目錄會(huì)出現(xiàn)在對(duì)話框中。可以設(shè)定它為nil,這時(shí)缺省的根目錄是桌面,pszDisplayName數(shù)據(jù)成員指向一個(gè)緩沖區(qū)可以用來儲(chǔ)存被用戶選中的文件名,緩沖區(qū)的大小至少為H數(shù)那么大,否則遇到特別長的文件名會(huì)溢出。lpszTitle數(shù)據(jù)對(duì)象指向一個(gè)以null結(jié)尾的字符串,字符串作為對(duì)話框的標(biāo)題來顯示。注意標(biāo)題不要太長,否則顯示時(shí)會(huì)被截?cái)?。ulFlags標(biāo)志數(shù)據(jù)對(duì)象用來限制在對(duì)話框中顯示的文件夾類型??梢栽O(shè)定它為0或下列值的組合://來設(shè)定狀態(tài)BIF_STATUSTEXT//鈕會(huì)變灰BIF_RETURNONLYFSDIRS=[messag]01//不選擇網(wǎng)絡(luò)文件夾BIF_DONTGOBELOWDOMAIN=[messge]02//給狀態(tài)條留出空白BIF_STATUSTEXT=[message]4//只選擇文件系統(tǒng)的上級(jí)目錄BIF_RETURNFSANCESTORS=[messae]08//只選擇計(jì)算機(jī)BIF_BROWSEFORCOMPUER=00//只選擇打印機(jī)BIF_BROWSEFORPRINTR=00//包括文件也可以選BIF_BROWSEINCLUDEFILE=00注意:如果你想對(duì)話框顯示lpszTitle里的用戶定制的狀態(tài)條信息,必須包括TLpfn數(shù)類型如下:第2 頁TFNBFFCallBack=function(DialogHandle :MessageI:;PID:PItemIDList ;a:stdcall ;
Integer ;這是一個(gè)回調(diào)函數(shù),可以用來在同用戶交互時(shí)控制和更新對(duì)話框的顯示。如果你不想控制對(duì)話框,可以把它設(shè)成 nil ,lParam數(shù)據(jù)對(duì)象允許你在回調(diào)數(shù)中以參數(shù) lpfn 形式返回一個(gè)指針 (通常我們用它來返回對(duì)象 ),當(dāng)然也可以把它設(shè)成為 0。IImage數(shù)據(jù)成員不需要設(shè)置,因?yàn)樗怯脕斫邮障到y(tǒng)中同文件夾相關(guān)的圖標(biāo)列表索引的,我們這里設(shè)它為 。SHBrowseForFolder函數(shù)返回一個(gè)唯一的指向被選擇的文件夾的 。如果文件夾是一個(gè)傳統(tǒng)的文件對(duì)象的話,可以用函數(shù) SHGetPathFromIDListPIDL轉(zhuǎn)換為真實(shí)的目錄。同時(shí),作為調(diào)用者,必須負(fù)責(zé)釋放被返回的 itemidentifierlist ,使用IMallocCOM接口來釋放。注意:不要用 或其他方法來釋放 這是因?yàn)橥鈿さ膬?nèi)存理是獨(dú)立的,只能用 IMalloc 來釋放?,F(xiàn)在我們已經(jīng)可以顯示對(duì)話框了,那讓我們更深入一步看看如何能夠控制對(duì)用戶動(dòng)作的反應(yīng),這就要用到了回調(diào)函數(shù) 。注意回調(diào)數(shù)的意思就是,你只是實(shí)現(xiàn)了它,系統(tǒng)就知道什么時(shí)候去調(diào)用它,就好比一個(gè)守株待兔的例子。DialogHandle 參數(shù)代表對(duì)話框窗口句柄。通??梢杂眠@個(gè)句柄給對(duì)話框發(fā)消息,MessageID參數(shù)并不是一個(gè) 結(jié)構(gòu)的記錄,它是對(duì)話框通回調(diào)函數(shù)發(fā)給用戶消息的,它可以是下面兩個(gè)值:BFFM_INITIALIZED=//對(duì)話框?qū)⒁@示BFFM_SELCHANG/用戶選中了某項(xiàng)PIDL參數(shù)包含其他的額外信息。如果 MessageID是PIDL將等于l 。如果MessageI是BFFM_SELCHANIDL的值將是一個(gè)PIDL對(duì)應(yīng)于用戶選擇的文件夾。 Data參數(shù)包含用戶付給 TbrowseInfo 記錄中的Lparam數(shù)據(jù)成員的值,通??梢詡鬟f一個(gè)對(duì)象指針。下面是一個(gè)簡(jiǎn)單的回調(diào)函數(shù)的例子:functionBrowseForFolderCallback(DialogHandle :MessageI:;PID:PItemIDList ;a:Integer ;第3 頁begin//響應(yīng)對(duì)話框的通知消息case(MessageID)ofBFFM_INITIALIZED:DialogInitialized(DialogHandle,Data) BFFM_SELCHAGEDHandleNewSelection(DialogHandle,PIDL,Data) ;Result:=0;//總返回0.在回調(diào)函數(shù)里,可以根據(jù)用戶的輸入發(fā)送三個(gè)用戶的消息給對(duì)話框,面是消息 ID://改變對(duì)話框的狀態(tài)信息BFFM_SETSTATUSTEXT=WM_USR+100//控制確定按鈕失效與否BFFM_ENABLEOK=WM_USR+101//改變選擇的文件夾BFFM_SETSELECTION=WM_USR+102通常,這些消息發(fā)送給對(duì)話框使之根據(jù)用戶的選擇更新顯示,當(dāng)然你也可以發(fā)送其他的消息給對(duì)話框,比如可以發(fā)送 WM_SETTE息來改變對(duì)話的標(biāo)題。下面是一個(gè)發(fā)送消息的例子 (見表2.11):PostMessage(DialogHandle,BFFM_SETSELECTION,True,LPARAM(PChar(NewPath))) ;表2.11MessageIDWParamLParamBFFM_SETSTATUST使用一個(gè)向新的狀態(tài)信息的 Pchar有使用True使得確認(rèn)按鈕有效,F(xiàn)alse無效BFFM_SETSELECTO果m是路徑則為 True,若m是PIDL則為False指向被選擇的文件路徑或 PIDL的Pchar第4 頁另外要提到的是,Delphi 也提供了對(duì)這個(gè)函數(shù)的封裝,那就是SelectDirectory 關(guān)于對(duì)話框通常我們都要在自己的程序里加上一個(gè)關(guān)于對(duì)話框來顯示一些版本信息Windows為我們提供了一個(gè)標(biāo)準(zhǔn)的對(duì)話框如圖2.24范圍內(nèi)對(duì)它定制,不過它只適合顯示簡(jiǎn)單的標(biāo)識(shí)和文本(我覺得用處極小)。我們可以通過函數(shù)ShellAbout來調(diào)用它(聲明在ShellAPI單元里),函數(shù)定義如下:functionShellAbout(Owner :DApplicationName:PCha;OtherText:PChar;IconHandleInteger ;stdcall ;Owner參數(shù)標(biāo)識(shí)了擁有對(duì)話框的父窗體句柄,通常設(shè)為 0,表明沒有父窗體。ApplicationName 參數(shù)包含對(duì)話框的標(biāo)題,字符串中可以包含 "#"字符,它能起到分割符的作用。這種情況下,函數(shù)會(huì)把分割符前的字符串作為標(biāo)題欄,分割符后的部分作為 "Microsoft" 字符串后的第一行。 OtherText 參數(shù)包含了打算顯示在 Microsoft 版本和版權(quán)信息后的字符串。 IconHandle參數(shù)標(biāo)識(shí)了打算顯示在對(duì)話框上的圖標(biāo)標(biāo)識(shí),如果設(shè)為 函數(shù)會(huì)顯示 缺省的標(biāo)。圖2.24圖2.25格式化對(duì)話框SHFormatDrive函數(shù)會(huì)顯示一個(gè)格式化對(duì)話框,如圖2.25個(gè)半公開的函數(shù)。但現(xiàn)在它不在微軟的里。然而微軟承認(rèn)它的存在并把它從Shell32.dll里用名字公開聲明,Delphi中的函數(shù)定義如下:functionSHFormatDrive(Owner :De:;FormatID:;OptionFlags:):stdcall Owner參數(shù)標(biāo)識(shí)擁有對(duì)話框的窗體句柄,文檔中推薦不要設(shè)為 0,但實(shí)際上好像沒什么影響。 Drive 參數(shù)是用來標(biāo)識(shí)打算格式化的驅(qū)動(dòng)器的數(shù)值,它是以0為底的,從 A開始A:=0,B:=1依此類推。FormatID參數(shù)允許我們指定一個(gè)格式化的模板,通常情況下,只要賦值為 可以了OptionFlags 參數(shù)是一個(gè)選項(xiàng)掩碼,來確定格式化的選項(xiàng)。當(dāng)前有兩個(gè)選項(xiàng):SHFMT_OPT_FULL=[messag]0//快速格式化第5 頁SHFMT_OPT_SYSONLY=[messae]/2復(fù)制系統(tǒng)文件如果函數(shù)調(diào)用失敗,會(huì)返回下列錯(cuò)誤中的一種來表明錯(cuò)誤原因,錯(cuò)誤常數(shù)如下:SHFMT_NOFORMAT=$FFFF//DSHFMT_CANCEL=$FFFF/格式化被取消了SHFMT_ERROR=$FFFF/其他錯(cuò)誤WindowsNT和WideChar在進(jìn)一步研究未公開的函數(shù)前 ,我們必須清楚一點(diǎn),對(duì)于未公開的函數(shù)來說以null 結(jié)尾的字符串類型參數(shù)大多數(shù)被聲明為類型指針而不是 。這有點(diǎn)像陷阱,但必須承認(rèn)這是事實(shí)。在 Win9X上所有的字符串類型參數(shù)聲明為PAnsiChar,而在WindowsNT上被聲明為 。如果你想你的應(yīng)用序適應(yīng)所有平臺(tái),你必須考慮兩種情況,在運(yùn)行時(shí)要判斷平臺(tái)類型,這是很討厭的,但這也是使用未公開的 API的代價(jià)。選擇圖標(biāo)對(duì)話框圖2.26我們要討論的第一個(gè)完全未公開的函數(shù)是 PickIconDlg 。如圖2.26所示這個(gè)函數(shù)會(huì)顯示一個(gè)對(duì)話框,用戶可以用來從文件中選擇一個(gè)圖標(biāo)資源。它通常是用文件類型編輯器來關(guān)聯(lián)圖標(biāo)和某一文件類型的,也會(huì)在快捷方式對(duì)話框中被調(diào)用來修改快捷方式的圖標(biāo)。這個(gè)函數(shù)從 Shell32.dll 用值62來公開來,函數(shù)定義如下:functionPickIconDlg(Owner :DFileNam:Pointer ;MaxFileNameChar:varIconIndex :)l;stdcall ;Owner參數(shù)和上面的意義類似。 FileName參數(shù)指向一個(gè)緩沖區(qū),包含了被瀏覽圖標(biāo)的文件名,緩沖區(qū)要不小于 MAX_PATH+1MaxFileNameChars指字符數(shù)量大小。IconIndex 常數(shù)是以0為底的圖標(biāo)索引,當(dāng)對(duì)話框打開時(shí)會(huì)把焦點(diǎn)定在 IconIndex 對(duì)應(yīng)的圖標(biāo)上,函數(shù)返回后, IconIndex 指向最后被選的圖標(biāo)索引。如果用戶點(diǎn)了取消按鈕,函數(shù)返回 False。運(yùn)行程序?qū)υ捒虻? 頁圖2.27RunFileDlg函數(shù)是相當(dāng)靈活的,如圖2.27所示就是調(diào)用開始菜單的運(yùn)行子菜單后會(huì)顯示的對(duì)話框,我們通過值61把它從Shell32.dll出來。下面是函數(shù)聲明:er :DIconHandle:;WorkPath:Pointer ;Caption:Pointer ;Description :Pointer ;Flags:UINT);stdcall ;Owner參數(shù)就不用再說了。 IconHandle參數(shù)是顯示在對(duì)話框上的圖標(biāo)句柄,如果為 nil ,缺省的icon 將會(huì)使用。WorkPath參數(shù)指向一個(gè)字符串來指定應(yīng)用程序運(yùn)行的工作路徑。 Title 參數(shù)指向作為對(duì)話框標(biāo)題的字符串,如果為nil ,就使用缺省的標(biāo)題。 Description 參數(shù)指向一個(gè)描述字符串,主要是告訴用戶如何去做,可以設(shè)為 nil ,這時(shí)使用缺省的描述。 Flags參數(shù)用一位掩碼來設(shè)定對(duì)話框的屬性。下面是定義:/=移去瀏覽按鈕//無缺省的選項(xiàng)/由文件名確定工作路徑//去掉編輯框標(biāo)簽有效)
/
去掉在單獨(dú)的內(nèi)存空間運(yùn)行的復(fù)選框 (只對(duì)NT這個(gè)對(duì)話框一個(gè)很好的特性是允許你控制用戶可以運(yùn)行的應(yīng)用程序。當(dāng)用戶選擇了確認(rèn)按鈕,對(duì)話框的父窗體會(huì)發(fā)送一個(gè)通知消息來傳遞將要運(yùn)行程序信息。通知消息是一個(gè) Y息,它的通知代碼設(shè)定為)然后 m指向一個(gè) TNM_RunFileDlg記錄。定義如下:TNM_RunFileDlg=packedrecordr :lpFile :Pointer;lpDirectory :Pointer ;:l;hdr數(shù)據(jù)對(duì)象是 類型,它是一種標(biāo)準(zhǔn)的 Windows數(shù)據(jù)類型,每Y息的lParam參數(shù)都會(huì)指向這個(gè)數(shù)據(jù)成分。同時(shí)根據(jù)不同的消息類型,可能一些額外的數(shù)據(jù)跟在記錄后面,標(biāo)準(zhǔn)的 記錄定義如下:第7 頁TNMHdr=packedrecord:idFrom記錄中的包含發(fā)送消息的窗口句柄, idFrom則包含發(fā)送消息控件標(biāo)示符,code中包含標(biāo)識(shí)被發(fā)送的消息的通知代碼。在記錄后被打包的額外數(shù)據(jù)包含三個(gè)數(shù)據(jù)成分: LpFile 指向一包含將要運(yùn)行的文件的路徑字符串; LpDirectory 指向正在運(yùn)行程序的工作目錄字符串;最后, 用來指定將要運(yùn)行的應(yīng)用程序是否可見。對(duì)于本文中特定的消息,只對(duì) TNMHdr 錄中的 Code感興趣,通過檢驗(yàn)Code可以確保我們收到一個(gè)運(yùn)行文件校驗(yàn)消息,同時(shí)使我們可以存取額外的TNM_RunFileDlg數(shù)據(jù)成員。當(dāng) 記錄中的code等于RFN_VALIDATE(-510)時(shí),可以獲得一個(gè) TNM_RunFileDlg記錄。下面是校驗(yàn)消息的代碼:varFileToRun :String ;ifTheMessage.Msg=WM_NOTIFYthenifPNMHdr(TheMessage.LParam).code=RFN_VALIDATEthenWideCharToStrVar(PNM_RUNFILEDLG(TheMessage.LParam).lpFile,FileToRun) ;注意只有當(dāng)我們已經(jīng)檢驗(yàn) 的Code為E,才映射LParam參數(shù)為PNM_RunFileDlg類型。通知消息的返回值決定了應(yīng)用程序是否能夠運(yùn)行,下面是可能的值:] //允許程序運(yùn)行//取消操作,關(guān)閉對(duì)話框=//查找文件對(duì)話框圖2.28調(diào)用查找文件對(duì)話框的函數(shù)是 SHFindFiles,對(duì)話框如圖 2.28所示。是從Shell32.dll 按索引值 90公開出來的:functionSHFindFiles(SearchRoot :PItemIDList ;第8 頁SavedSearchFile:PItemIDList) :LongBool;stdcall ;SearchRoot參數(shù)允許從一個(gè)特定的文件夾開始查找,同在資源管理器中在文件夾上用右鍵點(diǎn)擊查找菜單的效果是一樣的。如果設(shè)為 nil ,那么查找是從桌面開始的。SavedSearchFile 參數(shù)讓你指定一個(gè)以前查詢保存的查找策略文件(*.fnd 文件),根據(jù)以前的設(shè)定來查找,若不需要的話可以設(shè)定為 nil 。如果你指定了一個(gè)非空值的 SearchRootPIDL,那么在調(diào)用完 SHFindFiles 必須負(fù)責(zé)釋放掉。但是有點(diǎn)奇怪的是,如果你指定了一個(gè)非空的SavedSearchFilePIDL 參數(shù),函數(shù)成功調(diào)用的話,你不能去釋放這個(gè) 否則會(huì)出錯(cuò),但如果調(diào)用失敗了的話,你必須釋放它。同大多數(shù)對(duì)話框函數(shù)不一樣,這個(gè)函數(shù)是非模態(tài)的,也就是系統(tǒng)在另外一個(gè)獨(dú)立的線程中啟動(dòng)對(duì)話框,然后立即返回,對(duì)話框會(huì)在你的程序結(jié)束后自動(dòng)關(guān)閉。也就是說你沒有任何直接的方法來告訴用戶如何使用查找到的結(jié)果,所以要想知道用戶找到的文件的話,最好是讓你的程序支持文件拖放,以便讓用戶把找到的文件拖放給你。查找電腦對(duì)話框同SHFindFiles 比較接近的一個(gè)函數(shù)是 這個(gè)函數(shù)調(diào)用的結(jié)果同開始菜單上查找電腦菜單調(diào)用的結(jié)果是一樣的。它的參數(shù)同SHFindFiles 完全一樣,不同之處在于它完全忽略傳遞給它的參數(shù),很顯然是保留起來為了將來擴(kuò)展的需要。這里我們只要把參數(shù)都設(shè)成 nil 就可以了,外注意這個(gè)對(duì)話框也是非模態(tài)的。 SHFindComputer是從Shell32.dll 以索引號(hào)91公開出來的:functionSHFindComputer(Reserved1 :PItemIDList ;Reserved2:PItemIDList) :LongBoolstdcall 查找文件對(duì)話框通過調(diào)用GetFileNameFromBrowse函數(shù)可以調(diào)出這個(gè)對(duì)話框,不過說實(shí)在的,它實(shí)際上只是 GetOpenFileName函數(shù)的簡(jiǎn)單封裝。而我們常用的TOpenDialog控件也是對(duì) GetOpenFileName函數(shù)封裝,這個(gè)函數(shù)我們很少會(huì)去直接用它。不過還是寫出來吧,它是從 Shell32.dll 里按索引值 63公開出的:functionGetFileNameFromBrowse(Owner :FileNam:Pointer ;:第9 頁InitialDirectory :Pointer ;DefaultExtension :Pointer ;Filter :Pointer;CaptionPointer) :LongBoolstdcall 圖2.29大多數(shù)參數(shù)對(duì)應(yīng)于 OPENFILENA構(gòu)的成員。Owner參數(shù)我想就不用重復(fù)了,F(xiàn)ileName參數(shù)指向一個(gè)初始化對(duì)話框編輯控制文件名的緩沖區(qū),函數(shù)返回后 FileName包含被選擇的文件路徑,它的大小一般設(shè)成 1么大。MaxFileNameChars參數(shù)用來指定 FileName緩沖區(qū)的大小。InitialDirectory 參數(shù)指向?qū)υ捒虺跏蓟哪夸浢绻?FileName參數(shù)指定了,InitialDirectory 就會(huì)被忽略而使用 FileName參數(shù)中的路徑。DefaultExtension 參數(shù)指向一個(gè)包含要搜索的缺省擴(kuò)展名的字符串。 Filter參數(shù)指向一個(gè)以 null 結(jié)尾的可以用來在下拉列表中限定文件類型的過濾字符串。Caption 參數(shù)指向?qū)υ捒驑?biāo)題字符串。如果用戶選擇了一個(gè)要打開的文件,函數(shù)返回 True,當(dāng)有錯(cuò)誤發(fā)生,戶選擇取消按鈕或關(guān)閉對(duì)話框的話會(huì)返回 False。外殼對(duì)象屬性對(duì)話框另一個(gè)未公開的對(duì)話框函數(shù)是SHObjectProperties,它可以用來顯示外殼對(duì)象的屬性,比如驅(qū)動(dòng)器、文件夾或文件等,運(yùn)行效果如圖2.29數(shù)可以從Shell32.dll中按索引值178公開出來,定義如下:functionSHObjectProperties(Owner :DFlags:;;InitialTabName :Pointer) :LongBool;stdcall ;Flags參數(shù)用來指定 ObjectName參數(shù)對(duì)應(yīng)對(duì)象的類型,它可以是下列標(biāo)識(shí)://打印機(jī)OPF_PRINTERNAE=//路徑OPF_PATHNAE=ObjectName參數(shù)指向一個(gè)包含路徑名的字符串或是要顯示屬性的打印機(jī)名。如果打印機(jī)是本地的,可以使用實(shí)際的打印機(jī)名,如果是網(wǎng)絡(luò)打印機(jī),需要使用完整的 樣式名稱,比如\COMPUTERNAME\PRINTERNAME第10 頁InitialTabName 參數(shù)指向一個(gè)屬性對(duì)話框中頁面名稱字符串,用來指定要顯示的缺省頁面。如果 InitialTabName 參數(shù)為 nil,或不匹配任何頁面的名稱第一個(gè)屬性頁面將會(huì)被顯示。如果函數(shù)調(diào)用成功會(huì)返回 True,如果失敗會(huì)返回 False。要想獲得擴(kuò)的錯(cuò)誤信息,可以調(diào)用 API函數(shù)GetLastError 。要注意的是這個(gè)對(duì)話框是非模態(tài)的,類似于查找文件對(duì)話框,所以函數(shù)一被調(diào)用,就肯定會(huì)顯示一個(gè)對(duì)話框,同時(shí)我們沒有辦法知道用戶什么時(shí)候關(guān)閉了對(duì)話框。映射網(wǎng)絡(luò)驅(qū)動(dòng)對(duì)話框圖2.30圖2.30顯示了映射網(wǎng)絡(luò)驅(qū)動(dòng)器的對(duì)話框,我們通過SHNetConnectionDialog 函數(shù)調(diào)用它(win9x 和WinNT上都支持),它可以索引值160從Shell32.dll 暴露出來,函數(shù)定義如下:functionSHNetConnectionDialog(Owner ::Pointer;:)stdcall SHStartNetConnectionDialog 函數(shù)也會(huì)顯示同樣的對(duì)話框,但它顯示的對(duì)話框是非模態(tài)的,同時(shí)只在 上才支持。它可以按索引值 215Shell32.dll 中公開出來,函數(shù)定義如下:functionSHStartNetConnectionDialog(Owner ::PWideCha;:)stdcall 上面兩個(gè)函數(shù)的參數(shù)完全相同。其中 參數(shù)指向一個(gè)要連接的網(wǎng)絡(luò)資源 路徑名。指定了這個(gè)參數(shù)的話,顯示的對(duì)話框中被預(yù)設(shè)的連接資源就不可改變了。如果這個(gè)參數(shù)為 nil ,則在對(duì)話框中用戶可以指定要連接的資源。ResourceType參數(shù)可以是下面的值之一: ISK的不同將會(huì)生成不同的對(duì)話框。參數(shù)為K我們?yōu)榫W(wǎng)絡(luò)驅(qū)動(dòng)資源指定一個(gè)盤符,另一個(gè)參數(shù)允許我們映射一個(gè)并行口名比如 為一個(gè)網(wǎng)絡(luò)打印機(jī)。然而,不知道為什么T在NT上無效。圖2.31如果函數(shù)調(diào)用成功的話,返回值是 如果用戶取消的對(duì)話框則返回-1($FFFFFFFF),如果調(diào)用失敗則返回其他的錯(cuò)誤代碼,具體錯(cuò)誤信息可以用GetLastErrorAPI 調(diào)用獲得。第11 頁關(guān)閉系統(tǒng)對(duì)話框ExitWindowsDialog 和RestartDialog 函數(shù)可以用來顯示關(guān)閉和重啟系統(tǒng)對(duì)話框(如圖2.31),它們同公開的 ExitWindowsExAPI 函數(shù)沒有什么太大的不同,但在其過程中都會(huì)產(chǎn)生一個(gè)對(duì)話框。 ExitWindowsDialog 函數(shù)可以按引值60從Shell32.dll 中公開出來,RestartDialog 函數(shù)的在 Shell32.dll中的索引值則是 兩個(gè)函數(shù)的定義如下:eExitWindowsDialog(Owner :)stdcall ;functionr :D:Pointer ;ExitType:):stdcall ;對(duì)ExitWindowsDialog 函數(shù)來說,對(duì)話框好像并不使用 Owner參數(shù)作為父窗口,在 Windows95上,當(dāng)操作成功的話 owner窗口會(huì)收到一個(gè) 消息。在 Windows上,owner窗口根本不被使用。同時(shí)這個(gè)函數(shù)沒有返回值,所以沒有辦法知道用戶選擇了什么操作以及操作是否被取消了。RestartDialog函數(shù)更有用一些,當(dāng)我們修改了系統(tǒng)的設(shè)置,并希望重新啟動(dòng)系統(tǒng)使修改生效的時(shí)候可以使用這個(gè)函數(shù)。Reason參數(shù)指向一個(gè)要顯示在對(duì)話框中的字符串,用來解釋關(guān)閉系統(tǒng)的原因。ExitType參數(shù)指定關(guān)閉類型,可以使用ExitWindowsEX函數(shù)使用值的一個(gè)子集及額外的幾個(gè)新值,下面是它們的完全列表:EWX_LOGOFF=[messge]EWX_SHUTDWN=EWX_REBOT=EW_RESTARTWINDWS=EW_REBOOTSYSEM=EW_EXITANDEXECPP=如果用戶選擇執(zhí)行關(guān)閉操作,函數(shù)返回 否則返回。要注意的是顯示在對(duì)話框中的原因字符串后總會(huì)跟著一個(gè)系統(tǒng)缺省提供的字符串用來顯示確認(rèn)信息,所以應(yīng)該在我們的 Reason字符串后附上空格回車換行字符。另外返回值不能用于確定操作的成功性,它只表明用戶的選擇,如果重啟操作由于某些原因失敗了,返回值仍然是 。同時(shí)要注意的是想調(diào)用成功,用戶還必須有 SE_SHUTDOWN_A(在T上)。第12 頁缺少內(nèi)存對(duì)話框x一個(gè)未公開的函數(shù),當(dāng)系統(tǒng)內(nèi)存不足時(shí)可以用來顯示標(biāo)準(zhǔn)的外殼信息對(duì)話框,它在 Shell32.dll 中的索引值是 函定義如下:functionSHOutOfMemoryMessageBox(Owne:Caption:Pointer;Style:UINT):Integer ;stdcall 它會(huì)調(diào)用MessageBox同時(shí)傳遞 3個(gè)標(biāo)準(zhǔn)的參數(shù)和ERROR_OUTOFMEY息。n參數(shù)指向?qū)υ捒驑?biāo)題字符串。如果Caption 為nil ,父窗口的標(biāo)題就會(huì)被使用。 Style 參數(shù)可以被設(shè)置為任MessageBo函數(shù)使用的 MB_XX常數(shù)的組合,通常設(shè)置它為 MB_O或MB_ICONHN函數(shù)調(diào)用返回值參見 SD中MessageBo函數(shù)說明。當(dāng)MessageBo函數(shù)被調(diào)用時(shí),MB_SETFOREGRU會(huì)被添加到 參數(shù)中,但如果第一次調(diào)用失敗了的話, 函數(shù)會(huì)被再次調(diào)用,這次MB_SYSTEMMOL會(huì)被添加到 Style 參數(shù)中。MB_SYSTEMMODALMB_ICONHA識(shí)結(jié)合后會(huì)忽略內(nèi)存狀況來顯示消息對(duì)話框。當(dāng)內(nèi)存確實(shí)不足時(shí),函數(shù)不會(huì)顯示任何東西,然而它仍然會(huì)返回 函數(shù)調(diào)用結(jié)果。所以我們可以根據(jù)返回值判斷函數(shù)是否調(diào)用成功了??臻g不足對(duì)話框圖2.32另一個(gè)資源相關(guān)的函數(shù)是 SHHandleDiskFull,它會(huì)顯示磁盤不足的信對(duì)話框(如圖2.32)。我們可以在由于沒有足夠磁盤空間時(shí)導(dǎo)致程序無法運(yùn)行的條件下調(diào)用這個(gè)函數(shù),調(diào)用后,如果回收站中有什么東西沒有刪除的話,對(duì)話框允許用戶清空回收站來釋放磁盤空間。它在 Shell32.dll 中的索引值為函數(shù)的定義如下:eSHHandleDiskFull(Owner :De:);stdcall ;Drive參數(shù)用于指定以0為底的驅(qū)動(dòng)器盤符。0代表1代表不會(huì)顯示,同時(shí)也沒有任何返回值表示對(duì)話框是否顯示,還無法知道用戶的操作,比如它是否真的清空了??雌饋肀容^可行的應(yīng)用只能是程序自行監(jiān)視磁盤剩余空間,只是使用這個(gè)對(duì)話框作為一個(gè)快速修復(fù)的工具。一般外殼消息對(duì)話框第13 頁ShellMessageBox函數(shù)僅僅是一個(gè)對(duì) 函數(shù)的簡(jiǎn)單封裝函數(shù)它允許使用字符串資源標(biāo)識(shí)符或標(biāo)準(zhǔn)的以 null 結(jié)尾的字符串,同時(shí)還允許加入支持格式化 ForamtMessage函數(shù)的控制符。ShellMessageBox函數(shù)在Shell32.dll 中的索引值為 functionShellMessageBoxA(Module :THandl;:Text:StyleParameters:arrayofPointer) :Integer ;cdecl;更確切地說這個(gè)函數(shù)應(yīng)該叫 ShellMessageBoxA因?yàn)樗恢С?ANSI字符串,還有一個(gè) 的版本的函數(shù) ShellMessageBox,它的索引值為 但它只在 Windows上才有,函數(shù)定義如下:functionShellMessageBoxW(Module :THandl;Owne:Text:PWideChr n:PWideCha;Style:;Parameters:arrayofPointer) :Integer ;cdecl;Module參數(shù)是提供字符串資源的模塊句柄,句柄可以用GetModuleHandle函數(shù)獲得。顧名思義 Text參數(shù)指向一個(gè)要顯示在對(duì)話框的文本,它也可以是資源字符串 ID,文本中可以包括格式控制序列,它將會(huì)被在Parameters中提供的額外字符串替代。控制符格式為 "%#",其中"#"是額外字符串在參數(shù)中的位置,比如 將被第一個(gè) Parameters數(shù)組中的字符串元素替代,"%3"將會(huì)被第三個(gè)元素替代,依此類推。 Caption參數(shù)指向?qū)υ捒驑?biāo)題文本,同樣它也可以是資源 ID,如果參數(shù)為 nil ,Owner指定的窗口標(biāo)題將被用于對(duì)話框標(biāo)題。 Style 參數(shù)是由位掩碼標(biāo)識(shí)組成的,可以設(shè)置成MessageBox函數(shù)支持的 常數(shù)的組合。返回值同 MessageBox完全一樣對(duì)于這個(gè)函數(shù)很重要的一點(diǎn)是微軟公司使用 cdecl來輸出這個(gè)函數(shù)而不是通常的 stdcall 。此外,Parameters參數(shù)使用了 C語言中的可變參數(shù)列表,這意味著這個(gè)函數(shù)不是語言無關(guān)的,這使得調(diào)用起來非常麻煩,因?yàn)?Delphi并不直接支持 cdecl和可變參數(shù)列表。為了解決這個(gè)問題, Parameters參數(shù)被映射為一個(gè)動(dòng)態(tài)指針列表。同時(shí)我們還需要使用嵌入式匯編來建立 cdecl 式的堆棧。由于動(dòng)態(tài)指針列表的性質(zhì),我們必須至少指定一個(gè)指針值。如果不想指定要替代的字符串,簡(jiǎn)單設(shè)置為 nil 就可以了。衛(wèi)生管理制度1 總則1.1 為了加強(qiáng)公司的環(huán)境衛(wèi)生管理,創(chuàng)造一個(gè)整潔、文明、溫馨的購物、辦公環(huán)境,根據(jù)《公共場(chǎng)所衛(wèi)生管理?xiàng)l例》的要求,特制定本制度。1.2 集團(tuán)公司的衛(wèi)生管理部門設(shè)在企管部,并負(fù)責(zé)將集團(tuán)公司的衛(wèi)生區(qū)域詳細(xì)劃分到各部室,各分公司所轄區(qū)域衛(wèi)生由分公司客服部負(fù)責(zé)劃分,確保無遺漏。2 衛(wèi)生標(biāo)準(zhǔn)2.1 室內(nèi)衛(wèi)生標(biāo)準(zhǔn)2.1.1 地面、墻面:無灰塵、無紙屑、無痰跡、無泡泡糖等粘合物、無積水,墻角無灰吊、無蜘蛛網(wǎng)。2.1.2 門、窗、玻璃、鏡子、柱子、電梯、樓梯、燈具等,做到明亮、無灰塵、無污跡、無粘合物,特別是玻璃,要求兩面明亮。2.1.3 柜臺(tái)、貨架:清潔干凈,貨架、柜臺(tái)底層及周圍無亂堆亂放現(xiàn)象、無灰塵、無粘合物,貨架頂部、背部和底部干凈,不存放雜物和私人物品。2.1.4 購物車(筐)、直接接觸食品的售貨工具(包括刀、叉等):做到內(nèi)外潔凈,無污垢和粘合物等。購物車(筐)要求每天營業(yè)前簡(jiǎn)單清理,周五全面清理消毒;售貨工具要求每天消毒,并做好記錄。2.1.5 商品及包裝:商品及外包裝清潔無灰塵(外包裝破損的或破舊的不得陳列)。2.1.6 收款臺(tái)、服務(wù)臺(tái)、辦公櫥、存包柜:保持清潔、無灰塵,臺(tái)面和側(cè)面無灰塵、無灰吊和蜘蛛網(wǎng)。桌面上不得亂貼、亂畫、亂堆放物品,用具擺放有序且干凈,除當(dāng)班的購物小票收款聯(lián)外,其它單據(jù)不得存放在桌面上。2.1.7 垃圾桶:桶內(nèi)外干凈,要求營業(yè)時(shí)間隨時(shí)清理,不得溢出,每天下班前徹底清理,不得留有垃圾過夜。2.1.8 窗簾:定期進(jìn)行清理,要求干凈、無污漬。2.1.9 吊飾:屋頂?shù)牡躏椧鬅o灰塵、無蜘蛛網(wǎng),短期內(nèi)不適用的吊飾及時(shí)清理徹底。2.1.10 內(nèi)、外倉庫:半年徹底清理一次,無垃圾、無積塵、無蜘蛛網(wǎng)等。2.1.11 室內(nèi)其他附屬物及工作用具均以整潔為準(zhǔn),要求無灰塵、無粘合物等污垢。2.2 室外衛(wèi)生標(biāo)準(zhǔn)2.2.1 門前衛(wèi)生:地面每天班前清理,平時(shí)每一小時(shí)清理一次,每周四營業(yè)結(jié)束后有條件的用水沖洗地面(冬季可根據(jù)情況適當(dāng)清理),墻面干凈且無亂貼亂畫。2.2.2 院落衛(wèi)生:院內(nèi)地面衛(wèi)生全天保潔,果皮箱、消防器械、護(hù)欄及配電箱等設(shè)施每周清理干凈。垃圾池周邊衛(wèi)生清理徹底,不得有垃圾溢出。2.2.3 綠化區(qū)衛(wèi)生:做到無雜物、無紙屑、無塑料袋等垃圾。3 清理程序3.1 室內(nèi)和門前院落等區(qū)域衛(wèi)生:每天營業(yè)前提前10分鐘把所管轄區(qū)域內(nèi)衛(wèi)生清理完畢,營業(yè)期間隨時(shí)保潔。下班后5-10分鐘清理桌面及衛(wèi)生區(qū)域。3.2 綠化區(qū)衛(wèi)生:每周徹底清理一遍,隨時(shí)保
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026安徽蚌埠市禹會(huì)區(qū)招聘村級(jí)后備干部招聘5人備考題庫完整參考答案詳解
- 2026廣西農(nóng)業(yè)科學(xué)院甘蔗研究所甘蔗綠色高效栽培技術(shù)團(tuán)隊(duì)招聘編制外工作人員1人備考題庫及答案詳解(奪冠系列)
- 漿砌塊石擋墻施工方案
- 護(hù)坡工程施工方案
- 監(jiān)控施工方案
- 2025年(工業(yè)機(jī)器人技術(shù))機(jī)器人系統(tǒng)維護(hù)試題及答案
- 2025育嬰師(中級(jí))職業(yè)技能鑒定考試模擬試題及答案
- 2026 年中職保健按摩師(保健按摩)試題及答案
- 西寧2025年西寧中心招聘11名工作人員(第二批)筆試歷年參考題庫附帶答案詳解
- 茂名茂名市茂南區(qū)2025年現(xiàn)場(chǎng)招聘6名急需緊缺人才筆試歷年參考題庫附帶答案詳解
- 波形護(hù)欄施工質(zhì)量控制方案
- 電梯井道腳手架搭設(shè)方案
- DL∕T 622-2012 立式水輪發(fā)電機(jī)彈性金屬塑料推力軸瓦技術(shù)條件
- 傳染病學(xué)-病毒性肝炎
- 重慶市沙坪壩小學(xué)小學(xué)語文五年級(jí)上冊(cè)期末試卷
- 陶瓷巖板應(yīng)用技術(shù)規(guī)程
- 中藥制劑技術(shù)中職PPT完整全套教學(xué)課件
- 龍虎山正一日誦早晚課
- WORD版A4橫版密封條打印模板(可編輯)
- 1比較思想政治教育
- 藝術(shù)課程標(biāo)準(zhǔn)(2022年版)
評(píng)論
0/150
提交評(píng)論