Можно ли удалить / скрыть кнопку открытия из IFileDialog - PullRequest
2 голосов
/ 05 января 2012

Я пытаюсь использовать IFileOpenDialog для выбора файлов и папок (в режиме множественного выбора) из одного и того же диалога.Мне удалось добавить пользовательскую кнопку в диалог и добиться того, что я хочу сделать.Теперь я хочу удалить стандартную кнопку «Открыть» из диалогового окна, потому что ее поведение зависит от порядка выбора.Если сначала выбрать файл, а затем папку (множественный выбор), я получаю событие OnFileOk, но если пользователь сначала выбирает папку, а затем файл, щелчок по кнопке открытия открывает первую выбранную папку.Есть ли способ удалить или скрыть кнопку Открыть ??

Моя идея состояла в том, чтобы перечислить дочерние окна IFileDialog и удалить дочерний элемент с заголовком «Открыть» и классом «Кнопка».Я пытался перечислить дочерние окна IFileOpenDialog перед началом показа, но у меня есть только один дочерний элемент с классом «Button», но его заголовок «start».Я не могу найти стандартный способ скрыть кнопку «Открыть».Пожалуйста, дайте мне знать, если есть какой-либо другой способ сделать это.

Спасибо, Абхинай.

Ответы [ 3 ]

4 голосов
/ 09 января 2012

Метод Бьюка работал для меня, но вы должны подождать, пока диалоговые элементы управления не будут созданы.Кажется, что каждый раз, когда создается диалог, 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 голос
/ 05 января 2012
IFileDialogCustomize::RemoveControlItem
1 голос
/ 05 января 2012

Если вам известен номер элемента диалога (идентификатор кнопки можно найти с помощью Spyxx), вы можете сделать что-то вроде этого:

HWND hOpenButton = GetDlgItem( hDlg, itemID );
ShowWindow( hOpwnButton, SW_HIDE );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...