TaskDialog без кнопок - PullRequest
       29

TaskDialog без кнопок

1 голос
/ 11 ноября 2011

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

Спасибо.

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Получите свой собственный класс из 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();
2 голосов
/ 11 ноября 2011

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

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

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

...