生活随笔
收集整理的這篇文章主要介紹了
使用IShellView接口函数CreateViewWindow
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面是代碼:?
IShellFolder*?pShellFolderDesktop?=?NULL; ?hr?=?SHGetDesktopFolder(&pShellFolderDesktop); ?LPITEMIDLIST?pidl?=?ILCreateFromPath(lpszPath); ?IShellFolder*?pShellFolder?=?NULL; ????? ??pShellFolderDesktop->BindToObject(pidl,?NULL,?IID_PPV_ARGS(&pShellFolder)); ????? ??pShellFolder->CreateViewObject(hWndParent,?IID_PPV_ARGS(&pShellView->m_piView);? ????? ?????CShellBrowser*?psb?=?new?CShellBrowser; ?pShellView->m_piView->CreateViewWindow(NULL,?&fs,?static_cast<IShellBrowser*>(psb),?const_cast<LPRECT>(&rect),?&psb->m_hWnd);? 實際上,CreateViewWindow的第3個參數主要是為IShellView指定一個框架,可以這樣理解,為視圖指定一個框架,也可以這樣理解,視圖必須
在框架中顯示,IShellBrowser的作用就像是瀏覽器窗口,而IShellView就像是網頁。
附CShellBrowser:
?
?
?class?CShellBrowser?:?public?IShellBrowser,?public?IServiceProvider ?{ ?public: ?????CShellBrowser(HINSTANCE?hInstance); ?????~CShellBrowser(void); ??public: ??????????STDMETHOD(QueryInterface)(REFIID?riid,?void?**ppvObject); ?????STDMETHOD_(ULONG,?AddRef)(void); ?????STDMETHOD_(ULONG,?Release)(void); ???????????STDMETHOD(QueryService)(REFGUID?guidService,?REFIID?riid,?void?**ppvObject); ???????????STDMETHOD(GetWindow)(HWND?*phwnd); ?????STDMETHOD(ContextSensitiveHelp)(BOOL?fEnterMode); ???????????STDMETHOD(BrowseObject)(PCUIDLIST_RELATIVE?pidl,?UINT?wFlags); ?????STDMETHOD(EnableModelessSB)(BOOL?fEnable); ?????STDMETHOD(GetControlWindow)(UINT?id,?HWND?*lphwnd); ?????STDMETHOD(GetViewStateStream)(DWORD?grfMode,?IStream?**ppStrm); ?????STDMETHOD(InsertMenusSB)(HMENU?hmenuShared,?LPOLEMENUGROUPWIDTHS?lpMenuWidths); ?????STDMETHOD(OnViewWindowActive)(IShellView?*ppshv); ?????STDMETHOD(QueryActiveShellView)(IShellView?**ppshv); ?????STDMETHOD(RemoveMenusSB)(HMENU?hmenuShared); ?????STDMETHOD(SendControlMsg)(UINT?id,?UINT?uMsg,?WPARAM?wParam,?LPARAM?lParam,?LRESULT?*pret); ?????STDMETHOD(SetMenuSB)(HMENU?hmenuShared,?HOLEMENU?holemenuRes,?HWND?hwndActiveObject); ?????STDMETHOD(SetStatusTextSB)(LPCWSTR?lpszStatusText); ?????STDMETHOD(SetToolbarItems)(LPTBBUTTONSB?lpButtons,?UINT?nButtons,?UINT?uFlags); ?????STDMETHOD(TranslateAcceleratorSB)(LPMSG?lpmsg,?WORD?wID); ??????... ?private: ?????ULONG?m_ulRef; ?} ??CShellBrowser::CShellBrowser(HINSTANCE?hInstance) ?:?m_ulRef(0) ?,?m_hInstance(hInstance) ?{ ?} ??CShellBrowser::~CShellBrowser(void) ?{ ??} ???STDMETHODIMP?CShellBrowser::QueryInterface(REFIID?riid,?void?**ppvObject) ?{ ?????if?(ppvObject?==?NULL) ?????????return?E_POINTER; ??????*ppvObject?=?NULL; ??????if?(IsEqualIID(riid,?IID_IUnknown)) ?????????*ppvObject?=?static_cast<IUnknown*>(static_cast<IShellBrowser*>(this)); ?????else?if?(IsEqualIID(riid,?IID_IOleWindow)) ?????????*ppvObject?=?static_cast<IOleWindow*>(this); ?????else?if?(IsEqualIID(riid,?IID_IShellBrowser)) ?????????*ppvObject?=?static_cast<IShellBrowser*>(this); ?????else?????????return?E_NOINTERFACE; ??????static_cast<IUnknown*>(*ppvObject)->AddRef(); ??????return?S_OK; ?} ??STDMETHODIMP_(ULONG)?CShellBrowser::AddRef(void) ?{ ?????return?++m_ulRef; ?} ??STDMETHODIMP_(ULONG)?CShellBrowser::Release(void) ?{ ?????if?(--m_ulRef?==?0UL) ?????{ ?????????m_pObject?=?NULL; ?????????delete?this; ?????????return?0UL; ?????} ??????return?m_ulRef; ?} ???STDMETHODIMP?CShellBrowser::QueryService(REFGUID?guidService,?REFIID?riid,?void?**ppvObject) ?{ ?????if?(ppvObject?==?NULL) ?????????return?E_POINTER; ??????if?(IsEqualGUID(guidService,?SID_SShellBrowser)) ?????????return?QueryInterface(riid,?ppvObject); ??????return?E_NOINTERFACE; ?} ???STDMETHODIMP?CShellBrowser::GetWindow(HWND?*phwnd) ?{ ?????*phwnd?=?GetSafeHwnd(); ?????return?S_OK; ?} ??STDMETHODIMP?CShellBrowser::ContextSensitiveHelp(BOOL?fEnterMode) ?{ ?????return?E_NOTIMPL; ?} ???STDMETHODIMP?CShellBrowser::BrowseObject(PCUIDLIST_RELATIVE?pidl,?UINT?wFlags) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::EnableModelessSB(BOOL?fEnable) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::GetControlWindow(UINT?id,?HWND?*lphwnd) ?{ ?????*lphwnd?=?NULL; ?????return?S_OK; ?} ??STDMETHODIMP?CShellBrowser::GetViewStateStream(DWORD?grfMode,?IStream?**ppStrm) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::InsertMenusSB(HMENU?hmenuShared,?LPOLEMENUGROUPWIDTHS?lpMenuWidths) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::OnViewWindowActive(IShellView?*ppshv) ?{ ?????return?S_OK; ?} ??STDMETHODIMP?CShellBrowser::QueryActiveShellView(IShellView?**ppshv) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::RemoveMenusSB(HMENU?hmenuShared) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::SendControlMsg(UINT?id,?UINT?uMsg,?WPARAM?wParam,?LPARAM?lParam,?LRESULT?*pret) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::SetMenuSB(HMENU?hmenuShared,?HOLEMENU?holemenuRes,?HWND?hwndActiveObject) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::SetStatusTextSB(LPCWSTR?lpszStatusText) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::SetToolbarItems(LPTBBUTTONSB?lpButtons,?UINT?nButtons,?UINT?uFlags) ?{ ?????return?E_NOTIMPL; ?} ??STDMETHODIMP?CShellBrowser::TranslateAcceleratorSB(LPMSG?lpmsg,?WORD?wID) ?{ ?????return?E_NOTIMPL; ?}? ?
轉載于:https://blog.51cto.com/jetyi/560745
總結
以上是生活随笔為你收集整理的使用IShellView接口函数CreateViewWindow的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。