如何获得Follder select event

yinshenk 2019-04-27 07:52:01
使用 IShellBrowser封装类,如何获得Follder select event
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2019-05-13
  • 打赏
  • 举报
回复
资源管理器自己有实现IShellBrowser不需要你再写一个。 资源管理器对IWebBrowser2的实现就是给Document属性返回当前的ShellFolderView。等DWebBrowserEvents2::NavigateComplete2事件触发的时候,去往document的当前值上挂DShellFolderViewEvents::SelectionChanged就行了。当然BeforeNavigate2和退出的时候要取消对这个事件的侦听不然会有泄漏。 从资源管理器的IShellWindows获得IWebBrowser2的方法参考https://devblogs.microsoft.com/oldnewthing/20040720-00/?p=38393.之后就可以挂DWebBrowserEvents2了。 既然用ATL了,怎么挂事件不用人教吧。
yinshenk 2019-05-11
  • 打赏
  • 举报
回复
如何获得资源管理器(floder explorer) click folder/file event
yinshenk 2019-05-11
  • 打赏
  • 举报
回复
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) 也试过
yinshenk 2019-05-11
  • 打赏
  • 举报
回复
int CALLBACK BrowserCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg) {
case BFFM_INITIALIZED:
MessageBox(hwnd, L"Test event......1", L"test", MB_OK);
break;
case BFFM_SELCHANGED:
MessageBox(hwnd, L"Test event......2", L"test", MB_OK);
break;
case BFFM_VALIDATEFAILED:
MessageBox(hwnd, L"Test event......3", L"test", MB_OK);
break;
default:
break;
}

return 0;
}

无法获得资源管理器(explorer)的click event
yinshenk 2019-04-27
  • 打赏
  • 举报
回复
CSyncCloudEx::CSyncCloudEx(void)
{
// EnumerateFolder(LPCTSTR path)
}


CSyncCloudEx::~CSyncCloudEx(void)
{
}

STDMETHODIMP CSyncCloudEx::Load(LPCOLESTR wszFile, DWORD dwMode)
{
return S_OK;
}

STDMETHODIMP CSyncCloudEx::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
{
MessageBox(NULL, L"Test event.", L"test", MB_OK);
switch(lParam)
{
case SHCIDS_ALLFIELDS:
break;
case SHCIDS_CANONICALONLY:
break;
//case PCUIDLIST_RELATIVE:
// break;

}

return S_OK;
}

//STDMETHODIMP OnViewWindowActive(IShellView *pshv)
//{
// MessageBox(NULL, L"Test event.", L"test", MB_OK);

// return 0;
//}

//STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wflags)
//{
// MessageBox(NULL, L"Test event.", L"test", MB_OK);

// return 0;
//}

//int CALLBACK CSyncCloudEx::BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
//{
// MessageBox(NULL, L"Test event.", L"test", MB_OK);
//
// return 0;
//}

//STDMETHODIMP CSyncCloudEx::QueryService(REFGUID guidService, REFIID riid, char ppv)
//{
// MessageBox(NULL, L"Test event.", L"test", MB_OK);
// return 0;
//}


//LRESUL CALLBACK CSyncCloudEx::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
//{
// return 0;
//}

STDMETHODIMP EnumObjects(HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList)
{
MessageBox(NULL, L"Test event.", L"test", MB_OK);
return 0;
}
yinshenk 2019-04-27
  • 打赏
  • 举报
回复
class ATL_NO_VTABLE CSyncCloudEx :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSyncCloudEx, &IID_IComponentRegistrar>,
public IDispatchImpl<IComponentRegistrar, &IID_IComponentRegistrar, &LIBID_CloudDiskLib>,
// public IPersistFile,
public IShellBrowser
{
public:

DECLARE_REGISTRY_RESOURCEID(IDR_CLOUDDISK)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CSyncCloudEx)
COM_INTERFACE_ENTRY(IComponentRegistrar)
COM_INTERFACE_ENTRY(IDispatch)
// COM_INTERFACE_ENTRY(IPersistFile)
COM_INTERFACE_ENTRY(IShellBrowser)
END_COM_MAP()

CSyncCloudEx(void);
~CSyncCloudEx(void);

public:
STDMETHOD(Load)( LPCOLESTR wszFile, DWORD dwMode );
STDMETHOD(CompareIDs)(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2);

// STDMETHOD(OnViewWindowActive)(IShellView *pshv);
// STDMETHOD(BrowseObject)(LPCITEMIDLIST pidl, UINT wflags);

// int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData);
//LRESUL CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
// STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, char ppv);
STDMETHOD(EnumObjects)(HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList);

};

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