【发布时间】:2011-11-11 07:49:52
【问题描述】:
是否可以显示没有按钮的任务对话框?我希望能够只显示一个进度条(带有一条消息),然后在我的处理完成时(来自 Timer 事件)关闭 TaskDialog 窗口。现在,我可以显示一个禁用的按钮,然后调用 ButtonClick 来关闭窗口,但不显示任何按钮并使用 CloseDialog 方法是理想的。
谢谢。
【问题讨论】:
标签: c++ windows-7 messagebox taskdialog
是否可以显示没有按钮的任务对话框?我希望能够只显示一个进度条(带有一条消息),然后在我的处理完成时(来自 Timer 事件)关闭 TaskDialog 窗口。现在,我可以显示一个禁用的按钮,然后调用 ButtonClick 来关闭窗口,但不显示任何按钮并使用 CloseDialog 方法是理想的。
谢谢。
【问题讨论】:
标签: c++ windows-7 messagebox 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();
【讨论】:
TaskDialog() 和 TaskDialogIndirect() 如果您不指定任何按钮,则强制使用默认按钮,但您可以控制使用哪种按钮,所以我会在对话框中放置一个 Abort 按钮来取消任何操作您正在显示的状态。或者,如果用户不想在不停止正在进行的操作的情况下再看到进度,则可能是隐藏按钮。
您必须使用TaskDialogIndirect() 才能激活进度条功能。您还可以使用它的回调功能来获取对话框的HWND,以便在需要时以可编程方式关闭它。
否则,请勿使用 TaskDialog API。只需使用您自己的 UI 创建您自己的窗口,然后您就可以用它做任何您想做的事情。
【讨论】: