#pragma once #include "logedit.h" #include "afxcmn.h" #include "afxmt.h" // CManualPatchPage ´ëÈ­ »óÀÚÀÔ´Ï´Ù. class CPMSetting; struct MPProgressData { CList m_ProgressList; CList m_ErrorList; CList m_TotalProgressList; ULONGLONG m_dwTotalFileSize; ULONGLONG m_dwCurrentFileSize; int m_nTotalFiles; int m_nAddedFiles; BOOL m_bStopWorkerThread; }; class CManualPatchPage : public CPropertyPage { DECLARE_DYNAMIC(CManualPatchPage) public: CManualPatchPage(CPMSetting& pmSetting, DWORD dwPatchVersion); virtual ~CManualPatchPage(); // ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù. enum { IDD = IDD_MANUAL_PATCH }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. DECLARE_MESSAGE_MAP() public: // ÆÐÄ¡ »óŸ¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù. void UpdateManualPatchStatus(MPProgressData& progressData); private: // ÆÐÄ¡ ÀÛ¾÷ ½º·¹µå static unsigned __stdcall ManualPatchWorker(void* pArg); // ÆÐÄ¡ ÀÛ¾÷ ½º·¹µå °ü·Ã ÇÔ¼ö void InitMPWorkerData(); void StopWorker(); // À̺¥Æ® ó¸® ÇÔ¼öµé afx_msg void OnBnClickedMpCreate(); afx_msg void OnBnClickedMpCancel(); afx_msg void OnBnClickedBtnMpSelectFile(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnBnClickedClearLog(); virtual BOOL OnInitDialog(); virtual BOOL OnSetActive(); afx_msg void OnClose(); CPMSetting& m_pmSettingOption; CString m_szMPFolder; CString m_szMPSFXFile; CString m_szMPFileName; CString m_szPatchType; CLogEdit m_edProgressLog; CLogEdit m_edErrLog; DWORD m_dwMPMaxver; DWORD m_dwMPMinver; HANDLE m_hManualPatchThread; CString m_szFileProgress; CProgressCtrl m_TotalProgressBar; // Å©¸®Æ¼Äà ¼½¼ÇÀ¸·Î º¸È£µÇ´Â ºÎºÐ. CCriticalSection m_ProgressLock; MPProgressData m_ProgressData; };