WindowsAPI調用系統(tǒng)對話框_第1頁
WindowsAPI調用系統(tǒng)對話框_第2頁
WindowsAPI調用系統(tǒng)對話框_第3頁
WindowsAPI調用系統(tǒng)對話框_第4頁
WindowsAPI調用系統(tǒng)對話框_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Windows API調用系統(tǒng)對話框轉一些從shell32.dll導出的函數外殼對話框外殼對話框的秘密常見的Windows的通用對話框被封裝在Comdlg32.dll,這給我們的編程提供了很大的便利。但它還不夠完整,我們在系統(tǒng)里經常能看到大量的可重復使用的對話框,但在Windows的文檔里你卻找不到它們的調用方法。而如果我們自己去做這樣的界面是非常費時費力的而且也是沒有必要的,因為這些對話框實際上很容易得到。這里我要介紹一些已經眾所周知或不為認知的對話框,它們可以應用在我們的程序中使程序顯得非常友好和專業(yè)。瀏覽文件夾對話框圖2.23大多數Delphi程序員都知道如何使用VCL的TOpenDia

2、log控件來讓用戶瀏覽將要打開的文件。然而有時你可能只想讓用戶選擇文件夾而不是特定的文件,windows已經提供了一個這樣的對話框如圖2.23所示。我們可以通過公開的函數SHBrowseForFolder來調用(這個函數定義在ShlObj單元),函數定義如下:function SHBrowseForFolder(var BrowseInfo:TBrowseInfo):PItemIDList;stdcall;這個函數只有一個參數,但這個參數是一個比較復雜的記錄類型TBrowseInfo=packed record hwndOwner:HWND;pidlRoot:PItemIDList;pszDi

3、splayName:PChar;lpszTitle:PChar;ulFlags:UINT;lpfn:TFNBFFCallBack;lParam:LPARAM;iImage:Integer;end;hwndOwner數據成員包含對話框的父窗體的窗口句柄,可以把它設成0。PIdlRoot數據成員指向一個PIDL的指針對應于對話框初始化時的根目錄。指定了PIdlRoot后,就只有根目錄及它的子目錄會出現在對話框中。可以設定它為nil,這時缺省的根目錄是桌面,pszDisplayName數據成員指向一個緩沖區(qū)可以用來儲存被用戶選中的文件名,緩沖區(qū)的大小至少為MAX_PATH這個常數那么大,否則遇到特別

4、長的文件名會溢出。lpszTitle數據對象指向一個以null結尾的字符串,字符串作為對話框的標題來顯示。注意標題不要太長,否則顯示時會被截斷。ulFlags標志數據對象用來限制在對話框中顯示的文件夾類型。可以設定它為0或下列值的組合:/在對話框中會包含一個狀態(tài)區(qū),回調函數可以通過向對話框發(fā)送消息來設定狀態(tài)BIF_STATUSTEXT/只允許選擇標準文件系統(tǒng),若選了非標準的文件夾如打印機,確認按鈕會變灰BIF_RETURNONLYFSDIRS=message01;/不選擇網絡文件夾BIF_DONTGOBELOWDOMAIN=message02;/給狀態(tài)條留出空白BIF_STATUSTEXT=m

5、essage04;/只選擇文件系統(tǒng)的上級目錄BIF_RETURNFSANCESTORS=message08;/只選擇計算機BIF_BROWSEFORCOMPUTER=00;/只選擇打印機BIF_BROWSEFORPRINTER=00;/包括文件也可以選BIF_BROWSEINCLUDEFILES=00;注意:如果你想對話框顯示lpszTitle里的用戶定制的狀態(tài)條信息,必須包括BIF_STATUSTEXT標識。Lpfn數據對象是一個回調函數類型的指針,函數類型如下:TFNBFFCallBack=function(DialogHandle:HWND;MessageID:UINT;PIDL:PIt

6、emIDList;Data:LPARAM):Integer;stdcall;這是一個回調函數,可以用來在同用戶交互時控制和更新對話框的顯示。如果你不想控制對話框,可以把它設成nil,lParam數據對象允許你在回調函數中以參數lpfn形式返回一個指針(通常我們用它來返回對象),當然也可以把它設成為0。IImage數據成員不需要設置,因為它是用來接收系統(tǒng)中同文件夾相關的圖標列表索引的,我們這里設它為0。SHBrowseForFolder函數返回一個唯一的指向被選擇的文件夾的PIDL。如果文件夾是一個傳統(tǒng)的文件對象的話,可以用函數SHGetPathFromIDList把PIDL轉換為真實的目錄。同

