2012-01-04 96 views
2

我試圖使用IFileOpenDialog從同一對話框中選擇文件和文件夾(在多選模式下)。我能夠添加一個自定義按鈕到對話框,並實現我想要做的事情。現在我想從對話框中刪除默認的「打開」按鈕,因爲它的行爲取決於選擇的順序。如果首先選擇文件然後選擇文件夾(多選),我會得到OnFileOk事件,但如果用戶先選擇文件夾然後選擇文件,則單擊打開按鈕可打開第一個選定文件夾。有沒有辦法刪除或隱藏打開按鈕?是否可以從IFileDialog中刪除/隱藏打開的按鈕

我的想法是枚舉IFileDialog的子窗口,並刪除標題爲「打開」和類「按鈕」的孩子。我在演示之前嘗試枚舉了IFileOpenDialog的子窗口,但我只有一個帶有「Button」類的子元素,但其標題是「start」。我無法找到隱藏「打開」按鈕的標準方式。請讓我知道是否有任何其他方式做到這一點。

謝謝, Abhinay。

+0

的聲音,我發現你的Windows開始按鈕,顯然你認錯窗口句柄。請看看IFileDialogCustomize :: RemoveControlItem()。 – 2012-01-04 20:44:48

回答

4

Buke'smethod爲我工作,但你必須等待直到創建對話框控件。似乎每次對話創建OnFolderChange()被稱爲所以我只是說我藏身的代碼存在時間:

STDMETHODIMP FileDialogEventHandler::OnFolderChange(IFileDialog* fileDialog) {  
    IOleWindow *pWindow = NULL; 
    HRESULT hr = fileDialog->QueryInterface(IID_PPV_ARGS(&pWindow)); 

    if (SUCCEEDED(hr)) { 
     HWND hwndDialog; 
     hr = pWindow->GetWindow(&hwndDialog);  
     HWND openButton = GetDlgItem(hwndDialog, IDOK); 
     ShowWindow(openButton, SW_HIDE); 

     pWindow->Release(); 
    } 

    return S_OK; 
} 
1

如果您知道的對話框項目編號(您可以使用Spyxx按鈕ID),你可能能夠做這樣的事情:

HWND hOpenButton = GetDlgItem(hDlg, itemID); 
ShowWindow(hOpwnButton, SW_HIDE); 
+0

我試過了n沒有工作。感謝你的回答 :-) – 2012-01-04 20:49:21

1
IFileDialogCustomize::RemoveControlItem 
相關問題