2014-01-23 27 views
0

我知道有可能採取a dialog that you built yourself and parent it on another form。但是,有可能在您設計的窗體上添加標準的Windows系統對話框?有沒有辦法在另一個表單中標準的Windows對話框?

具體來說,我試圖設置一個帶有多個選項卡的表單,這些選項卡提供了不同的方式來獲取對程序使用的數據的引用。其中一個選項卡應表示文件系統,並且執行此操作的理想方法是使用the standard Open dialog,可以使用COM標識CLSID_FileOpenDialog進行實例化。

有沒有什麼辦法讓系統對話框出現在另一個窗口,沒有邊框,標題欄等?

回答

0

有辦法使用掛鉤,或者通過SetWindowsHookEx()SetWinEventHook(),搶系統對話框的HWND,那麼你可以做任何你想做的事情,如呼叫SetParent()。但僅僅因爲你可以並不意味着你應該。系統對話框被設計爲作爲他們自己的窗口運行,而不是嵌入別人的窗口中。更好的解決方案可能是使用Windows資源管理器(和系統對話框)通過IShellFolder::CreateViewObject()SHCreateShellFolderView()使用的相同的Shell顯示組件,或者找到第三方解決方案來爲您與Shell進行交互。

+0

我已經考慮過了。但是構建我自己的shell視圖的問題在於,即使我構建的視圖與當前的Windows對話框完全相同,但在下一個Windows版本出現時,它可能看起來不像當前對話框。一個OS對話框將會。 –

+0

這很棘手,因爲您正在嘗試使用模式對話框(使用其自己的消息循環)並將其設置爲無模式,以便它使用應用程序消息循環。因此,不管怎樣(使用鉤子或某種方式),您必須在創建對話框之後,但在進入模型循環之前訪問該對話框。只需看一下MFC CDialog :: DoModal()就可以瞭解複雜性。不是爲了膽小鬼! – user1793036

相關問題