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

📄 taddfileoptionsdlg.cpp

📁 mpq文件的格式就是一种压缩格式
💻 CPP
字号:
/*****************************************************************************/
/* TAddFileOptionsDlg.cpp                 Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Implementation for archiving flags dialog                                 */
/*---------------------------------------------------------------------------*/
/*   Date    Ver   Who  Comment                                              */
/* --------  ----  ---  -------                                              */
/* 08.04.03  1.00  Lad  The first version of TAddFileOptionsDlg.cpp          */
/*****************************************************************************/

#include "stdafx.h"
#include "resource.h"
#include "TAddFileOptionsDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//-----------------------------------------------------------------------------
// TAddFileOptionsDlg dialog

BEGIN_MESSAGE_MAP(TAddFileOptionsDlg, CDialog)
	//{{AFX_MSG_MAP(TAddFileOptionsDlg)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_FILETYPES, OnItemChanged)
	ON_NOTIFY(LVN_KEYDOWN, IDC_FILETYPES, OnKeyDown)
	ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_FILETYPES, OnBeginLabelEdit)
	ON_NOTIFY(LVN_ENDLABELEDIT, IDC_FILETYPES, OnEndLabelEdit)
	ON_NOTIFY(LVN_DELETEITEM, IDC_FILETYPES, OnDeleteItem)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//-----------------------------------------------------------------------------
// Constructor and destructor

TAddFileOptionsDlg::TAddFileOptionsDlg(CWnd* pParent /*=NULL*/)
                   :CDialog(TAddFileOptionsDlg::IDD, pParent)
{
    m_dwFlags  = 0;
    m_lcLocale = 0;

    //{{AFX_DATA_INIT(TAddFileOptionsDlg)
	m_nFileType = FILE_TYPE_DATA;
	m_nDataCmp = 2;
	m_nWaveCmp = 1;
	m_bEncrypt = TRUE;
	m_bShowOnAdd = TRUE;
	//}}AFX_DATA_INIT
}

void TAddFileOptionsDlg::DoDataExchange(CDataExchange* pDX)
{
    CComboBox * pCombo = (CComboBox *)GetDlgItem(IDC_LOCALES);

	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(TAddFileOptionsDlg)
	DDX_Control(pDX, IDC_FILETYPES, m_FileTypes);
	DDX_Radio(pDX, IDC_RADIO1, m_nFileType);
	DDX_Radio(pDX, IDC_RADIO3, m_nDataCmp);
	DDX_Radio(pDX, IDC_RADIO6, m_nWaveCmp);
	DDX_Check(pDX, IDC_ENCRYPT, m_bEncrypt);
	DDX_Check(pDX, IDC_SHOWONADD, m_bShowOnAdd);
	//}}AFX_DATA_MAP

    // Save the input locale
    if(pCombo != NULL)
    {
        if(pDX->m_bSaveAndValidate)
            m_lcLocale = pCombo->GetItemData(pCombo->GetCurSel());
        else
            FillLocalesAndSelect(pCombo, m_lcLocale);
    }
}

void TAddFileOptionsDlg::SelectItem(int nIndex)
{
    LPARAM lParam;
    RECT rect;

    m_FileTypes.GetItemRect(nIndex, &rect, LVIR_BOUNDS);

    lParam = MAKELPARAM(rect.left + 2, rect.top + 2);
    m_FileTypes.PostMessage(WM_LBUTTONDOWN, 0, lParam);
    m_FileTypes.PostMessage(WM_LBUTTONUP, 0, lParam);
}

// Called before an item selection is changed
void TAddFileOptionsDlg::SaveDialog(TAddFlags * pFlags)
{
    UpdateData(TRUE);

    if((pFlags->nFileType = m_nFileType) == FILE_TYPE_DATA)
        pFlags->nCompression = m_nDataCmp;
    else
        pFlags->nCompression = m_nWaveCmp;
    pFlags->bEncrypt = m_bEncrypt;
}

// Called when a new item is focused
void TAddFileOptionsDlg::LoadDialog(TAddFlags * pFlags)
{
    CWnd * pWnd;
    BOOL bEnable;

    if((m_nFileType = pFlags->nFileType) == FILE_TYPE_DATA)
        m_nDataCmp = pFlags->nCompression;
    else
        m_nWaveCmp = pFlags->nCompression;
    m_bEncrypt = pFlags->bEncrypt;

    // Enable/disable the data compression(s)
    bEnable = (pFlags->nFileType == FILE_TYPE_DATA);
    if((pWnd = GetDlgItem(IDC_RADIO3)) != NULL)
        pWnd->EnableWindow(bEnable);
    if((pWnd = GetDlgItem(IDC_RADIO4)) != NULL)
        pWnd->EnableWindow(bEnable);
    if((pWnd = GetDlgItem(IDC_RADIO5)) != NULL)
        pWnd->EnableWindow(bEnable);

    // Enable/disable the wave compressions
    bEnable = (pFlags->nFileType == FILE_TYPE_WAVE);
    if((pWnd = GetDlgItem(IDC_RADIO6)) != NULL)
        pWnd->EnableWindow(bEnable);
    if((pWnd = GetDlgItem(IDC_RADIO7)) != NULL)
        pWnd->EnableWindow(bEnable);
    if((pWnd = GetDlgItem(IDC_RADIO8)) != NULL)
        pWnd->EnableWindow(bEnable);

    UpdateData(FALSE);
}

/////////////////////////////////////////////////////////////////////////////
// TAddFileOptionsDlg message handlers

