TaskDialog без кнопок

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

Спасибо.


person user82383    schedule 11.11.2011    source источник


Ответы (2)


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

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

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

person Remy Lebeau    schedule 11.11.2011

Получите свой собственный класс от 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();
person Vassil Arabadjiev    schedule 20.01.2012