完成設(shè)置過(guò)程提示對(duì)話框
發(fā)表時(shí)間:2023-08-15 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]---- 在使用Windows95 進(jìn)行文件拷貝或者刪除操作時(shí),您一定見(jiàn)到過(guò)那種具有飛 文件動(dòng)畫(huà)的操作過(guò)程提示對(duì)話框。這一功能的加入不僅使我們能夠在操作過(guò)程當(dāng) 中隨時(shí)取消操作,而且也使文件拷貝或者刪...
---- 在使用Windows95 進(jìn)行文件拷貝或者刪除操作時(shí),您一定見(jiàn)到過(guò)那種具有飛
文件動(dòng)畫(huà)的操作過(guò)程提示對(duì)話框。這一功能的加入不僅使我們能夠在操作過(guò)程當(dāng)
中隨時(shí)取消操作,而且也使文件拷貝或者刪除操作變得生動(dòng)活潑。其實(shí),在使
用Visual C++ 進(jìn)行應(yīng)用程序設(shè)計(jì)時(shí),我們也可以使用下述方法在適當(dāng)位置加入自
己的操作過(guò)程提示對(duì)話框。
為每一個(gè)操作過(guò)程提示對(duì)話框創(chuàng)建一個(gè)對(duì)話框類。為了下面敘述方便,我們
只假設(shè)應(yīng)用程序需要一個(gè)操作過(guò)程提示對(duì)話框并以“CModel”作為對(duì)應(yīng)的對(duì)
話框類的名字。
使用Visual C++ 提供的資源編輯器編輯提示對(duì)話框,比如加入一些文字說(shuō)明
和動(dòng)畫(huà)等。
在CModel 類的頭文件(Model.h) 中,加入兩個(gè)成員變量,
CWnd* m_pParent; // 指向調(diào)用該提示對(duì)話框的框架類( 或?qū)υ捒蝾?,即它
的“父類”int m_nID;// 記錄該提示對(duì)話框的ID 號(hào)
以及下面兩個(gè)成員函數(shù):
CModel(CWnd* pParent = NULL); // 舍棄原有的構(gòu)造函數(shù),或者把原函數(shù)
修改成這種無(wú)模式對(duì)話框的構(gòu)造函數(shù)
BOOL Create(); // 該函數(shù)將調(diào)用創(chuàng)建基類的Create() 函數(shù)創(chuàng)建對(duì)話框
在Model.cpp 文件中,加入相應(yīng)函數(shù)的實(shí)現(xiàn)部分。
CModel::CModel(CWnd* pParent /*=NULL*/)
: CDialog(CModel::IDD, pParent)
{
m_pParent=pParent;
m_nID=CModel::IDD;
//{{AFX_DATA_INIT(CModel)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
BOOL CModel::Create()
{
return CDialog::Create(m_nID,m_pParent);
}
同時(shí)按下Ctrl 和W 鍵或直接單擊工具條上的ClassWizard 按鈕,打
開(kāi)ClassWizard 對(duì)話框。在類名(Class name) 列表框中選擇該提示對(duì)話框類,
在Object IDs 列表框中選擇該類的類名后,在消息(Messages) 列表框中選
擇PostNcDestroy 消息并雙擊它,這時(shí)ClassWizard 就會(huì)在該對(duì)話框類中加入
一個(gè)PostNcDestroy() 函數(shù)。該函數(shù)將會(huì)在對(duì)話框窗口消失后,
由OnNcDestroy() 函數(shù)調(diào)用。因此,可以在該函數(shù)中加入一些掃尾工作,例如
數(shù)據(jù)傳送,釋放指針空間等。
void CModel::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this;
CDialog::PostNcDestroy();
}
在要調(diào)用提示對(duì)話框類的類的頭文件中,先包含(#include)CModel 類的頭文
件,再聲明一個(gè)指向CModel 類的對(duì)象的指針,如m_Dlg,并在該類的構(gòu)造函數(shù)
中,加入“m_Dlg = NULL;”一句。然后,在打開(kāi)和關(guān)閉提示對(duì)話框的函數(shù)中加
入如下一段程序:
if (m_Dlg==NULL) {//如果當(dāng)前沒(méi)用提示對(duì)話框在活動(dòng),就創(chuàng)建一個(gè)
m_Dlg = new CModel(this);
m_Dlg->Create();
GetDlgItem(IDC_EXPORT)->EnableWindow(FALSE);
}
else//否則就激活它
m_Dlg->SetActiveWindow();
另外,再在要關(guān)閉提示對(duì)話框的地方,加入如下語(yǔ)句:
m_Dlg->DestroyWindow();
m_Dlg=NULL;
---- 至此,您已經(jīng)擁有了自己的過(guò)程操作提示對(duì)話框。不過(guò),它還不具有動(dòng)畫(huà)和
隨時(shí)取消操作的功能。您不妨嘗試著加入這些功能。另外,筆者也曾嘗試過(guò)用下面
介紹的方法實(shí)現(xiàn)過(guò)程操作提示對(duì)話框。兩種方法比較,可謂各有千秋。如果您希望
上面設(shè)計(jì)的過(guò)程提示對(duì)話框能夠被多個(gè)應(yīng)用程序共享,那么最好把提示對(duì)話框作
為獨(dú)立的進(jìn)程來(lái)調(diào)用。但是,當(dāng)您還希望在提示對(duì)話框與調(diào)用者之間傳輸數(shù)據(jù)的
話,似乎這一部分介紹的實(shí)現(xiàn)方法更簡(jiǎn)潔且更有效。
應(yīng)用進(jìn)程實(shí)現(xiàn)對(duì)其他應(yīng)用程序的調(diào)用
---- 在我們?cè)O(shè)計(jì)的應(yīng)用程序中,很可能會(huì)用到其他應(yīng)用程序來(lái)完成某一特定功
能。例如,當(dāng)我們?yōu)榱吮阌跀?shù)據(jù)的傳輸而對(duì)諸多文件進(jìn)行壓縮和解壓縮時(shí),一種作
法是我們自己設(shè)計(jì)一個(gè)這樣的壓縮/ 解壓縮程序,然后以動(dòng)態(tài)鏈接庫(kù)(DLL) 或者函
數(shù)庫(kù)的形式由主應(yīng)用程序調(diào)用。但更方便而且高效的作法是利用現(xiàn)有的這方面的
優(yōu)秀軟件,比如ARJ.EXE,并以進(jìn)程的形式調(diào)用它,再在適當(dāng)時(shí)候關(guān)閉它。下面將以
上面所述為例,具體介紹后一種方法的實(shí)現(xiàn)過(guò)程。
在需要調(diào)用ARJ.EXE 進(jìn)行壓縮/ 解壓縮的類中,創(chuàng)建一個(gè)成員函數(shù),不妨稱
作CreateBat(),其作用是生成一個(gè)批處理文件。由該批處理文件調(diào)
用ARJ.EXE,并給出具體壓縮/ 解壓縮參數(shù)。之后,再利用MS-DOS 的DIR 命令生
成一個(gè)臨時(shí)文件,以作為壓縮/ 解壓縮工作完成的標(biāo)志。
void CMyCompress:: CreateBat(CString BatPath,CString ArjPath,
CString BatName,CString ArjFileName,
CString TempPath,CString ExitFlag,BOOL out)
{
LPTSTR lpBuffer;
UINT uSize;
HANDLE hHeap;
uSize=(GetCurrentDirectory(0,NULL))*sizeof(TCHAR);
hHeap=GetProcessHeap();
lpBuffer=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,uSize);
GetCurrentDirectory(uSize,lpBuffer);
//得知當(dāng)前目錄信息,以便根據(jù)需要變換目錄
if (lpBuffer!=BatPath) //diferent dir
SetCurrentDirectory(BatPath);
CStdioFile f;
CFileException e;
if (!f.Open( BatName, CFile::modeCreate CFile::modeWrite, &e))
//以BatName的內(nèi)容創(chuàng)建一個(gè)批處理文件
{
AfxMessageBox("不能創(chuàng)建文件"+BatName);
return ;
}
char density[6];
sprintf(density,"%d",mTotalBytes);
---- //mTotalBytes 是由其他函數(shù)設(shè)定的變量,用于記錄用于拷入或拷出文件
的磁盤所具有的最大可用空間
CString Density=density;
CString string;
if (out)//說(shuō)明是生成做壓縮工作的批處理文件
string="arj a -v"+Density;
else //說(shuō)明是生成做解壓縮工作的批處理文件
string="arj e -v"+Density;
string+=" ..\\"+ArjPath+"\\"+ArjFileName+" ";
if (out)
string=string+"..\\"+TempPath+"\\*.* -y -jm\n";
else
string=string+"..\\"+TempPath+"\\ -y -jm\n";
f.WriteString(string);
string="dir >"+ExitFlag+"\n";
f.WriteString(string);
f.Close();
SetCurrentDirectory(lpBuffer);//回復(fù)到原來(lái)的目錄下
}
---- 該函數(shù)執(zhí)行后,將生成一個(gè)批處理文件,內(nèi)容大致是:
---- ARJ A -V1440 壓縮后文件的路徑名+ 文件名被壓縮文件的路徑名+ 文件名
-Y -JM
---- DIR > 臨時(shí)文件名
---- 或者是:
---- ARJ E -V1440 被解壓縮文件的路徑名+ 文件名解壓縮后文件的路徑名+ 文
件名-Y -JM
---- DIR > 臨時(shí)文件名
在需要調(diào)用ARJ.EXE 進(jìn)行壓縮/ 解壓縮的類中,再創(chuàng)建一個(gè)成員函數(shù),不妨稱
作RunBat(),其作用是創(chuàng)建和執(zhí)行進(jìn)程來(lái)運(yùn)行上述所生成的批處理文件,并
在適當(dāng)時(shí)候撤消進(jìn)程。
void CMyCompress::RunBat(CString
BatPath,CString fileName,CString ExitFlag)
{
CString lpApplicationName=BatPath+"\\"+fileName;
// 進(jìn)程執(zhí)行的應(yīng)用程序的完全路徑名
STARTUPINFO StartupInfo;// 創(chuàng)建進(jìn)程所需的信息結(jié)構(gòu)變量
GetStartupInfo(&StartupInfo);
StartupInfo.lpReserved=NULL;
StartupInfo.lpDesktop=NULL;
StartupInfo.lpTitle=NULL;
StartupInfo.dwX=0;
StartupInfo.dwY=0;
StartupInfo.dwXSize=200;
StartupInfo.dwYSize=300;
StartupInfo.dwXCountChars=500;
StartupInfo.dwYCountChars=500;
StartupInfo.dwFlags=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow=SW_HIDE;
// 說(shuō)明進(jìn)程將以隱藏的方式在后臺(tái)執(zhí)行
StartupInfo.cbReserved2=0;
StartupInfo.lpReserved2=NULL;
StartupInfo.hStdInput=stdin;
StartupInfo.hStdOutput=stdout;
StartupInfo.hStdError=stderr;
LPTSTR lpBuffer;
UINT uSize;
HANDLE hHeap;
uSize=(GetCurrentDirectory(0,NULL))*sizeof(TCHAR);
hHeap=GetProcessHeap();
lpBuffer=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,uSize);
GetCurrentDirectory(uSize,lpBuffer);
// 得知當(dāng)前目錄信息,以便根據(jù)需要變換目錄
if (lpBuffer!=BatPath) //diferent dir
SetCurrentDirectory(BatPath);
// 創(chuàng)建進(jìn)程
if (CreateProcess(lpApplicationName,NULL,NULL,
NULL,FALSE,CREATE_DEFAULT_ERROR_MODE,
NULL,NULL,&StartupInfo,&pro_info))
{
MSG Message;
DeleteFile(ExitFlag);
SetTimer(1,100,NULL);// 設(shè)置計(jì)時(shí)器
Search=TRUE;
while(Search) {
if (::PeekMessage(&Message,NULL,0,0,PM_REMOVE)) {
::TranslateMessage(&Message);
::DispatchMessage(&Message);
}
}
// 進(jìn)程結(jié)束前后的處理工作
DWORDExitCode;
if (!GetExitCodeProcess(pro_info.hProcess,&ExitCode))
AfxMessageBox("GetExitCodeProcess is Failed!");
if (!TerminateProcess(pro_info.hProcess,(UINT)ExitCode))
// 終止進(jìn)程
AfxMessageBox("TerminateProcess is Failed!");
if (!CloseHandle(pro_info.hProcess))
// 釋放被終止進(jìn)程的句柄
AfxMessageBox("CloseHandle is Failed!");
KillTimer(1);// 撤消計(jì)時(shí)器
}
else AfxMessageBox("Process Is Not Created!");
SetCurrentDirectory(lpBuffer);// 回復(fù)到原來(lái)的目錄下
}
同時(shí)按下Ctrl 和W 鍵或直接單擊工具條上的ClassWizard 按鈕,打
開(kāi)ClassWizard 對(duì)話框。在類名(Class name) 列表框中選擇需要調(diào)用ARJ.EXE
進(jìn)行壓縮/ 解壓縮的類,在Object IDs 列表框中選擇該類的類名后,在消
息(Messages) 列表框中選擇WM_TIMER 消息并雙擊它,這時(shí)ClassWizard 就會(huì)
在該類中加入一個(gè)OnTimer() 函數(shù)。該函數(shù)將以一定的時(shí)間間隔檢查壓縮/ 解
壓縮程序是否已經(jīng)執(zhí)行完畢,即檢查作為標(biāo)志的臨時(shí)文件是否已經(jīng)存在,并
及時(shí)修改狀態(tài)變量“Search”,以便通知RunBat() 函數(shù)結(jié)束進(jìn)程。
void CMyCompress::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CFile file;
CFileException Error;
if (file.Open(ExitFlag,CFile::modeRead,&Error)) {
Search=FALSE;
file.Close();
}
}
自編刪除目錄及其下屬文件的函數(shù)
---- 高版本的MS-DOS 和Windows 95 都提供了一個(gè)可以刪除一個(gè)或多個(gè)目錄及其
下屬文件和目錄的命令,即DeleteTree 命令。然而,無(wú)論在MFC 類庫(kù)還是在Win32 函
數(shù)庫(kù)中,都沒(méi)有相應(yīng)的函數(shù)與之對(duì)應(yīng)。這樣,當(dāng)我們?cè)谧约涸O(shè)計(jì)的應(yīng)用程序中需要
用到DeleteTree 的功能時(shí),自然想到的方法是通過(guò)進(jìn)程調(diào)用或者系統(tǒng)調(diào)用的方
式( 正如上面部分所述的那樣) 調(diào)用MD-DOS 或Windows 95 下的DeleteTree 命令。然
而,Win32 函數(shù)庫(kù)已經(jīng)為我們提供了多種用于文件和目錄操作的函數(shù),利用它們不
難設(shè)計(jì)出自己的DeleteTree() 函數(shù)。
---- 讀者讀到這里,也許會(huì)感到有些疑惑,為什么第六部分強(qiáng)調(diào)進(jìn)程調(diào)用優(yōu)于自
我設(shè)計(jì)的函數(shù),而這一部分又反了過(guò)來(lái)?是的,在通常情況下,調(diào)用應(yīng)用程序內(nèi)部
的函數(shù)比使用進(jìn)程或者調(diào)用外部函數(shù)更靈活并且可以提高執(zhí)行效率,也便于修
改。所以,象DeleteTree() 這樣的功能,利用現(xiàn)有的函數(shù)并不難實(shí)現(xiàn),自然就最好
通過(guò)內(nèi)部函數(shù)的方式來(lái)完成。然而,象設(shè)計(jì)一個(gè)壓縮/ 解壓縮這樣的函數(shù)的工作
量,并不比通過(guò)進(jìn)程調(diào)用來(lái)使用現(xiàn)成品的開(kāi)銷更合算,因?yàn)樗辽傩枰覀兞私?
壓縮/ 解壓縮的復(fù)雜算法,而且調(diào)試和維護(hù)它也需要一定代價(jià)。于是,這個(gè)時(shí)候,還
是采用“拿來(lái)主義”為好。
---- 下面,給出我自己設(shè)計(jì)的DeleteTree() 函數(shù),僅供參考。
BOOL DeleteTree(CString DirName)
{ //成功:返回TRUE;否則,返回FALSE
BOOL Result;
Result=PreRemoveDirectory(DirName)
&& RemoveDirectory(DirName);
return Result;
}
BOOL PreRemoveDirectory(CString DirName)
{//成功:返回TRUE;否則,返回FALSE
LPTSTR lpBuffer;
UINT uSize;
CString fileName;
HANDLE hHeap;
BOOL result;
HANDLE hFindFile;
WIN32_FIND_DATA FindFileData;
uSize=(GetCurrentDirectory(0,NULL))*sizeof(TCHAR);
hHeap=GetProcessHeap();
lpBuffer=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,uSize);
GetCurrentDirectory(uSize,lpBuffer);
if (lpBuffer!=DirName) {//調(diào)整當(dāng)前目錄
SetCurrentDirectory(DirName);
}
hFindFile=FindFirstFile("*.*",&FindFileData);
CString tFile;
if (hFindFile!=INVALID_HANDLE_VALUE) {
do {
tFile=FindFileData.cFileName;
if ((tFile==".") (tFile=="..")) continue;
if (FindFileData.dwFileAttributes==
FILE_ATTRIBUTE_DIRECTORY){
if (DirName[DirName.GetLength()-1]!='\\')
PreRemoveDirectory(DirName+'\\'+tFile);
else
PreRemoveDirectory(DirName+tFile);
if (!RemoveDirectory(tFile))
result=FALSE;
else
result=TRUE;
}
else
if (!DeleteFile(tFile)) result=FALSE;
else result=TRUE;
}
while (FindNextFile(hFindFile,&FindFileData));
FindClose(hFindFile);
}
else {
SetCurrentDirectory(lpBuffer);
return FALSE;
}
SetCurrentDirectory(lpBuffer); //回復(fù)到原來(lái)的目錄下
return result;
}
如何得到并修改各驅(qū)動(dòng)器的信息
---- 在設(shè)計(jì)和文件輸入/ 輸出有關(guān)的應(yīng)用程序時(shí),我們很可能在輸入/ 輸出文件
前,需要了解一下源驅(qū)動(dòng)器或者目標(biāo)驅(qū)動(dòng)器的各項(xiàng)信息,比如是否有磁盤在軟驅(qū)
中,它是否已打開(kāi)寫保護(hù),以及現(xiàn)有磁盤的容量等。遺憾的是,MFC 類庫(kù)中沒(méi)有提供
支持這些功能的類,所以我們只能通過(guò)Win32 提供的函數(shù)來(lái)完成我們的要求。下
面,我根據(jù)自己的編程實(shí)踐,通過(guò)幾段程序,來(lái)說(shuō)明如何利用Win32 提供的函數(shù)實(shí)
現(xiàn)對(duì)驅(qū)動(dòng)器的操作。讀者可以根據(jù)自己的需要,把介紹的函數(shù)稍加修改后,即可插
入到自己設(shè)計(jì)的應(yīng)用程序中去。
下面程序的功能是搜索計(jì)算機(jī)中所有驅(qū)動(dòng)器,選擇出其中軟盤驅(qū)動(dòng)器的驅(qū)動(dòng)
器號(hào),依次加入到一個(gè)下拉列表框中。
void FindDriverInfo()
{
CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
DWORD dwNumBytesForDriveStrings;
HANDLE hHeap;
LPSTR lp;
CString strLogdrive;
int nNumDrives=0, nDriveNum;
dwNumBytesForDriveStrings=GetLogicalDriveStrings(0,NULL)
*sizeof(TCHAR);//實(shí)際存儲(chǔ)驅(qū)動(dòng)器號(hào)的字符串長(zhǎng)度
if (dwNumBytesForDriveStrings!=0) {
hHeap=GetProcessHeap();
lp=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,
dwNumBytesForDriveStrings);//
GetLogicalDriveStrings(HeapSize(hHeap,0,lp),lp);
StringBox.SetSize(dwNumBytesForDriveStrings/sizeof(TCHAR)+1);
while (*lp!=0) {
if (GetDriveType(lp)==DRIVE_REMOVABLE){
Driver->AddString(lp);
StringBox[nNumDrives]=lp;
nNumDrives++;
}
lp=_tcschr(lp,0)+1;
}
}
else AfxMessageBox("Can't Use The Function GetLogicalDriveStrings!");
}
下面介紹的EmptyDiskSpace() 函數(shù)主要負(fù)責(zé)清空指定驅(qū)動(dòng)器中的磁盤,同時(shí)
它還負(fù)責(zé)記錄指定驅(qū)動(dòng)器中磁盤的容量,并得到該磁盤的序列號(hào)。在該函數(shù)
中,還將調(diào)用第七部分提到的PreRemoveDirectory() 函數(shù),來(lái)完成清空工作。
BOOL EmptyDiskSpace(CString Driver)
{
BOOL result=TRUE;
DWORDSectorsPerCluster; // address of sectors per cluster
DWORDBytesPerSector; // address of bytes per sector
DWORDNumberOfFreeClusters; // address of number of free clusters
DWORDTotalNumberOfClusters;
DWORDTotalBytes;
DWORDFreeBytes;
int bContinue=1;
char DiskVolumeSerialNumber[30];
//存儲(chǔ)驅(qū)動(dòng)器內(nèi)當(dāng)前磁盤的序列號(hào)
LPCTSTRlpRootPathName;
// address of root directory of the file system
LPTSTRlpVolumeNameBuffer=new char[12];
// address of name of the volume
DWORDnVolumeNameSize=12;
// length of lpVolumeNameBuffer
DWORD VolumeSerialNumber;
// address of volume serial number
DWORD MaximumComponentLength;
// address of system's maximum filename length
DWORD FileSystemFlags;
// address of file system flags
LPTSTRlpFileSystemNameBuffer=new char[10];
// address of name of file system
DWORDnFileSystemNameSize=10;
// length of lpFileSystemNameBuffer
lpRootPathName=Driver;
while (1){
if (GetDiskFreeSpace(Driver, &SectorsPerCluster,
&BytesPerSector, &NumberOfFreeClusters,
&TotalNumberOfClusters))
{//驅(qū)動(dòng)器中有磁盤
TotalBytes=SectorsPerCluster*BytesPerSector
*TotalNumberOfClusters;//磁盤總?cè)萘?
FreeBytes=SectorsPerCluster*BytesPerSector
*NumberOfFreeClusters;//磁盤空閑空間容量
GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer, nVolumeNameSize,
&VolumeSerialNumber,
&MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize);
sprintf(DiskVolumeSerialNumber,"%X",VolumeSerialNumber);
//得到驅(qū)動(dòng)器內(nèi)當(dāng)前磁盤的序列號(hào)
SetmTotalBytes(TotalBytes/1024);//存儲(chǔ)指定驅(qū)動(dòng)器中磁盤的容量
if (TotalBytes!=FreeBytes){//當(dāng)磁盤總?cè)萘坎坏扔诳臻e空間容量時(shí),
應(yīng)該執(zhí)行清空操作
while (bContinue) {
if ((bContinue==2) (MessageBox
("在驅(qū)動(dòng)器"+m_Driver+"中的磁盤尚存有數(shù)據(jù).
\n您愿意讓系統(tǒng)為您刪除它們嗎?",
"提問(wèn)",MB_YESNO MB_ICONQUESTION)==IDYES))
if (!PreRemoveDirectory(Driver))//無(wú)法執(zhí)行清空操作
if (MessageBox("因某種原因系統(tǒng)無(wú)法刪除
在驅(qū)動(dòng)器"+m_Driver+"中的磁盤上的數(shù)據(jù).
\n請(qǐng)檢查磁盤是否沒(méi)有關(guān)閉寫保護(hù).
\n您愿意再試一次嗎?",
"問(wèn)題",MB_YESNO MB_ICONERROR)==IDYES) {
bContinue=2;
continue;
}
else {
bContinue=0;
result=FALSE;
}
else {
MessageBox("成功刪除磁盤上的數(shù)據(jù)!",
"提示信息",MB_OK MB_ICONINFORMATION);
bContinue=0;
result=TRUE;
}
else {//THE FIRST IF'S ELSE
bContinue=0;
result=FALSE;
}
}
}
else result=TRUE;
break;
}
else {
if (MessageBox("沒(méi)有磁盤在驅(qū)動(dòng)器"+m_Driver+"中.
\n您愿意插入一張磁盤再來(lái)一次嗎?",
"問(wèn)題",MB_YESNO MB_ICONASTERISK)==IDYES) continue;
else break;
}
}//END OF WHILE
return result;
}
在MS-DOS 和Windows95 中,磁盤卷標(biāo)最多由11 個(gè)字符組成,并且字母的大小寫
不加區(qū)分。當(dāng)需要設(shè)定指定驅(qū)動(dòng)器中磁盤的卷標(biāo)時(shí),只要調(diào)用Win32
的SetVolumeLabel() 函數(shù)即可,并在第一個(gè)參數(shù)中指明磁盤所在的驅(qū)動(dòng)器
號(hào),在第二個(gè)參數(shù)中指明新的卷標(biāo)號(hào)。例如,SetVolumeLabel(DriverNum,
NewVolumeLabel)。