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

Windows 是否可以从IFileDialog中删除/隐藏打开按钮,windows,winapi,visual-c++,dialog,Windows,Winapi,Visual C++,Dialog,我正在尝试使用IFileOpenDialog从同一对话框中拾取文件和文件夹(在多选模式下)。我能够在对话框中添加一个自定义按钮,并实现我想要做的事情。现在我想从对话框中删除默认的“打开”按钮,因为它的行为取决于选择的顺序。如果先选择一个文件,然后选择一个文件夹(multiselect),我将获得OnFileOk事件,但如果用户先选择一个文件夹,然后选择一个文件,则单击“打开”按钮将打开第一个选定的文件夹。有没有办法移除或隐藏打开按钮 我的想法是枚举IFileDialog的子窗口,并删除带有标题“

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

我的想法是枚举IFileDialog的子窗口,并删除带有标题“Open”和类“Button”的子窗口。在播放之前,我尝试枚举IFileOpenDialog的子窗口,但我只得到一个类为“Button”的子窗口,但其标题为“start”。我找不到隐藏“打开”按钮的标准方法。请让我知道,如果有任何其他方式这样做

谢谢,
a Hinay.

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

HWND hOpenButton = GetDlgItem( hDlg, itemID );
ShowWindow( hOpwnButton, SW_HIDE );
为我工作,但您必须等待对话框控件创建完成。似乎每次创建对话框都会被调用,所以我只是在那里添加了隐藏代码:

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;
}

听起来你找到了Windows开始按钮,很明显你拿错了窗口把手。请看一下IFileDialogCustomize::RemoveControllitem()。
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;
}