1

是否可以显示没有按钮的 TaskDialog?我希望能够只显示一个进度条(带有一条消息),然后在我的处理完成时(来自 Timer 事件)关闭 TaskDialog 窗口。现在,我可以显示一个禁用的按钮,然后调用 ButtonClick 来关闭窗口,但不显示任何按钮并使用 CloseDialog 方法将是理想的。

谢谢。

4

2 回答 2

3

从 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();
于 2012-01-20T13:41:34.947 回答
2

如果您没有指定任何按钮,则两者都TaskDialog()强制TaskDialogIndirect()使用默认按钮,但是您可以控制使用哪种按钮,因此我会在对话框中放置一个 Abort 按钮来取消您正在显示状态的任何操作。或者,如果用户不想在不停止正在进行的操作的情况下再看到进度,则可能是隐藏按钮。

您必须使用TaskDialogIndirect()才能激活进度条功能。您还可以使用它的回调功能来获取HWND对话框,以便您可以在需要时以编程方式关闭它。

否则,请勿使用 TaskDialog API。只需使用您自己的 UI 创建您自己的窗口,然后您就可以用它做任何您想做的事情。

于 2011-11-11T09:03:45.553 回答