是否可以从IFileDialog中删除/隐藏打开按钮

时间:2012-01-04 20:14:55

标签: windows winapi visual-c++ dialog

我正在尝试使用IFileOpenDialog从同一个对话框中选择文件和文件夹(在多选模式下)。我能够在对话框中添加一个自定义按钮,实现我想做的事情。现在我想从对话框中删除默认的“打开”按钮,因为它的行为取决于选择的顺序。如果首先选择文件然后选择文件夹(多选),我会收到OnFileOk事件,但如果用户首先选择文件夹然后选择文件,则单击打开按钮将打开第一个选定文件夹。有没有办法删除或隐藏打开按钮?

我的想法是枚举IFileDialog的子窗口,并删除标题为“Open”和类“Button”的子项。在做show之前我尝试枚举了IFileOpenDialog的子窗口,但是我只得到一个带有“Button”类的子节点,但它的标题是“start”。我找不到隐藏“打开”按钮的标准方法。如果还有其他办法,请告诉我。

谢谢, 阿希奈。

3 个答案:

答案 0 :(得分:4)

Buke's method为我工作,但您必须等到创建对话框控件。似乎每次创建对话框时都会调用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 :(得分:1)

如果您知道对话框项目编号(您可以使用Spyxx找到按钮ID),您可以执行以下操作:

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

答案 2 :(得分:1)

IFileDialogCustomize::RemoveControlItem