成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

瀏覽文件夾_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 對(duì)話框的缺陷 ................................................................................................... 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 :瀏覽文件夾對(duì)話框的父窗體句柄。

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

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

ITEMID 和ITEMIDLIST

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

,

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

BOOL SHGetPathFromIDList( LPCITEMIDLIST pidl, LPSTR pszPath )

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

返回值

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

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

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

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

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

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

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

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

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

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

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

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

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

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

,

二、BROWSEINFO 的使用

(1)新建文件夾

我們?cè)谟谩癰rowseinfo ”產(chǎn)生的瀏覽文件夾的對(duì)話框中發(fā)現(xiàn)沒有“新建文件夾”這一個(gè)項(xiàng)目(默認(rèn)沒有) 。如何在“BROWSEINFO ”產(chǎn)生的“瀏覽文件夾”對(duì)話框中加入“新建文件夾”按鈕。就是指定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="請(qǐng)選擇文件夾";

bifolder.ulFlags= BIF_USENEWUI;

LPITEMIDLIST idl=SHBrowseForFolder(&bifolder);

if(idl==NULL)

return;

SHGetPathFromIDList(idl,FileName);

}

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

此處只針對(duì)路徑改變做了相應(yīng)處理,實(shí)際中可根據(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 只是一個(gè)指針,指針必須要指向一個(gè)特定的變量,指針才能使用的,即一定要初始化后才可以使用。

三、BROWSEINFO 對(duì)話框的缺陷

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

四、參考資料

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

標(biāo)簽: