📄 tnewmpqdlg.cpp
字号:
/*****************************************************************************/
/* TNewMpqDlg.cpp Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Dialog for creating new MPQ archives */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 07.04.03 1.00 Lad The first version of TNewMpqDlg.cpp */
/*****************************************************************************/
#include "stdafx.h"
#include "TNewMpqDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BEGIN_MESSAGE_MAP(TNewMpqDlg, CDialog)
//{{AFX_MSG_MAP(TNewMpqDlg)
ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
ON_BN_CLICKED(IDC_BROWSEFOLDER, OnBrowseFolder)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN, OnDeltaPos)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//-----------------------------------------------------------------------------
// Constructor and destructor
TNewMpqDlg::TNewMpqDlg(CWnd* pParent /*=NULL*/) : CDialog(TNewMpqDlg::IDD, pParent)
{
m_dwHashTableSize = 0x1000;
m_bNoBuildFrom = FALSE;
//{{AFX_DATA_INIT(TNewMpqDlg)
m_strBuildFrom = _T("");
m_strMpqName = _T("");
//}}AFX_DATA_INIT
}
void TNewMpqDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(TNewMpqDlg)
DDX_Text(pDX, IDC_EBUILDFROM, m_strBuildFrom);
DDV_MaxChars(pDX, m_strBuildFrom, 260);
DDX_Text(pDX, IDC_MPQNAME, m_strMpqName);
DDX_Text(pDX, IDC_HTSIZE, m_strHTSize);
//}}AFX_DATA_MAP
}
int CALLBACK TNewMpqDlg::BFFDialogProc(HWND hwnd, UINT message, LPARAM /* lParam */, LPARAM lpData)
{
if(message == BFFM_INITIALIZED)
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
return 0;
}
//-----------------------------------------------------------------------------
// TNewMpqDlg message handlers
BOOL TNewMpqDlg::OnInitDialog()
{
CWnd * pWnd;
CDialog::OnInitDialog();
// If no build from, disable the label, edit box and button
if(m_bNoBuildFrom)
{
if((pWnd = GetDlgItem(IDC_STBUILDFROM1)) != NULL)
pWnd->EnableWindow(FALSE);
if((pWnd = GetDlgItem(IDC_STBUILDFROM2)) != NULL)
pWnd->EnableWindow(FALSE);
if((pWnd = GetDlgItem(IDC_EBUILDFROM)) != NULL)
pWnd->EnableWindow(FALSE);
if((pWnd = GetDlgItem(IDC_BROWSEFOLDER)) != NULL)
pWnd->EnableWindow(FALSE);
}
else
m_strBuildFrom = cfg.szWorkPath;
m_strHTSize.Format("0x%lX", m_dwHashTableSize);
UpdateData(FALSE);
return TRUE;
}
void TNewMpqDlg::OnBrowseFolder()
{
LPITEMIDLIST lpidl;
BROWSEINFO bi;
char szFolder[MAX_PATH] = "";
char szTitle[256] = "";
LoadString(AfxGetResourceHandle(), IDS_BROWSETITLE, szTitle, sizeof(szTitle) - 1);
UpdateData(TRUE);
strcpy(szFolder, m_strBuildFrom);
bi.hwndOwner = m_hWnd; // Set the dialog parent
bi.pidlRoot = NULL; // Set the ROOT directory
bi.pszDisplayName = szFolder; // Set folder to be browsed
bi.lpszTitle = szTitle; // No hint text
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = BFFDialogProc;
bi.lParam = (LPARAM)szFolder;
// bi.iImage = 0; // No image
if((lpidl = SHBrowseForFolder(&bi)) != NULL)
{
SHGetPathFromIDList(lpidl, szFolder);
m_strBuildFrom = szFolder;
UpdateData(FALSE);
}
}
void TNewMpqDlg::OnBrowse()
{
CString strFilters;
// Call the open dialog
strFilters.LoadString(IDS_MPQFILTER);
CFileDialog dlg(TRUE, "mpq", NULL, 0, strFilters, this);
dlg.m_ofn.Flags |= (OFN_NONETWORKBUTTON | OFN_ENABLESIZING | OFN_NOCHANGEDIR | OFN_HIDEREADONLY);
if(dlg.DoModal() != IDOK)
return;
m_strMpqName = dlg.GetPathName();
UpdateData(FALSE);
}
void TNewMpqDlg::OnDeltaPos(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
char * szTemp = NULL;
UpdateData(TRUE);
m_dwHashTableSize = strtol(m_strHTSize, &szTemp, 16);
if(pNMUpDown->iDelta > 0)
m_dwHashTableSize >>= 1;
if(pNMUpDown->iDelta < 0)
m_dwHashTableSize <<= 1;
if(m_dwHashTableSize > HASH_TABLE_SIZE_MAX)
m_dwHashTableSize = HASH_TABLE_SIZE_MAX;
if(m_dwHashTableSize < HASH_TABLE_SIZE_MIN)
m_dwHashTableSize = HASH_TABLE_SIZE_MIN;
m_strHTSize.Format("0x%lX", m_dwHashTableSize);
UpdateData(FALSE);
*pResult = 0;
}
void TNewMpqDlg::OnOK()
{
if(GetDlgItem(IDC_MPQNAME)->GetWindowTextLength() == 0)
{
AfxMessageBox(IDS_NOMPQNAME, MB_OK | MB_ICONERROR);
return;
}
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -