是否可以显示没有按钮的 TaskDialog?我希望能够只显示一个进度条(带有一条消息),然后在我的处理完成时(来自 Timer 事件)关闭 TaskDialog 窗口。现在,我可以显示一个禁用的按钮,然后调用 ButtonClick 来关闭窗口,但不显示任何按钮并使用 CloseDialog 方法将是理想的。
谢谢。
是否可以显示没有按钮的 TaskDialog?我希望能够只显示一个进度条(带有一条消息),然后在我的处理完成时(来自 Timer 事件)关闭 TaskDialog 窗口。现在,我可以显示一个禁用的按钮,然后调用 ButtonClick 来关闭窗口,但不显示任何按钮并使用 CloseDialog 方法将是理想的。
谢谢。
从 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 创建您自己的窗口,然后您就可以用它做任何您想做的事情。