I'm using a CMFCShellTreeCtrl derived class called CShellTreeCtrl in an CMFCOutlookBar object to display files and I'd like to filter file types and later be able to drag and drop files from it.
I've managed to display files as well as folders, but struggling to understand how to use IEnumIDList to achieve the file type filtering.
int CBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMFCOutlookBar::OnCreate(lpCreateStruct) == -1)
return -1;
CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)GetUnderlyingWindow();
if (pOutlookBar != NULL)
{
pOutlookBar->SetImageList(IDB_PAGES_HC, 24);
pOutlookBar->SetToolbarImageList(IDB_PAGES_SMALL_HC, 16);
pOutlookBar->EnableInPlaceEdit(FALSE);
RecalcLayout();
}
RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
// can float, can autohide, can resize, CAN NOT CLOSE
DWORD dwStyle = AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
CRect rectDummy(0, 0, 0, 0);
const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_INFOTIP;
m_pDirList = new CShellTreeCtrl;
m_pDirList->Create(dwTreeStyle, rectDummy, this, ID_SHELLDRILL);
m_pDirList->SetFlags(m_pDirList->GetFlags() | SHCONTF_NONFOLDERS);
pOutlookBar->AddControl(m_pDirList, _T("Folders"), 2, FALSE, dwStyle);
}
Got it working with the following code adapted from this similar question