国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

瀏覽文件夾_browseinfo

一、BROWSEINFO 結(jié)構(gòu) ....................................................................................

一、BROWSEINFO 結(jié)構(gòu) ................................................................................................................... 2

●定義....................................................................................................................................... 2

●成員變量 . .............................................................................................................................. 2

二、BROWSEINFO 的使用 ............................................................................................................... 4

(1)新建文件夾 . .................................................................................................................... 4

(2)回調(diào)函數(shù) . ........................................................................................................................ 4

(3)LPBROWSEINFO 與BROWSEINFO 的關(guān)系 . ..................................................................... 5

三、BROWSEINFO 對話框的缺陷 ................................................................................................... 5

四、參考資料 . .................................................................................................................................. 5

,

一、BROWSEINFO 結(jié)構(gòu)

Visual C (VC)中,BROWSEINFO 結(jié)構(gòu)中包含有用戶選中目錄的重要信息。

(1)BROWSEINFO 結(jié)構(gòu)

●定義

typedef struct_browseinfo

{

HWND hwndOwner;

LPCITEMIDLIST pidlRoot;

LPSTR pszDisplayName;

LPCSTR lpszTitle;

UINT ulFlags;

BFFCALLBACK lpfn;

LPARAM lParam;

int iImage;

}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;

●成員變量

hwndOwner :瀏覽文件夾對話框的父窗體句柄。

pidlRoot :ITEMIDLIST 結(jié)構(gòu)的地址,包含瀏覽時的初始根目錄,而且只有被指定的目錄和其子目錄才顯示在瀏覽文件夾對話框中。該成員變量可以是NULL ,在此時桌面目錄將被使用。

它指向一個ITEMIDLIST 結(jié)構(gòu),作為在列表中顯示的文件夾的根目錄,如果為NULL 則默認(rèn)為Desktop 。ITEMIDLIST 結(jié)構(gòu)除了用在這里外,它還用作函數(shù)的返回值(參看函數(shù)原型) 。那為什么不用字符串來表示這個目錄呢,這個結(jié)構(gòu)怎樣表示一個目錄呢? 下面作一個簡單的介紹。

ITEMID 和ITEMIDLIST

Windows Shell 的一個功能在于管理并提供方法存取系統(tǒng)中的眾多對象,這些對象

,

包括了文件,網(wǎng)路上的計算機(jī),控制面板程序,回收站等等,為了識別每一個對像,Windows Shell使用了Item ID來表示它們,而Item ID Lists用來表示一個對像的路徑。所以,ITEMID 和ITEMIDLIST 的關(guān)系類似于文件名和路徑的關(guān)系。如果只對文件系統(tǒng)而言的話,ITEMIDLIST 可以看成是路徑的另一中表示法,Windows Shell 也提供了函數(shù)來進(jìn)行轉(zhuǎn)化。

BOOL SHGetPathFromIDList( LPCITEMIDLIST pidl, LPSTR pszPath )

這個函數(shù)將一個ITEMLIST 轉(zhuǎn)換成文件系統(tǒng)中的路徑。

返回值

SHBrowseForFolder 的返回值也是一個指向ITEMIDLIST 的指針。這個ITEMIDLIST 正式表示了用戶所選擇的文件夾。如上所述,通過SHGetPathFromIDList ,就可以獲得一個文件夾Path 的字符串。

要注意的是返回的指針必須由應(yīng)用程序自己來釋放。并且,由于SHBrowseForFolder

是通過調(diào)用IMalloc Interface來分配Memory ,所以,也必須通過這個Interface 來釋放。 pszDisplayName :用來保存用戶選中的目錄字符串的內(nèi)存地址。該緩沖區(qū)的大小缺省是定義的MAX_PATH常量宏。

lpszTitle :該瀏覽文件夾對話框?qū)υ捒虻娘@示文本,用來提示該瀏覽文件夾對話框的功能、作用和目的。

ulFlags :該標(biāo)志位描述了對話框的選項。它可以為0,也可以是以下常量的任意組合: BIF_BROWSEFORCOMPUTER:返回計算機(jī)名。除非用戶選中瀏覽器中的一個計算機(jī)名,否則該對話框中的“OK ”按鈕為灰色。

BIF_BROWSEFORPRINTER:返回打印機(jī)名。除非選中一個打印機(jī)名,否則“OK ”按鈕為灰色。

BIF_BROWSEINCLUDEFILES:瀏覽器將顯示目錄,同時也顯示文件。

