アプリケーションにエクスプローラーのようなフレームを実装しようとしています。これは WinXP でも動作するはずです。
ウィンドウクラスに実装IShellBrowser
しました +IUnknown
インターフェイスを実装しました。
私のクラスの属性:
IShellViewPtr m_shView;
HWND m_wndHolder;
CListViewCtrl view;
WM_CREATE
ここにハンドラのコードがあります
m_hWndClient = view.Create(m_hWnd, rcDefault, NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_CLIPCHILDREN, WS_EX_CLIENTEDGE); // view isn't null after it
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
IShellFolderPtr pParentFolder;
ATLVERIFY(SHGetDesktopFolder(&pParentFolder) == S_OK); // OK
FOLDERSETTINGS fs;
fs.fFlags = FVM_DETAILS;
fs.ViewMode = FVM_LIST;
ATLVERIFY(pParentFolder->CreateViewObject(view, IID_IShellView, (void**)&m_shView) == S_OK); // OK
RECT r;
GetClientRect(&r);
ATLVERIFY(m_shView->CreateViewWindow(NULL, &fs, static_cast<IShellBrowser*>(this), &r, &m_wndHolder) == S_OK); // OK
ATLVERIFY(m_shView->UIActivate(SVUIA_ACTIVATE_NOFOCUS) == S_OK); // OK
アプリケーションが起動すると、エクスプローラーのようなフレームが表示されます。フレーム内のフォルダーをナビゲートするために、ダブルクリック イベントを処理したいと考えています。ダブルクリックすると の実装BrowseObject
が呼び出されることを期待していますが、それは起こりません。このフォルダーの代わりに、システム エクスプローラーで開かれます。
助けてください。ありがとうございました。