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()または、ユーザーが進行中の操作を停止せずに進行状況を表示したくない場合は、[非表示]ボタンを使用することもできます。

TaskDialogIndirect()プログレスバー機能を有効にするには、を使用する必要があります。コールバック機能を使用しHWNDてダイアログのを取得することもできるため、必要に応じてプログラムでダイアログを閉じることができます。

それ以外の場合は、TaskDialogAPIを使用しないでください。独自のUIを使用して独自のウィンドウを作成するだけで、それを使って好きなことを行うことができます。

于 2011-11-11T09:03:45.553 に答える