BOOL TAddFileOptionsDlg::OnInitDialog() 
{
    TAddFlags * pFlags = cfg.pAddFlags;
    RECT rect;

    CDialog::OnInitDialog();

    // Initialize the listview columns
    m_FileTypes.GetClientRect(&rect);
    m_FileTypes.InsertColumn(0, "", LVCFMT_CENTER, rect.right - GetSystemMetrics(SM_CXVSCROLL), 0);
    m_FileTypes.SetExtendedStyle(LVS_EX_FULLROWSELECT);

    // Fill the list view with extensions
    for(int i = 0; i < cfg.nAddFlags; i++, pFlags++)
    {
        TAddFlags * pFlag = new TAddFlags;
        LVITEM lvItem;
        char szText[0x20];

        memset(szText, 0, sizeof(szText));
        strncpy(szText, pFlags->Ext.szExt, sizeof(TExt));
        *pFlag = *pFlags;

        ZeroMemory(&lvItem, sizeof(LVITEM));
        lvItem.mask    = LVIF_TEXT | LVIF_PARAM;
        lvItem.iItem   = i;
        lvItem.pszText = szText;
        lvItem.lParam  = (LPARAM)pFlag;

        m_FileTypes.InsertItem(&lvItem);
    }

    // Insert the helper item and select the first item in the list view
    m_FileTypes.InsertItem(i, "<...>");
    SelectItem(0);

    m_lcLocale   = cfg.lcLocale;
    m_bShowOnAdd = cfg.bShowOptionsOnAdd;
    UpdateData(FALSE);
    return TRUE;
}

void TAddFileOptionsDlg::OnOK() 
{
    TAddFlags * pFlags;
    TAddFlags * pFlag;
    int nItems = m_FileTypes.GetItemCount() - 1;

    // Ancestor will call UpdateData
    CDialog::OnOK();

    // Save the add flags
    pFlags = new TAddFlags[nItems];
    for(int i = 0; i < nItems; i++)
    {
        pFlag = (TAddFlags *)m_FileTypes.GetItemData(i);
        pFlags[i] = *pFlag;
    }

    // Update the member variables into global config
    delete cfg.pAddFlags;
    cfg.pAddFlags         = pFlags;
    cfg.nAddFlags         = nItems;
    cfg.lcLocale          = m_lcLocale;
    cfg.bShowOptionsOnAdd = m_bShowOnAdd;
}

void TAddFileOptionsDlg::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

    // If an item has been deselected, save the dialog content
    if((pNMListView->uOldState & LVIS_SELECTED) && pNMListView->lParam != 0)
        SaveDialog((TAddFlags *)pNMListView->lParam);

    // If a new item has been selected, change the dialog content
    if((pNMListView->uNewState & LVIS_SELECTED) && pNMListView->lParam != 0)
        LoadDialog((TAddFlags *)pNMListView->lParam);
	*pResult = 0;
}


void TAddFileOptionsDlg::OnKeyDown(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR;

    if(pLVKeyDown->wVKey == VK_DELETE)
    {
        int nItems = m_FileTypes.GetItemCount();
        int nItem = m_FileTypes.GetNextItem(-1, LVNI_FOCUSED);

        // Ignore attempt for deleting the "Add New" helper item
        if(nItems == 0 || nItem == nItems-1)
            return;

        // Do not allow to delete the default item
        if(nItem == nItems - 2)
        {
            AfxMessageBox(IDS_CANTDELETEDEFADDFLAG, MB_OK | MB_ICONERROR);
            return;
        }
        m_FileTypes.DeleteItem(nItem);
        SelectItem(nItem);
    }
    if(pLVKeyDown->wVKey == VK_F2)
        m_FileTypes.EditLabel(m_FileTypes.GetNextItem(-1, LVNI_FOCUSED));

    *pResult = 0;
}

void TAddFileOptionsDlg::OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    int nItems = m_FileTypes.GetItemCount();

    // Allow or deny the label editing
    *pResult = (pDispInfo->item.iItem != nItems - 1);
}

// When label edit ends, we have to insert the new item
void TAddFileOptionsDlg::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO * pDispInfo = (LV_DISPINFO*)pNMHDR;

    // If the user canceled the editing, do nothing
    if(pDispInfo->item.pszText != NULL)
    {
        TAddFlags * pFlags = new TAddFlags;
        LVITEM lvItem;
        int nIndex;

        // Reset both to zero
        ZeroMemory(pFlags, sizeof(TAddFlags));
        ZeroMemory(&lvItem, sizeof(LVITEM));

        // Fill the flags
        strncpy(pFlags->Ext.szExt, pDispInfo->item.pszText, sizeof(TExt));
        pFlags->nFileType    = FILE_TYPE_DATA;
        pFlags->nCompression = 2;
        pFlags->bEncrypt     = TRUE;

        // Fill the list view entry and insert the item
        lvItem.mask    = LVIF_TEXT | LVIF_PARAM;
        lvItem.iItem   = m_FileTypes.GetItemCount() - 2;
        lvItem.pszText = pDispInfo->item.pszText;
        lvItem.lParam  = (LPARAM)pFlags;
        nIndex = m_FileTypes.InsertItem(&lvItem);
	    
        // Focus the item
        SelectItem(nIndex);
    }
    *pResult = 0;
}

// Called nefore an item is deleted
void TAddFileOptionsDlg::OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW * pNMListView = (NM_LISTVIEW*)pNMHDR;

    if(pNMListView->lParam != 0)
        delete (TAddFlags *)pNMListView->lParam;
	*pResult = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -