⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cb199910dc_f.asp.htm

📁 C++builder学习资料C++builder
💻 HTM
📖 第 1 页 / 共 5 页
字号:
     

<p class=Code><span class=Code>&nbsp;&nbsp;} </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<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>&nbsp; </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:&nbsp;&nbsp;&nbsp; CopyPIDL()</span></i></span></p>     

     

<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis:&nbsp;&nbsp;&nbsp; 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>&nbsp; </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>&nbsp;&nbsp;<b> unsigned</b>     

<b>short</b> size = GetPIDLSize(lpidl); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;LPITEMIDLIST lpidlCopy = CreatePIDL(size); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;MoveMemory(lpidlCopy, lpidl, size); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<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>&nbsp; </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:&nbsp;&nbsp;&nbsp; MergeIDLists()</span></i></span></p>     

     

<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis:&nbsp;&nbsp;&nbsp; Creates a new PIDL that contains a concatenation of</span></i></span></p>     

     

<p class=Code><span class=Code><i><span Class=CodeBlue>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp; </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>&nbsp;&nbsp;int</b> cb1, cb2; </span></p>     

     

<p class=Code><span class=Code>&nbsp; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> if</b>     

(lpidl1) cb1 = GetPIDLSize(lpidl1); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> if</b>     

(cb1) cb1 = cb1 - 2; </span></p>     

     

<p class=Code><span class=Code>&nbsp; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> if</b>     

(lpidl2) cb2 = GetPIDLSize(lpidl2); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> if</b>     

(cb2) cb2 = cb2 - 2; </span></p>     

     

<p class=Code><span class=Code>&nbsp; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> int</b>     

total_size = cb1 + cb2 + 2; </span></p>     

     

<p class=Code><span class=Code>&nbsp; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;LPMALLOC lpMalloc; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;LPITEMIDLIST lpidlNew; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> if</b>     

(SUCCEEDED(SHGetMalloc(&amp;lpMalloc))) </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;{ </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;lpidlNew = (LPITEMIDLIST)lpMalloc-&gt;Alloc(total_size); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;lpMalloc-&gt;Release();</span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;} </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> if</b>     

(lpidlNew) </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;{ </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(lpidlNew, total_size); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;CopyMemory(lpidlNew, lpidl1, cb1); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;CopyMemory(((LPBYTE)lpidlNew) + cb1,     

lpidl2, cb2); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;FillMemory(((LPBYTE)lpidlNew) + cb1 + cb2,     

2, 0); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp; <b     

style='mso-bidi-font-weight:normal'>return</b> lpidlNew; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;} </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<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> &nbsp; </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>&nbsp;&nbsp;<i> <span Class=CodeBlue>// Get a pointer to the shell's IMalloc interface</span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<i> <span Class=CodeBlue>// for later use - it's required to use the shell</span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<i> <span Class=CodeBlue>// task allocator to free the Item identifiers and PIDLs. </span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;LPMALLOC lpMalloc; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;<b> if</b>     

(SUCCEEDED(SHGetMalloc(&amp;lpMalloc))) </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;{ </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;<i> <span Class=CodeBlue>// Prevent screen updating. </span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;ListView1-&gt;Items-&gt;BeginUpdate();</span></p>     

     

<p class=Code><span class=Code>&nbsp; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;<i> <span Class=CodeBlue>// Here we enumerate the contents of the folder that</span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<i> <span Class=CodeBlue>// to the IEnumIDList interface. </span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;LPENUMIDLIST lpeidl; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;<b> if</b>     

(SUCCEEDED(lpsf-&gt;EnumObjects(NULL, SHCONTF_FOLDERS |</span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHCONTF_NONFOLDERS,     

&amp;lpeidl))) </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;{ </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i> <span Class=CodeBlue>// Using the IEnumIDList interface's Next method, we</span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i> <span Class=CodeBlue>// item is stored in lpidlCurrent. </span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPITEMIDLIST lpidlCurrent; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b> unsigned</b>     

<b>long</b> ulFetched; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b> while</b>     

(lpeidl-&gt;Next(1, &amp;lpidlCurrent, &amp;ulFetched) == S_OK) </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i> <span Class=CodeBlue>// Create a fully qualified itemidlist. </span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPITEMIDLIST lpidlFQ =     

MergeIDLists(lpMalloc, lpidl, </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpidlCurrent); </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b> if</b>     

(lpidlFQ) </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHFILEINFO FileInfo; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b> unsigned</b>     

<b>int</b> uSHFlags = SHGFI_SYSICONINDEX |</span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHGFI_DISPLAYNAME |</span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHGFI_PIDL; </span></p>     

     

<p class=Code><span class=Code>&nbsp; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i> <span Class=CodeBlue>// Get file info. </span></i></span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHGetFileInfo((LPCSTR)lpidlFQ, 0, </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;FileInfo, <b     

style='mso-bidi-font-weight:normal'>sizeof</b>(SHFILEINFO), </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uSHFlags); </span></p>     

     

<p class=Code><span class=Code>&nbsp; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TListItem *Item =     

ListView1-&gt;Items-&gt;Add();</span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Item-&gt;Caption = FileInfo.szDisplayName; </span></p>     

     

<p class=Code><span class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Item-&gt;ImageIndex 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -