⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tnewmpqdlg.cpp

📁 mpq文件的格式就是一种压缩格式
💻 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 + -