BIF_DONTGOBELOWDOMAIN:在樹形視窗中,不包含域名底下的網(wǎng)絡(luò)目錄結(jié)構(gòu)。 BIF_EDITBOX:瀏覽對話框中包含一個編輯框,在該編輯框中用戶可以輸入選中項的名字。

BIF_RETURNFSANCESTORS:返回文件系統(tǒng)的一個節(jié)點。僅僅當(dāng)選中的是有意義的節(jié)點時,“OK ”按鈕才可以使用。

BIF_RETURNONLYFSDIRS:僅僅返回文件系統(tǒng)的目錄。例如:在瀏覽文件夾對話框中,當(dāng)選中任意一個目錄時,該“OK ”按鈕可用,而當(dāng)選中“我的電腦”或“網(wǎng)上鄰居”等非有意義的節(jié)點時,“OK ”按鈕為灰色。

BIF_STATUSTEXT:在對話框中包含一個狀態(tài)區(qū)域。通過給對話框發(fā)送消息使回調(diào)函數(shù)設(shè)置狀態(tài)文本。

BIF_VALIDATE:當(dāng)沒有BIF_EDITBOX標(biāo)志位時,該標(biāo)志位被忽略。如果用戶在編輯框中輸入的名字非法,瀏覽對話框?qū)l(fā)送BFFM_VALIDATEFAILED消息給回調(diào)函數(shù)。 lpfn :應(yīng)用程序定義的瀏覽對話框回調(diào)函數(shù)的地址。當(dāng)對話框中的事件發(fā)生時,該對話框?qū)⒄{(diào)用回調(diào)函數(shù)。該參數(shù)可用為NULL 。

lParam :對話框傳遞給回調(diào)函數(shù)的一個參數(shù)指針。

iImage :與選中目錄相關(guān)的圖像。該圖像將被指定為系統(tǒng)圖像列表中的索引值。

,

二、BROWSEINFO 的使用

(1)新建文件夾

我們在用“browseinfo ”產(chǎn)生的瀏覽文件夾的對話框中發(fā)現(xiàn)沒有“新建文件夾”這一個項目(默認(rèn)沒有) 。如何在“BROWSEINFO ”產(chǎn)生的“瀏覽文件夾”對話框中加入“新建文件夾”按鈕。就是指定BROWSEINFO 結(jié)構(gòu)中的ulFlags 變量為(BIF_NEWDIALOGSTYLE | BIF_EDITBOX)的組合。

例子如下:

#define BIF_NEWDIALOGSTYLE 0x0040

#define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX) void SelectFolder(HWND hWnd,CString& strSelectPath) {

BROWSEINFO bifolder;

char FileName[MAX_PATH];

ZeroMemory(&bifolder,sizeof(BROWSEINFO));

bifolder.hwndOwner = hWnd;

bifolder.pszDisplayName = FileName;

bifolder.lpszTitle="請選擇文件夾";

bifolder.ulFlags= BIF_USENEWUI;

LPITEMIDLIST idl=SHBrowseForFolder(&bifolder);

if(idl==NULL)

return;

SHGetPathFromIDList(idl,FileName);

}

(2)回調(diào)函數(shù)

此處只針對路徑改變做了相應(yīng)處理,實際中可根據(jù)需要進(jìn)行相應(yīng)處理。 inline int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)

{

_TCHAR szDir[_MAX_PATH];

switch(uMsg)

{

case BFFM_INITIALIZED: // 初始化

break;

case BFFM_SELCHANGED: // 路徑改變

if(SHGetPathFromIDList((LPITEMIDLIST)lParam,szDir))

{

,

SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);

}

break;

default:

break;

}

return 0;

}

(3)LPBROWSEINFO 與BROWSEINFO 的關(guān)系

LPBROWSEINFO 是BROWSEINFO 的指針結(jié)構(gòu),LPBROWSEINFO 只是一個指針,指針必須要指向一個特定的變量,指針才能使用的,即一定要初始化后才可以使用。

三、BROWSEINFO 對話框的缺陷

調(diào)用BROWSEINFO 對話框這個結(jié)構(gòu)體,缺點就是對話框標(biāo)題與對話框的間距很大。若想調(diào)整間距,得自己去寫一個類似瀏覽文件的對話框。我沒有自己寫過,因為只為這一個功能去實現(xiàn),有一些得不償失。

四、參考資料

參考資料全部來源于網(wǎng)絡(luò)

標(biāo)簽: