TaskDialog没有按钮

时间:2011-11-11 07:49:52

标签: c++ windows-7 messagebox taskdialog

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

否则,请勿使用TaskDialog API。只需使用自己的UI创建自己的窗口,然后就可以随心所欲地使用它。

答案 1 :(得分:2)

从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();