/* * This is a part of the BugTrap package. * Copyright (c) 2005-2009 IntelleSoft. * All rights reserved. * * Description: Common BugTrap UI routines. * Author: Maksim Pyatkovskiy. * * This source code is only intended as a supplement to the * BugTrap package reference and related electronic documentation * provided with the product. See these sources for detailed * information regarding the BugTrap package. */ #pragma once #include "HyperLink.h" #include "TransferProgressDlg.h" /// Transfer thread parameters. class CTransferThreadParams { public: /// Current context. enum INTERNET_CONTEXT { /// Unexpected error. IC_ERROR = -1, /// Undefined context. IC_UNDEFINED = 0, /// InternetConnect() call. IC_INTERNETCONNECT = +1, /// HttpOpenRequest() call. IC_OPENREQUEST = +2, /// HttpSendRequestEx() call. IC_SENDREQUEST = +3, /// InternetWriteFile() call. IC_WRITEFILE = +4, /// HttpEndRequest() call. IC_ENDREQUEST = +5, /// Receiving response. IC_RECEIVINGRESPONSE = +6, /// InternetCloseHandle() call. IC_CLOSEHANDLE = +7 }; /// Initialize the object. CTransferThreadParams(HWND hwndSink = NULL); /// Destroy the object. ~CTransferThreadParams(void); /// Get sink window handle. HWND GetSinkWnd(void) const; /// Set sink window handle. void SetSinkWnd(HWND hwndSink); /// Get current context. INTERNET_CONTEXT GetContext(void) const; /// Set current context. void SetContext(INTERNET_CONTEXT eContext); /// Get callback result. DWORD GetCallbackResult(void) const; /// Set callback result. void SetCallbackResult(DWORD dwCallbackResult); /// Get cancellation event handle. HANDLE GetCancellationEvent(void) const; /// Get completion event handle. HANDLE GetCompletionEvent(void) const; /// Set error code and error message to the default. void SetErrorCode(DWORD dwErrorCode); /// Set error code and error message to the default. void SetErrorCode(DWORD dwErrorCode, PTSTR pszMessageBuffer); /// Get error code. DWORD GetErrorCode(void) const; /// Get error message. PCTSTR GetErrorMessage(void) const; /// Post completion message to the sink window. void PostCompletionMessage(void); private: /// Protect the class from being accidentally copied. CTransferThreadParams(const CTransferThreadParams& rParams); /// Protect the class from being accidentally copied. CTransferThreadParams& operator=(const CTransferThreadParams& rParams); /// Event handle used to cancel pending IO operation. HANDLE m_hCancellationEvent; /// Event handle used inform waiting thread about completion. HANDLE m_hCompletionEvent; /// Window handler of sink event. HWND m_hwndSink; /// Error message text. PTSTR m_pszMessageBuffer; /// Error code. DWORD m_dwErrorCode; /// Current context. INTERNET_CONTEXT m_eContext; /// Callback result. DWORD m_dwCallbackResult; }; /** * @return current context. */ inline CTransferThreadParams::INTERNET_CONTEXT CTransferThreadParams::GetContext(void) const { return m_eContext; } /** * @param eContext - current context. */ inline void CTransferThreadParams::SetContext(CTransferThreadParams::INTERNET_CONTEXT eContext) { m_eContext = eContext; } /** * @return callback result. */ inline DWORD CTransferThreadParams::GetCallbackResult(void) const { return m_dwCallbackResult; } /** * @param dwCallbackResult - callback result. */ inline void CTransferThreadParams::SetCallbackResult(DWORD dwCallbackResult) { m_dwCallbackResult = dwCallbackResult; } /** * @return sink window handle. */ inline HWND CTransferThreadParams::GetSinkWnd(void) const { return m_hwndSink; } /** * @param hwndSink - sink window handle. */ inline void CTransferThreadParams::SetSinkWnd(HWND hwndSink) { m_hwndSink = hwndSink; } /** * @return cancellation event handle. */ inline HANDLE CTransferThreadParams::GetCancellationEvent(void) const { return m_hCancellationEvent; } /** * @return completion event handle. */ inline HANDLE CTransferThreadParams::GetCompletionEvent(void) const { return m_hCompletionEvent; } /** * @return error code. */ inline DWORD CTransferThreadParams::GetErrorCode(void) const { return m_dwErrorCode; } /** * @return error message. */ inline PCTSTR CTransferThreadParams::GetErrorMessage(void) const { return m_pszMessageBuffer; } inline void CTransferThreadParams::PostCompletionMessage(void) { if (m_hwndSink) PostMessage(m_hwndSink, UM_TRANSFERCOMPLETE, m_dwErrorCode, 0); } HANDLE StartTransferThread(CTransferThreadParams* pTransferThreadParams); DWORD CloseTransferThread(HANDLE hTransferThread); #define IDM_ABOUTBOX 0x0010 void GetDefaultMailSubject(PTSTR pszSubject, DWORD dwSubjectSize); void GetDefaultMailURL(PTSTR pszURLString, DWORD dwURLSize); BOOL SendEMail(HWND hwndParent, PCTSTR pszSubject, PCTSTR pszMessage); BOOL MailTempReportEx(HWND hwndParent); BOOL SendTempReport(HWND hwndParent); BOOL SubmitTempReport(HWND hwndParent); BOOL SendReport(void); BOOL MailReport(void); BOOL SaveReport(PCTSTR pszFileName); void InitIntro(HWND hwnd, CHyperLink& hlURL); void InitAbout(HWND hwnd); void StartHandlerThread(void); LONG InternalFilter(PEXCEPTION_POINTERS pExceptionPointers);