TaskDialog без кнопок

Можно ли показать TaskDialog без кнопок? Я хотел бы иметь возможность показать только индикатор выполнения (с сообщением), а затем закрыть окно TaskDialog, когда моя обработка будет завершена (из события Timer). Прямо сейчас я могу показать отключенную кнопку, а затем вызвать ButtonClick, чтобы закрыть окно, но без показа кнопок и использования метода CloseDialog было бы идеально.

Благодарю.

2 ответа

Решение

И то и другое TaskDialog() а также TaskDialogIndirect() используйте кнопку по умолчанию, если вы не указали никаких кнопок, но у вас есть контроль над тем, какие кнопки используются, поэтому я бы поместил кнопку "Прервать" в диалоговом окне, чтобы отменить любую операцию, состояние которой вы отображаете. Или, может быть, кнопка "Скрыть", если пользователь больше не хочет видеть ход выполнения без остановки выполняемой операции.

Вы должны использовать TaskDialogIndirect() для того, чтобы активировать функцию индикатора выполнения. Вы также можете использовать функцию обратного вызова для получения HWND диалога, чтобы вы могли закрыть его программно, когда это необходимо.

В противном случае не используйте API TaskDialog. Просто создайте свое собственное окно со своим пользовательским интерфейсом, и тогда вы сможете делать с ним все, что захотите.

Получите свой собственный класс от CTaskDialog

class CTaskDlg : public CTaskDialog
{
in CTaskDlg.h declare:
    public:
        void CloseTaskDlg(void);
protected:
    HWND m_TaskDlgHwnd;
    virtual HRESULT OnInit();
};

в CTaskDialog.cpp:

void CTaskDlg::CloseTaskDlg(void)
{
    ::SendMessage(m_TaskDlgHwnd, TDM_CLICK_BUTTON, static_cast<WPARAM>(TDCBF_OK_BUTTON), 0);
}

HRESULT CTaskDlg::OnInit()
{
    m_TaskDlgHwnd = ::GetActiveWindow();
    return S_OK;
}

CTaskDlg dlg;
dlg.CloseTaskDlg();
Другие вопросы по тегам