📄 cb200006dc_f.asp.htm
字号:
<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, </span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue> // we
iterate through the item IDs one at a time. The</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// resulting 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> while</b>
(lpeidl->Next(1, &lpidlCurrent, NULL) == S_OK) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Will hold the attributes of each enumerated</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue> //
object (here we specify the ones we want</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue> //
returned). </span></i></span></p>
<p class=Code><span class=Code> <b> unsigned</b>
<b>long</b> ulAttrs = SFGAO_DISPLAYATTRMASK
|</span></p>
<p class=Code><span class=Code> SFGAO_FILESYSTEM | SFGAO_FOLDER; </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Get the attributes of the file. </span></i></span></p>
<p class=Code><span class=Code> HRESULT HResult =</span></p>
<p class=Code><span class=Code> m_FPShellFolder->GetAttributesOf(1, </span></p>
<p class=Code><span class=Code> <b> static_cast</b><LPCITEMIDLIST *>(&lpidlCurrent), </span></p>
<p class=Code><span class=Code> &ulAttrs); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <b> if</b>
(SUCCEEDED(HResult)) </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 =</span></p>
<p class=Code><span class=Code> MergeIDLists(m_FPidl,
lpidlCurrent); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Determine the attributes of this object. </span></i></span></p>
<p class=Code><span class=Code> <b> bool</b>
IsVirtual = !(ulAttrs & SFGAO_FILESYSTEM); </span></p>
<p class=Code><span class=Code> <b>bool</b> IsFolder =
(ulAttrs & SFGAO_FOLDER); </span></p>
<p class=Code><span class=Code> <b> bool</b>
IsLink = (ulAttrs & SFGAO_LINK); </span></p>
<p class=Code><span class=Code> <b> bool</b>
IsShared = (ulAttrs & SFGAO_SHARE); </span></p>
<p class=Code><span class=Code> <b> bool</b>
IsGhosted = (ulAttrs & SFGAO_GHOSTED); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Create a new TListShellInfo instance. </span></i></span></p>
<p class=Code><span class=Code> TListShellInfo* ShellInfo =</span></p>
<p class=Code><span class=Code> <b> new</b> TListShellInfo(</span></p>
<p class=Code><span class=Code> lpidlFQ, lpidlCurrent,
IsVirtual, </span></p>
<p class=Code><span class=Code> IsFolder, IsLink, IsShared,
IsGhosted); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Fire the OnEnumeration event to determine</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// whether to add this item. </span></i></span></p>
<p class=Code><span class=Code> <b> bool</b>
CanAdd = <b>true</b>;</span></p>
<p class=Code><span class=Code> <b> if</b>
(ShellInfo && m_FOnEnumeration) </span></p>
<p class=Code><span class=Code> m_FOnEnumeration(<b
style='mso-bidi-font-weight:normal'>this</b>, *ShellInfo, CanAdd); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <b> if</b>
(CanAdd) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Add a new TListItem. </span></i></span></p>
<p class=Code><span class=Code> TListItem* Item = Items->Add();</span></p>
<p class=Code><span class=Code> <b>if</b> (Item) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Associate the TListShellInfo with Data. </span></i></span></p>
<p class=Code><span class=Code> Item->Data = ShellInfo; </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Set the caption for this item. </span></i></span></p>
<p class=Code><span class=Code> Item->Caption =</span></p>
<p class=Code><span class=Code> DisplayNameFromPIDL(m_FPShellFolder, </span></p>
<p class=Code><span class=Code> lpidlCurrent); </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Otherwise, free the ShellInfo instance</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// (will free lpidlFQ and lpidlCurrent). </span></i></span></p>
<p class=Code><span class=Code> <b> else</b> </span></p>
<p class=Code><span class=Code> <b> delete</b> ShellInfo; </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <b> else</b></span></p>
<p class=Code><span class=Code> {</span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Otherwise, free the ShellInfo instance</span></i></span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// (will free lpidlFQ and lpidlCurrent). </span></i></span></p>
<p class=Code><span class=Code> <b> delete</b> ShellInfo; </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// If the GetAttributesOf call failed, </span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue> //
destroy the PIDL. </span></i></span></p>
<p class=Code><span class=Code> <b> else</b>
</span></p>
<p class=Code><span class=Code> FreePIDL(lpidlCurrent); </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <b> catch</b>
(...)</span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Release the pointer to the IEnumIDList interface. </span></i></span></p>
<p class=Code><span class=Code> lpeidl->Release();</span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Release the pointer to the IEnumIDList interface. </span></i></span></p>
<p class=Code><span class=Code> lpeidl->Release();</span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Subheads>End Listing
Two</p>
<p class=BodyText> </p>
<p class=Subheads><a name=ListingThree></a>Begin Listing Three - Supplying the list view with shell
information</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>// private CNNotify member function (CN_NOTIFY </span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// message handler). </span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// </span></i></span></p>
<p class=Code><span class=Code><b>void</b> <b
style='mso-bidi-font-weight:normal'>__fastcall</b>
TExpListView::CNNotify(TMessage& AMsg) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Grab a pointer to the NMHDR structure. </span></i></span></p>
<p class=Code><span class=Code> LPNMHDR lpnmhdr = <b>reinterpret_cast</b><LPNMHDR>(AMsg.LParam); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// If the notification is an item info request. </span></i></span></p>
<p class=Code><span class=Code> <b> if</b>
(lpnmhdr->code == LVN_GETDISPINFO) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <i> <span Class=CodeBlue>// Grab a point
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -