📄 cb199910dc_f.asp.htm
字号:
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <b> return</b>
lpidlResult; </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// =====================================================================</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Function: CopyPIDL()</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis: Deep copies a PIDL, then returns a pointer to the copy</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Parameters: LPITEMIDLIST pidl -- PIDL to copy</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code>LPITEMIDLIST
CopyPIDL(LPITEMIDLIST lpidl) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code> <b> unsigned</b>
<b>short</b> size = GetPIDLSize(lpidl); </span></p>
<p class=Code><span class=Code> LPITEMIDLIST lpidlCopy = CreatePIDL(size); </span></p>
<p class=Code><span class=Code> MoveMemory(lpidlCopy, lpidl, size); </span></p>
<p class=Code><span class=Code> <b> return</b>
lpidlCopy; </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Function: MergeIDLists()</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis: Creates a new PIDL that contains a concatenation of</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// two PIDLs, then returns a pointer to this new PIDL</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Parameters: LPITEMIDLIST pidl1, pidl2 -- PIDLs to
merge</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code>LPITEMIDLIST
MergeIDLists(LPITEMIDLIST lpidl1, LPITEMIDLIST lpidl2) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code><b> int</b> cb1, cb2; </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <b> if</b>
(lpidl1) cb1 = GetPIDLSize(lpidl1); </span></p>
<p class=Code><span class=Code> <b> if</b>
(cb1) cb1 = cb1 - 2; </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <b> if</b>
(lpidl2) cb2 = GetPIDLSize(lpidl2); </span></p>
<p class=Code><span class=Code> <b> if</b>
(cb2) cb2 = cb2 - 2; </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <b> int</b>
total_size = cb1 + cb2 + 2; </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> LPMALLOC lpMalloc; </span></p>
<p class=Code><span class=Code> LPITEMIDLIST lpidlNew; </span></p>
<p class=Code><span class=Code> <b> if</b>
(SUCCEEDED(SHGetMalloc(&lpMalloc))) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> lpidlNew = (LPITEMIDLIST)lpMalloc->Alloc(total_size); </span></p>
<p class=Code><span class=Code> lpMalloc->Release();</span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <b> if</b>
(lpidlNew) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> ZeroMemory(lpidlNew, total_size); </span></p>
<p class=Code><span class=Code> CopyMemory(lpidlNew, lpidl1, cb1); </span></p>
<p class=Code><span class=Code> CopyMemory(((LPBYTE)lpidlNew) + cb1,
lpidl2, cb2); </span></p>
<p class=Code><span class=Code> FillMemory(((LPBYTE)lpidlNew) + cb1 + cb2,
2, 0); </span></p>
<p class=Code><span class=Code> <b
style='mso-bidi-font-weight:normal'>return</b> lpidlNew; </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <b> return</b>
NULL; </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Subheads>End Listing
One</p>
<p class=BodyText> </p>
<p class=Subheads><a name=ListingTwo></a>Begin Listing Two - Filling the ListView</p>
<p class=Code><span class=Code><b>void</b> <b
style='mso-bidi-font-weight:normal'>__fastcall</b>
TForm1::FillListEx(LPSHELLFOLDER lpsf, LPITEMIDLIST lpidl) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Get a pointer to the shell's IMalloc interface</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// for later use - it's required to use the shell</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// task allocator to free the Item identifiers and PIDLs. </span></i></span></p>
<p class=Code><span class=Code> LPMALLOC lpMalloc; </span></p>
<p class=Code><span class=Code> <b> if</b>
(SUCCEEDED(SHGetMalloc(&lpMalloc))) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Prevent screen updating. </span></i></span></p>
<p class=Code><span class=Code> ListView1->Items->BeginUpdate();</span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Here we enumerate the contents of the folder that</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// lpsf is bound to. To do this, we first grab a pointer</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// to the IEnumIDList interface. </span></i></span></p>
<p class=Code><span class=Code> LPENUMIDLIST lpeidl; </span></p>
<p class=Code><span class=Code> <b> if</b>
(SUCCEEDED(lpsf->EnumObjects(NULL, SHCONTF_FOLDERS |</span></p>
<p class=Code><span class=Code> SHCONTF_NONFOLDERS,
&lpeidl))) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Using the IEnumIDList interface's Next method, we</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// iterate through the item IDs one at a time. The resulting</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// item is stored in lpidlCurrent. </span></i></span></p>
<p class=Code><span class=Code> LPITEMIDLIST lpidlCurrent; </span></p>
<p class=Code><span class=Code> <b> unsigned</b>
<b>long</b> ulFetched; </span></p>
<p class=Code><span class=Code> <b> while</b>
(lpeidl->Next(1, &lpidlCurrent, &ulFetched) == S_OK) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Create a fully qualified itemidlist. </span></i></span></p>
<p class=Code><span class=Code> LPITEMIDLIST lpidlFQ =
MergeIDLists(lpMalloc, lpidl, </span></p>
<p class=Code><span class=Code> lpidlCurrent); </span></p>
<p class=Code><span class=Code> <b> if</b>
(lpidlFQ) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> SHFILEINFO FileInfo; </span></p>
<p class=Code><span class=Code> <b> unsigned</b>
<b>int</b> uSHFlags = SHGFI_SYSICONINDEX |</span></p>
<p class=Code><span class=Code> SHGFI_DISPLAYNAME |</span></p>
<p class=Code><span class=Code> SHGFI_PIDL; </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Get file info. </span></i></span></p>
<p class=Code><span class=Code> SHGetFileInfo((LPCSTR)lpidlFQ, 0, </span></p>
<p class=Code><span class=Code> &FileInfo, <b
style='mso-bidi-font-weight:normal'>sizeof</b>(SHFILEINFO), </span></p>
<p class=Code><span class=Code> uSHFlags); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> TListItem *Item =
ListView1->Items->Add();</span></p>
<p class=Code><span class=Code> Item->Caption = FileInfo.szDisplayName; </span></p>
<p class=Code><span class=Code> Item->ImageIndex
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -