2011-11-11 2 views
0

버튼없이 TaskDialog를 표시 할 수 있습니까? 진행률 표시 줄 (메시지 포함)을 표시하고 Timer 이벤트에서 처리가 완료되면 TaskDialog 창을 닫을 수 있어야합니다. 지금은 비활성화 된 버튼을 표시 한 다음 ButtonClick을 호출하여 창을 닫을 수 있지만 버튼을 표시하지 않고 CloseDialog 메서드를 사용하는 것이 이상적입니다.버튼이없는 TaskDialog

감사합니다.

답변

1

TaskDialog()TaskDialogIndirect() 모두 버튼을 지정하지 않으면 기본 버튼이 강제로 사용되지만 어떤 버튼이 사용되는지 제어 할 수 있으므로 표시하는 모든 작업을 취소하기 위해 대화 상자에 취소 버튼을 배치합니다 의 상태. 진행중인 작업을 중지하지 않고 사용자가 더 이상 진행률을 보지 않으려는 경우 숨기기 단추입니다.

진행률 표시 줄 기능을 활성화하려면 TaskDialogIndirect()을 사용해야합니다. 또한 해당 콜백 기능을 사용하여 대화 상자의 HWND을 얻을 수 있으므로 필요할 때 프로그래밍 방식으로 닫을 수 있습니다.

그렇지 않으면 TaskDialog API를 사용하지 마십시오. 자신 만의 UI로 창을 직접 만들면 원하는대로 할 수 있습니다.

1

는 CTaskDialog.cpp에 CTaskDialog

class CTaskDlg : public CTaskDialog 
{ 
in CTaskDlg.h declare: 
    public: 
     void CloseTaskDlg(void); 
protected: 
    HWND m_TaskDlgHwnd; 
    virtual HRESULT OnInit(); 
}; 

에서 자신의 클래스를 파생 :

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