7、時,作為調用者,必須負責釋放被返回的item identifier list,使用IMalloc COM接口來釋放。注意:不要用FreeMem或其他方法來釋放PIDL,這是因為外殼的內存管理是獨立的,只能用IMalloc來釋放?,F在我們已經可以顯示對話框了,那讓我們更深入一步看看如何能夠控制對用戶動作的反應,這就要用到了回調函數TFNBFFCallBack。注意回調函數的意思就是,你只是實現了它,系統(tǒng)就知道什么時候去調用它,就好比一個守株待兔的例子。DialogHandle參數代表對話框窗口句柄。通常可以用這個句柄給對話框發(fā)消息,MessageID參數并不是一個TMessage結構的記錄,它是

8、對話框通過回調函數發(fā)給用戶消息的,它可以是下面兩個值:BFFM_INITIALIZED=1;/對話框將要顯示BFFM_SELCHANGED=2;/用戶選中了某項PIDL參數包含其他的額外信息。如果MessageID是BFFM_INITIALIZED,PIDL將等于nil。如果MessageID是BFFM_SELCHANGED,PIDL的值將是一個PIDL對應于用戶選擇的文件夾。Data參數包含用戶付給TbrowseInfo記錄中的Lparam數據成員的值,通??梢詡鬟f一個對象指針。下面是一個簡單的回調函數的例子:function BrowseForFolderCallback(DialogHa

9、ndle:HWND;MessageID:UINT;PIDL:PItemIDList;Data:LPARAM):Integer;begin/響應對話框的通知消息case(MessageID)of BFFM_INITIALIZED:DialogInitialized(DialogHandle,Data);BFFM_SELCHANGED:HandleNewSelection(DialogHandle,PIDL,Data);end;Result:=0;/總返回0.end;在回調函數里,可以根據用戶的輸入發(fā)送三個用戶的消息給對話框,下面是消息ID:/改變對話框的狀態(tài)信息BFFM_SETSTATUSTEX

