日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用IShellView接口函数CreateViewWindow

發(fā)布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用IShellView接口函数CreateViewWindow 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

下面是代碼:?

  • IShellFolder*?pShellFolderDesktop?=?NULL; ?
  • hr?=?SHGetDesktopFolder(&pShellFolderDesktop); ?
  • LPITEMIDLIST?pidl?=?ILCreateFromPath(lpszPath); ?
  • IShellFolder*?pShellFolder?=?NULL; ?
  • ???? ?
  • //?pidl指出要瀏覽的folder路徑 ?
  • pShellFolderDesktop->BindToObject(pidl,?NULL,?IID_PPV_ARGS(&pShellFolder)); ?
  • ???? ?
  • //?hWndParent是自己創(chuàng)建的一個窗口,folder中的內(nèi)容將會在該窗口中顯示 ?
  • pShellFolder->CreateViewObject(hWndParent,?IID_PPV_ARGS(&pShellView->m_piView);? ?
  • ???? ?
  • //?創(chuàng)建shell相關(guān)窗口,其實是ShellDll_DefView及子窗口SysListView(SysListView可能也有子窗口),該folder中的內(nèi)容 ?
  • //?其實就是在SysListView中顯示的,而ShellDll_DefView會作為hWndParent的子窗口。 ?
  • //?注意該函數(shù)的第3個參數(shù),一定要是IShellBrowser的一個實例,而IShellBrowser又是一個純虛類,不能直接創(chuàng)建該類的對象, ?
  • //只能先實現(xiàn),然后再創(chuàng)建,CShellBrowser就是從該類IShellBrowser派生出來的,只需要實現(xiàn)相關(guān)接口就行了。 ?
  • CShellBrowser*?psb?=?new?CShellBrowser; ?
  • pShellView->m_piView->CreateViewWindow(NULL,?&fs,?static_cast<IShellBrowser*>(psb),?const_cast<LPRECT>(&rect),?&psb->m_hWnd);?
  • 實際上,CreateViewWindow的第3個參數(shù)主要是為IShellView指定一個框架,可以這樣理解,為視圖指定一個框架,也可以這樣理解,視圖必須
    在框架中顯示,IShellBrowser的作用就像是瀏覽器窗口,而IShellView就像是網(wǎng)頁。
    附CShellBrowser:
    ?

    ?

  • //?IServiceProvider可以沒有 ?
  • class?CShellBrowser?:?public?IShellBrowser,?public?IServiceProvider ?
  • { ?
  • public: ?
  • ????CShellBrowser(HINSTANCE?hInstance); ?
  • ????~CShellBrowser(void); ?
  • ?
  • public: ?
  • ????//?IUnknown?methods ?
  • ????STDMETHOD(QueryInterface)(REFIID?riid,?void?**ppvObject); ?
  • ????STDMETHOD_(ULONG,?AddRef)(void); ?
  • ????STDMETHOD_(ULONG,?Release)(void); ?
  • ?
  • ????//?IServiceProvider?methods ?
  • ????STDMETHOD(QueryService)(REFGUID?guidService,?REFIID?riid,?void?**ppvObject); ?
  • ?
  • ????//?IOleWindow?methods ?
  • ????STDMETHOD(GetWindow)(HWND?*phwnd); ?
  • ????STDMETHOD(ContextSensitiveHelp)(BOOL?fEnterMode); ?
  • ?
  • ????//?IShellBrowser?methods ?
  • ????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) ?
  • { ?
  • ?
  • } ?
  • ?
  • //?IUnknown?methods ?
  • 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; ?
  • } ?
  • ?
  • //?IServiceProvider?methods ?
  • 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; ?
  • } ?
  • ?
  • //?IOleWindow?methods ?
  • STDMETHODIMP?CShellBrowser::GetWindow(HWND?*phwnd) ?
  • { ?
  • ????*phwnd?=?GetSafeHwnd(); ?
  • ????return?S_OK; ?
  • } ?
  • ?
  • STDMETHODIMP?CShellBrowser::ContextSensitiveHelp(BOOL?fEnterMode) ?
  • { ?
  • ????return?E_NOTIMPL; ?
  • } ?
  • ?
  • //?IShellBrowser?methods ?
  • 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; ?
  • }?
  • ?

    轉(zhuǎn)載于:https://blog.51cto.com/jetyi/560745

    總結(jié)

    以上是生活随笔為你收集整理的使用IShellView接口函数CreateViewWindow的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。