【问题标题】:TaskDialog with no buttons没有按钮的任务对话框
【发布时间】:2011-11-11 07:49:52
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c++ windows-7 messagebox taskdialog


    【解决方案1】:

    从 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】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多