10、T=WM_USER+100;/控制確定按鈕失效與否BFFM_ENABLEOK=WM_USER+101;/改變選擇的文件夾BFFM_SETSELECTION=WM_USER+102;通常,這些消息發(fā)送給對話框使之根據用戶的選擇更新顯示,當然你也可以發(fā)送其他的消息給對話框,比如可以發(fā)送WM_SETTEXT消息來改變對話框的標題。下面是一個發(fā)送消息的例子(見表2.11):PostMessage(DialogHandle,BFFM_SETSELECTION,True,LPARAM(PChar(NewPath);表2.11 Message IDWParamLParam BFFM_SETSTATUSTEX

11、T沒有使用一個指向新的狀態(tài)信息的Pchar BFFM_ENABLEOK沒有使用True使得確認按鈕有效,False無效BFFM_SETSELECTION如果Lparam是路徑則為True,若Lparam是PIDL則為False指向被選擇的文件路徑或PIDL的Pchar另外要提到的是,Delphi也提供了對這個函數的封裝,那就是SelectDirectory函數。關于對話框通常我們都要在自己的程序里加上一個關于對話框來顯示一些版本信息等等,Windows為我們提供了一個標準的對話框如圖2.24所示,可以在一定范圍內對它定制,不過它只適合顯示簡單的標識和文本(我覺得用處極小)。我們可以通過函數Sh

12、ellAbout來調用它(聲明在ShellAPI單元里),函數定義如下:function ShellAbout(Owner:HWND;ApplicationName:PChar;OtherText:PChar;IconHandle:HICON):Integer;stdcall;Owner參數標識了擁有對話框的父窗體句柄,通常設為0,表明沒有父窗體。ApplicationName參數包含對話框的標題,字符串中可以包含#字符,它能起到分割符的作用。這種情況下,函數會把分割符前的字符串作為標題欄,分割符后的部分作為Microsoft字符串后的第一行。OtherText參數包含了打算顯示在Micros

13、oft版本和版權信息后的字符串。IconHandle參數標識了打算顯示在對話框上的圖標標識,如果設為0,函數會顯示Windows缺省的圖標。圖2.24圖2.25格式化對話框SHFormatDrive函數會顯示一個格式化對話框,如圖2.25所示,它是一個半公開的函數。但現在它不在微軟的SDK里。然而微軟承認它的存在并把它從Shell32.dll里用名字公開聲明,Delphi中的函數定義如下:function SHFormatDrive(Owner:HWND;Drive:UINT;FormatID:UINT;OptionFlags:UINT):DWORD;stdcall;Owner參數標識擁有對話

14、框的窗體句柄,文檔中推薦不要設為0,但實際上好像沒什么影響。Drive參數是用來標識打算格式化的驅動器的數值,它是以0為底的,從A開始A:=0,B:=1依此類推。FormatID參數允許我們指定一個格式化的模板,通常情況下,只要賦值為SHFMT_ID_DEFAULT就可以了。OptionFlags參數是一個選項掩碼,來確定格式化的選項。當前有兩個選項:SHFMT_OPT_FULL=message01;/快速格式化SHFMT_OPT_SYSONLY=message02;/復制系統(tǒng)文件如果函數調用失敗,會返回下列錯誤中的一種來表明錯誤原因,錯誤常數如下:SHFMT_NOFORMAT=$FFFFFF

15、FD;/驅動器無法格式化SHFMT_CANCEL=$FFFFFFFE;/格式化被取消了SHFMT_ERROR=$FFFFFFFF;/其他錯誤Windows NT和WideChar在進一步研究未公開的函數前,我們必須清楚一點,對于未公開的函數來說以null結尾的字符串類型參數大多數被聲明為類型指針而不是PChar。這有點像陷阱,但必須承認這是事實。在Win 9X上所有的字符串類型參數聲明為PAnsiChar,而在Windows NT上被聲明為PWideChar。如果你想你的應用程序適應所有平臺,你必須考慮兩種情況,在運行時要判斷平臺類型,這是很討厭的,但這也是使用未公開的API的代價。選擇圖標對

16、話框圖2.26我們要討論的第一個完全未公開的函數是PickIconDlg。如圖2.26所示這個函數會顯示一個對話框,用戶可以用來從文件中選擇一個圖標資源。它通常是用文件類型編輯器來關聯(lián)圖標和某一文件類型的,也會在快捷方式對話框中被調用來修改快捷方式的圖標。這個函數從Shell32.dll用值62來公開出來,函數定義如下:function PickIconDlg(Owner:HWND;FileName:Pointer;MaxFileNameChars:DWORD;var IconIndex:DWORD):LongBool;stdcall;Owner參數和上面的意義類似。FileName參數指向一

17、個緩沖區(qū),包含了被瀏覽圖標的文件名,緩沖區(qū)要不小于MAX_PATH+1。MaxFileNameChars指定字符數量大小。IconIndex常數是以0為底的圖標索引,當對話框打開時會把焦點定在IconIndex對應的圖標上,函數返回后,IconIndex指向最后被選的圖標索引。如果用戶點了取消按鈕,函數返回False。運行程序對話框圖2.27 RunFileDlg函數是相當靈活的,如圖2.27所示就是調用開始菜單的運行子菜單后會顯示的對話框,我們通過值61把它從Shell32.dll暴露出來。下面是函數聲明:procedure RunFileDlg(Owner:HWND;IconHandle:

18、HICON;WorkPath:Pointer;Caption:Pointer;Description:Pointer;Flags:UINT);stdcall;Owner參數就不用再說了。IconHandle參數是顯示在對話框上的圖標句柄,如果為nil,缺省的icon將會使用。WorkPath參數指向一個字符串來指定應用程序運行的工作路徑。Title參數指向作為對話框標題的字符串,如果為nil,就使用缺省的標題。Description參數指向一個描述字符串,主要是告訴用戶如何去做,可以設為nil,這時使用缺省的描述。Flags參數用一組位掩碼來設定對話框的屬性。下面是定義:RFF_NOBROWS

19、E=;/移去瀏覽按鈕RFF_NODEFAULT=;/無缺省的選項RFF_CALCDIRECTORY=;/由文件名確定工作路徑RFF_NOLABEL=;/去掉編輯框標簽RFF_NOSEPARATEMEM=;/去掉在單獨的內存空間運行的復選框(只對NT有效)這個對話框一個很好的特性是允許你控制用戶可以運行的應用程序。當用戶選擇了確認按鈕,對話框的父窗體會發(fā)送一個通知消息來傳遞將要運行的程序信息。通知消息是一個WM_NOTIFY消息,它的通知代碼設定為RFN_VALIDATE(-510),然后lParam指向一個TNM_RunFileDlg記錄。定義如下:TNM_RunFileDlg=packed

20、record hdr:TNMHdr;lpFile:Pointer;lpDirectory:Pointer;nShow:LongBool;end;hdr數據對象是TNMHdr類型,它是一種標準的Windows數據類型,每個WM_NOTIFY消息的lParam參數都會指向這個數據成分。同時根據不同的消息類型,可能一些額外的數據跟在記錄后面,標準的TNMHdr記錄定義如下:TNMHdr=packed record hwndFrom:HWND;idFrom:UINT;code:UINT;end;記錄中的hwndFrom包含發(fā)送消息的窗口句柄,idFrom則包含發(fā)送消息的控件標示符,code中包含標識被

21、發(fā)送的消息的通知代碼。在TNMHdr記錄后被打包的額外數據包含三個數據成分:LpFile指向一個包含將要運行的文件的路徑字符串;LpDirectory指向正在運行程序的工作目錄字符串;最后,nShow用來指定將要運行的應用程序是否可見。對于本文中特定的消息,只對TNMHdr記錄中的Code感興趣,通過檢驗Code可以確保我們收到一個運行文件校驗消息,同時使我們可以存取額外的TNM_RunFileDlg數據成員。當TNMHdr記錄中的code等于RFN_VALIDATE(-510)時,可以獲得一個TNM_RunFileDlg記錄。下面是校驗消息的代碼:var FileToRun:String;.

22、if TheMessage.Msg=WM_NOTIFY then if PNMHdr(TheMessage.LParam).code=RFN_VALIDATE then WideCharToStrVar(PNM_RUNFILEDLG(TheMessage.LParam).lpFile,FileToRun);.注意只有當我們已經檢驗TNMHdr的Code為RFN_VALIDATE后,才映射LParam參數為PNM_RunFileDlg類型。通知消息的返回值決定了應用程序是否能夠運行,下面是可能的值:RF_OK=message;/允許程序運行RF_CANCEL=;/取消操作,關閉對話框RF_RET

23、RY=;/取消操作,對話框仍然打開查找文件對話框圖2.28調用查找文件對話框的函數是SHFindFiles,對話框如圖2.28所示。它是從Shell32.dll按索引值90公開出來的:function SHFindFiles(SearchRoot:PItemIDList;SavedSearchFile:PItemIDList):LongBool;stdcall;SearchRoot參數允許從一個特定的文件夾開始查找,同在資源管理器中在文件夾上用右鍵點擊查找菜單的效果是一樣的。如果設為nil,那么查找是從桌面開始的。SavedSearchFile參數讓你指定一個以前查詢保存的查找策略文件(*.f

24、nd文件),根據以前的設定來查找,若不需要的話可以設定為nil。如果你指定了一個非空值的SearchRoot PIDL,那么在調用完SHFindFiles后必須負責釋放掉。但是有點奇怪的是,如果你指定了一個非空的SavedSearchFile PIDL參數,函數成功調用的話,你不能去釋放這個PIDL,否則會出錯,但如果調用失敗了的話,你必須釋放它。同大多數對話框函數不一樣,這個函數是非模態(tài)的,也就是系統(tǒng)在另外一個獨立的線程中啟動對話框,然后立即返回,對話框會在你的程序結束后自動關閉。也就是說你沒有任何直接的方法來告訴用戶如何使用查找到的結果,所以要想知道用戶找到的文件的話,最好是讓你的程序支持

25、文件拖放,以便讓用戶把找到的文件拖放給你。查找電腦對話框同SHFindFiles比較接近的一個函數是SHFindComputer,這個函數調用的結果同開始菜單上查找電腦菜單調用的結果是一樣的。它的參數同SHFindFiles完全一樣,不同之處在于它完全忽略傳遞給它的參數,很顯然是保留起來為了將來擴展的需要。這里我們只要把參數都設成nil就可以了,另外注意這個對話框也是非模態(tài)的。SHFindComputer是從Shell32.dll以索引號91公開出來的:function SHFindComputer(Reserved1:PItemIDList;Reserved2:PItemIDList):Lo

26、ngBool;stdcall;查找文件對話框通過調用GetFileNameFromBrowse函數可以調出這個對話框,不過說實在的,它實際上只是GetOpenFileName函數的簡單封裝。而我們常用的TOpenDialog控件也是對GetOpenFileName函數封裝,這個函數我們很少會去直接用它。不過還是寫出來吧,它是從Shell32.dll里按索引值63公開出來的:function GetFileNameFromBrowse(Owner:HWND;FileName:Pointer;MaxFileNameChars:DWORD;InitialDirectory:Pointer;Defau

27、ltExtension:Pointer;Filter:Pointer;Caption:Pointer):LongBool;stdcall;圖2.29大多數參數對應于OPENFILENAME結構的成員。Owner參數我想就不用再重復了,FileName參數指向一個初始化對話框編輯控制文件名的緩沖區(qū),函數返回后FileName包含被選擇的文件路徑,它的大小一般設成MAX_PATH+1那么大。MaxFileNameChars參數用來指定FileName緩沖區(qū)的大小。InitialDirectory參數指向對話框初始化的目錄名,但如果FileName參數被指定了,InitialDirectory就會被

28、忽略而使用FileName參數中的路徑。DefaultExtension參數指向一個包含要搜索的缺省擴展名的字符串。Filter參數指向一個以null結尾的可以用來在下拉列表中限定文件類型的過濾字符串。Caption參數指向對話框標題字符串。如果用戶選擇了一個要打開的文件,函數返回True,當有錯誤發(fā)生,用戶選擇取消按鈕或關閉對話框的話會返回False。外殼對象屬性對話框另一個未公開的對話框函數是SHObjectProperties,它可以用來顯示外殼對象的屬性,比如驅動器、文件夾或文件等,運行效果如圖2.29所示。函數可以從Shell32.dll中按索引值178公開出來,定義如下:funct

29、ion SHObjectProperties(Owner:HWND;Flags:UINT;ObjectName:Pointer;InitialTabName:Pointer):LongBool;stdcall;Flags參數用來指定ObjectName參數對應對象的類型,它可以是下列標識:/打印機OPF_PRINTERNAME=;/路徑OPF_PATHNAME=;ObjectName參數指向一個包含路徑名的字符串或是要顯示屬性的打印機名。如果打印機是本地的,可以使用實際的打印機名,如果是網絡打印機,就需要使用完整的UNC樣式名稱,比如COMPUTERNAMEPRINTERNAME。Initia

30、lTabName參數指向一個屬性對話框中頁面名稱字符串,用來指定要顯示的缺省頁面。如果InitialTabName參數為nil,或不匹配任何頁面的名稱,第一個屬性頁面將會被顯示。如果函數調用成功會返回True,如果失敗會返回False。要想獲得擴展的錯誤信息,可以調用API函數GetLastError。要注意的是這個對話框是非模態(tài)的,類似于查找文件對話框,所以函數一被調用,就肯定會顯示一個對話框,同時我們沒有辦法知道用戶什么時候關閉了對話框。映射網絡驅動對話框圖2.30圖2.30顯示了映射網絡驅動器的對話框,我們通過SHNetConnectionDialog函數調用它(win 9x和Win N

31、T上都支持),它可以按索引值160從Shell32.dll暴露出來,函數定義如下:function SHNetConnectionDialog(Owner:HWND;ResourceName:Pointer;ResourceType:DWORD):DWORD;stdcall;SHStartNetConnectionDialog函數也會顯示同樣的對話框,但它顯示的對話框是非模態(tài)的,同時只在NT上才支持。它可以按索引值215從Shell32.dll中公開出來,函數定義如下:function SHStartNetConnectionDialog(Owner:HWND;ResourceName:PWi

32、deChar;ResourceType:DWORD):DWORD;stdcall;上面兩個函數的參數完全相同。其中ResourceName參數指向一個要連接的網絡資源UNC路徑名。指定了這個參數的話,顯示的對話框中被預設的連接資源就不可改變了。如果這個參數為nil,則在對話框中用戶可以指定要連接的資源。ResourceType參數可以是下面的值之一:RESOURCETYPE_DISK或RESOURCETYPE_PRINT。它的不同將會生成不同的對話框。參數為RESOURCETYPE_DISK允許我們?yōu)榫W絡驅動資源指定一個盤符,另一個參數允許我們映射一個并行口名比如LPT2為一個網絡打印機。然而

33、,不知道為什么RESOURCETYPE_PRINT參數在NT上無效。圖2.31如果函數調用成功的話,返回值是NO_ERROR,如果用戶取消的對話框,則返回-1($FFFFFFFF),如果調用失敗則返回其他的錯誤代碼,具體錯誤信息可以用GetLastError API調用獲得。關閉系統(tǒng)對話框ExitWindowsDialog和RestartDialog函數可以用來顯示關閉和重啟系統(tǒng)對話框(如圖2.31),它們同公開的ExitWindowsEx API函數沒有什么太大的不同,但在其過程中都會產生一個對話框。ExitWindowsDialog函數可以按索引值60從Shell32.dll中公開出來,R

34、estartDialog函數的在Shell32.dll中的索引值則是59,兩個函數的定義如下:procedure ExitWindowsDialog(Owner:HWND);stdcall;function RestartDialog(Owner:HWND;Reason:Pointer;ExitType:UINT):DWORD;stdcall;對ExitWindowsDialog函數來說,對話框好像并不使用Owner參數作為父窗口,在Windows 95上,當操作成功的話owner窗口會收到一個WM_QUIT消息。在Windows NT上,owner窗口根本不被使用。同時這個函數沒有返回值,所

35、以沒有辦法知道用戶選擇了什么操作以及操作是否被取消了。RestartDialog函數更有用一些,當我們修改了系統(tǒng)的設置,并希望重新啟動系統(tǒng)使修改生效的時候可以使用這個函數。Reason參數指向一個要顯示在對話框中的字符串,用來解釋關閉系統(tǒng)的原因。ExitType參數指定關閉類型,可以使用ExitWindowsEX函數使用值的一個子集及額外的幾個新值,下面是它們的完全列表:EWX_LOGOFF=message;EWX_SHUTDOWN=;EWX_REBOOT=;EW_RESTARTWINDOWS=;EW_REBOOTSYSTEM=;EW_EXITANDEXECAPP=;如果用戶選擇執(zhí)行關閉操作,

36、函數返回IDYES,否則返回IDNO。要注意的是顯示在對話框中的原因字符串后總會跟著一個系統(tǒng)缺省提供的字符串用來顯示確認信息,所以應該在我們的Reason字符串后附上空格或回車換行字符。另外返回值不能用于確定操作的成功性,它只表明用戶的選擇,如果重啟操作由于某些原因失敗了,返回值仍然是IDYES。同時要注意的是要想調用成功,用戶還必須有SE_SHUTDOWN_NAME權限(在NT上)。缺少內存對話框SHOutOfMemoryMessageBox是一個未公開的函數,當系統(tǒng)內存不足時可以用來顯示標準的外殼信息對話框,它在Shell32.dll中的索引值是126,函數定義如下:function SH

37、OutOfMemoryMessageBox(Owner:HWND;Caption:Pointer;Style:UINT):Integer;stdcall;它會調用MessageBox API,同時傳遞3個標準的參數和ERROR_OUTOFMEMORY錯誤消息。Caption參數指向對話框標題字符串。如果Caption為nil,父窗口的標題就會被使用。Style參數可以被設置為任意MessageBox函數使用的MB_XXX常數的組合,通常設置它為MB_OK或MB_ICONHAND。函數調用返回值參見SDK中MessageBox函數說明。當MessageBox函數被調用時,MB_SETFOREGR

38、OUND標識會被添加到Style參數中,但如果第一次調用失敗了的話,MessageBox函數會被再次調用,這次MB_SYSTEMMODAL標識會被添加到Style參數中。MB_SYSTEMMODAL同MB_ICONHAND標識結合后會忽略內存狀況來顯示消息對話框。當內存確實不足時,函數不會顯示任何東西,然而它仍然會返回MessageBox函數調用結果。所以我們可以根據返回值判斷函數是否調用成功了??臻g不足對話框圖2.32另一個資源相關的函數是SHHandleDiskFull,它會顯示磁盤不足的信息對話框(如圖2.32)。我們可以在由于沒有足夠磁盤空間時導致程序無法運行的條件下調用這個函數,調用后,如果回收站中有什么東西沒有刪除的話,對話框允許用戶清空回收站來釋放磁盤空間。它在Shell32.dll中的索引值為185,函數的定義如下:procedure SHHandleDiskFull(Owner:HWND;Drive:UINT);stdcall;Drive參數用于指定以0為底的驅動器盤符。0代表A:,1代表B:,依此類推。這個函數的應用比

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論