显示磁盘目录
(
二十
)
本文讲述如何用
TreeControl
控件来显示磁盘目录。
1.
创建对话框工程:
DiskTreeDirectory
2.
添加一个
TreeControl
控件。
3.
声明几个变量如下:
CImageList
imlst
;
int
imindex
;
SHFILEINFO
fileinfo
;
4.
OnInitDialog
()
添加代码如下:
imlst
.
Create
(16,16,
ILC_COLOR32
|
ILC_MASK
,0,0);
m_trdisktree
.
SetImageList
(&
imlst
,
TVSIL_NORMAL
);
m_trdisktree
.
ModifyStyle
(0L,
TVS_HASLINES
|
TVS_LINESATROOT
);
size_t
alldriver
= ::
GetLogicalDriveStrings
(0,
NULL
);
_TCHAR
*
driverstr
;
driverstr
=
new
_TCHAR
[
alldriver
+
sizeof
(
_T
(
""
))];
if
(
GetLogicalDriveStrings
(
alldriver
,
driverstr
)!=
alldriver
-1)
return
FALSE
;
_TCHAR
*
pdriverstr
=
driverstr
;
size_t
driversize
=
strlen
(
pdriverstr
);
HTREEITEM
disktree
;
while
(
driversize
>0)
{
SHGetFileInfo
(
pdriverstr
,0,&
fileinfo
,
sizeof
(
fileinfo
),
SHGFI_ICON
);
imindex
=
imlst
.
Add
(
fileinfo
.
hIcon
);
disktree
=
m_trdisktree
.
InsertItem
(
pdriverstr
,
imindex
,
imindex
,
TVI_ROOT
,
TVI_LAST
);
pdriverstr
+=
driversize
+ 1;
driversize
=
strlen
(
pdriverstr
);
}
5.
TreeControl
相应
TVN_SELCHANGED
,代码如下:
CFileFind
filefd
;
HTREEITEM
parent
;
HTREEITEM
rootitem
=
m_trdisktree
.
GetSelectedItem
();
if
(
m_trdisktree
.
GetChildItem
(
rootitem
))
return
;
parent
=
rootitem
;
CString
rootstr
=
m_trdisktree
.
GetItemText
(
rootitem
);
CString
temp
;
CString
lstr
;
if
(
rootstr
.
Find
(
"//"
) == 2)
{
lstr
.
Format
(
"%s*.*"
,
rootstr
);
}
else
{
CString
strparent
;
while
(1)
{
parent
=
m_trdisktree
.
GetParentItem
(
parent
);
strparent
=
m_trdisktree
.
GetItemText
(
parent
);
if
(
strparent
.
Find
(
"//"
) ==2)
goto
end
;
temp
+=
strparent
;
temp
+=
"//"
;
}
end
:
CString
root
=
m_trdisktree
.
GetItemText
(
parent
);
lstr
.
Format
(
"%s%s%s//*.*"
,
root
,
temp
,
rootstr
);
}
BOOL
bfinded
=
filefd
.
FindFile
(
lstr
);
while
(
bfinded
)
{
bfinded
=
filefd
.
FindNextFile
();
CString
filepath
;
if
(
filefd
.
IsDirectory
()&&!
filefd
.
IsDots
())
{
SHGetFileInfo
(
filefd
.
GetFilePath
(),0,&
fileinfo
,
sizeof
(
fileinfo
),
SHGFI_ICON
);
imindex
=
imlst
.
Add
(
fileinfo
.
hIcon
);
m_trdisktree
.
InsertItem
(
filefd
.
GetFileName
(),
imindex
,
imindex
,
rootitem
);
}
}
完成。