tmainfrm.h
来自「mpq文件的格式就是一种压缩格式」· C头文件 代码 · 共 279 行
H
279 行
/*****************************************************************************/
/* TMainFrm.h Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Interface of the TMainFrame class */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 03.04.03 1.00 Lad The first version of TMainFrm.h */
/*****************************************************************************/
#ifndef __TMAINFRM_H__
#define __TMAINFRM_H__
//-----------------------------------------------------------------------------
// Defines
#define ESEL_NO_SELECTED 0x00000001 // Error when no items selected
#define ESEL_MORE_SELECTED 0x00000002 // Error when more items selected
#define ESEL_DIR_SELECTED 0x00000004 // Error when directory selected
#define ESEL_NAMELESS 0x00000008
//-----------------------------------------------------------------------------
// Defined work types for the worker threads
#define WORK_NONE 0
#define WORK_NEW_MPQ_ARCHIVE 1
#define WORK_LOAD_MPQ_ARCHIVE 2
#define WORK_OPEN_FILE 3
#define WORK_EXTRACT_FILES 4
#define WORK_RENAME_FILE 5
#define WORK_REMOVE_FILES 6
#define WORK_ADD_FILES 7
#define WORK_EXTRACT_LISTFILE 8
#define WORK_EXTRACT_ATTRIBUTES 9
#define WORK_EXTRACT_SIGNATURE 10
#define WORK_COMPACT_ARCHIVE 11
#define WORK_RUN_SCRIPT 12
struct TFileInfo;
struct TAddFlags;
class TMainFrame;
class TNameBreakerDlg;
struct TNewMpqInfo
{
TAddFlags * pAddFlags; // Pointer to add flags. Must NOT ne deleted !!!
int nAddFlags; // Number of add flags
DWORD dwHashTableSize; // Size of hash table for the archive
DWORD nRelPathStart; // Start of relative path
BOOL bOverwrite; // If TRUE, the existing files will be overwritten
};
struct TLoadMpqInfo
{
char szFileList[MAX_PATH]; // Listfile name
int nListFile; // 0 - use external listfile, 1 - use internal listfile, 2 - autodetect
};
struct TOpenFileInfo
{
TFileInfo * pInfo;
HTREEITEM hItem;
BOOL bOpenWith;
};
struct TRenameFileInfo
{
TFileInfo * pInfo; // The file info to be renamed
char szNewName[MAX_PATH];
};
struct TCompactInfo
{
char szFileList[MAX_PATH];
};
struct TRunScriptInfo
{
char szScript[MAX_PATH];
};
struct TWorkInfo
{
TMainFrame * pMainFrame; // Pointer to the main frame
DWORD dwWorkType; // Work type
CPtrList * pFileList; // File list
LCID lcLocale; // Locale ID
BOOL bStop; // TRUE if the thread was stopped
BOOL bFreeList; // If TRUE, the list entries will be freed when work ends
BOOL bKeepPath;
BOOL bOverwriteAll; // If TRUE,
char szMpqName[MAX_PATH];
char szWorkDir[MAX_PATH];
TNewMpqInfo New;
TLoadMpqInfo Load;
TOpenFileInfo Open;
TRenameFileInfo Ren;
TCompactInfo Cmpct;
TRunScriptInfo Runsc;
};
//-----------------------------------------------------------------------------
// TMainFrame class
class TListView;
class TTreeView;
class TMainFrame : public CFrameWnd
{
public:
TMainFrame();
virtual ~TMainFrame();
DECLARE_DYNAMIC(TMainFrame);
int NewMpqArchive();
int OpenMpqArchive(const char * szMpqArchive, const char * szFileList);
int CloseMpqArchive();
int ExtractSelectedFiles();
int OpenSelectedFile(BOOL bOpenWith = FALSE);
int RenameFile(TFileInfo * pInfo, const char * szNewFileName);
int RenameFile();
int RemoveFiles();
int NewFolder();
int AddFiles(HDROP hDropInfo);
int DragFiles();
int ShowProperties();
int ExtractListFile();
int ExtractAttributes();
int ExtractArchive();
int BuildArchive();
int CompactArchive();
int NameBreaker(const char * szMpqName, const char * szFileList, const char * szDirs = NULL, const char * szExts = NULL, int nItem = 0);
int MergeListfiles();
int RunMpq2000Script(const char * szScriptName);
int Options();
int AddFileOptions();
TTreeView * GetTreeViewPane() { return m_pTreeView; }
TListView * GetListViewPane() { return m_pListView; }
BOOL IsIdle(); // TRUE if MPQ Editor has no work.
BOOL HasDocAndIsIdle(); // TRUE if MPQ Editor has no work and a document open
BOOL IsItemSelAndIdle(); // TRUE is an item is selected and no work
protected:
// Other functions
TWorkInfo * CreateWorkInfo(DWORD dwWorkType, const char * szMpqName = NULL, const char * szWorkDir = NULL);
CPtrList * CreateFileList(HWND hListView);
CPtrList * CreateFileList(CFileDialog * pDlg);
CPtrList * CreateFileList(HDROP hDropInfo, DWORD & nRelPathStart);
HDROP CreateDropFiles(CPtrList * pFileList);
int InitFunctionTable(BOOL bUseStorm);
void AddFolderToList(CPtrList * pList, HTREEITEM hItem);
void AddFolderToList(CPtrList * pList, const char * szFolder);
void RemoveNonNeutralItems(CPtrList * pList);
void FreeWorkInfo(TWorkInfo * pWork);
BOOL CheckListSelection(DWORD dwFlags);
int AskForAddFlags();
protected:
// Worker thread functions
static void WINAPI CompactCB(void *, DWORD dwWorkType, DWORD dwParam1, DWORD dwParam2);
TFileInfo * CreateFileInfo(const char * szFileName, LCID lcLocale, DWORD dwFileSize, DWORD dwFileAttr);
const char * GetFileOrdinal(const char * szFileName);
char * SkipSpaces(const char * ch);
void UpdateFileInfo(CPtrList * pFileList, const char * szFileName, LCID lcLocale, DWORD dwFileSize, DWORD dwFileAttr);
BOOL GetCommandParams(char * szCmd, char * szParam1, char * szParam2);
BOOL WorkStopped(TWorkInfo * pWork);
int EnableDialogBars(BOOL bEnable);
int ReadLine(FILE * fp, TCHAR * szBuffer, int nMaxChars);
int SetStatusText(UINT nIDText, ...);
int CreateMpqEvent(const char * szMpqName);
int AddFiles(HANDLE hMpq, TWorkInfo * pWork);
int AddFileToTree(const char * szFileName, LCID lcLocale, DWORD dwFileSize, DWORD dwFileAttr);
int LoadMpqArchiveST(const char * szMpqName, const char * szFileList);
int LoadMpqArchiveSL(const char * szMpqName, const char * szFileList);
int ExtractFile(TWorkInfo * pWork, HANDLE hMpq, const char * szToExtract, const char * szExtracted, LCID lcLocale, BOOL bNoShowError = FALSE);
int AddFileToArchive(TWorkInfo * pWork, HANDLE hMpq, char * szFileName, char * szArchName, BOOL * pbReplaced = NULL);
// Functions for worker thread
int WTNewMpqArchive(TWorkInfo * pWork);
int WTLoadMPQArchive(TWorkInfo * pWork);
int WTOpenFile(TWorkInfo * pWork);
int WTExtractFiles(TWorkInfo * pWork);
int WTRenameFile(TWorkInfo * pWork);
int WTRemoveFiles(TWorkInfo * pWork);
int WTAddFiles(TWorkInfo * pWork);
int WTExtractSpecialFile(TWorkInfo * pWork);
int WTCompactArchive(TWorkInfo * pWork);
int WTRunMPQ2000Script(char * szScript);
static DWORD WINAPI WorkThreadProc(VOID * pParam);
int StartWorkThread(TWorkInfo * pWork);
// Function table from Storm.dll
SFILEOPENARCHIVE pSFileOpenArchive;
SFILECLOSEARCHIVE pSFileCloseArchive;
SFILEOPENFILEEX pSFileOpenFileEx;
SFILECLOSEFILE pSFileCloseFile;
SFILEGETFILESIZE pSFileGetFileSize;
SFILESETFILEPOINTER pSFileSetFilePointer;
SFILEREADFILE pSFileReadFile;
SFILESETLOCALE pSFileSetLocale;
TNameBreakerDlg * m_pNameBreaker;
TTreeView * m_pTreeView; // Tree view
TListView * m_pListView; // List view
CPtrList * m_pAddFileList;
CSplitterWnd m_wndSplitter;
CDialogBar m_wndDlgBar;
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
CReBar m_wndReBar;
CString m_strMpqName;
CString m_strFileList;
CString m_strMask; // Search mask for MPQ archive
HINSTANCE m_hStorm; // Handle to Storm.dll
HANDLE m_hWorkThread;
HANDLE m_hStopEvent; // Handle to stopping event
HANDLE m_hMpqEvent; // For detecting open archives in another instance of MPQ Editor
BOOL m_bNameless; // TRUE if we loaded the files from MPQ as nameless
BOOL m_bUseStormDll; // TRUE if using Storm.dll for read access
HBRUSH m_hBrush; // BG brush for script interpreter
HWND m_hConsole;
//{{AFX_VIRTUAL(TMainFrame)
public:
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
protected: // Generated message map functions
//{{AFX_MSG(TMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnClose();
afx_msg void OnSystrayEvent(WPARAM wParam, LPARAM lParam);
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnDestroy();
afx_msg void OnSetStatusText(WPARAM wParam, LPARAM lParam);
afx_msg HBRUSH OnCtlColorEdit(WPARAM wParam, LPARAM lParam);
afx_msg void OnConsoleDestroyed(WPARAM wParam, LPARAM lParam);
afx_msg void MustBeIdle(CCmdUI* pCmdUI);
afx_msg void MustHaveDocAndIdle(CCmdUI* pCmdUI);
afx_msg void MustHaveItemAndIdle(CCmdUI* pCmdUI);
afx_msg void OnFileNew();
afx_msg void OnFileOpen();
afx_msg void OnFileClose();
afx_msg void OnOpsOpen();
afx_msg void OnOpsOpenWith();
afx_msg void OnOpsExtract();
afx_msg void OnOpsRename();
afx_msg void OnOpsRemove();
afx_msg void OnOpsGetListFile();
afx_msg void OnOpsNewFolder();
afx_msg void OnOpsAddFiles();
afx_msg void OnOpsProperties();
afx_msg void OnOpsExtractArchive();
afx_msg void OnOpsGetAttributes();
afx_msg void OnOpsBuildArchive();
afx_msg void OnOpsCompactArchive();
afx_msg void OnToolsNameBreaker();
afx_msg void OnToolsMergeListfiles();
afx_msg void OnToolsMpq2000Script();
afx_msg void OnToolsOptions();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDropFiles(HDROP hDropInfo);
afx_msg void OnToolsAddFileOptions();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnToolsScriptConsole();
afx_msg void OnWorkComplete(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
afx_msg void OnUpdateViewStyles(CCmdUI* pCmdUI);
afx_msg void OnViewStyle(UINT nCommandID);
DECLARE_MESSAGE_MAP()
friend class TDataSource;
};
#endif // __TMAINFRM_H__
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?