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

📄 launcherdlg.cpp

📁 著名的任天堂FC游戏机模拟器VirtuaNes 085版的源码!
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			// Manufacturer
			if( (pToken = (CHAR*)::_mbstok( NULL, seps )) ) {
				fl.manufacturer = pToken;
			} else {
				fl.manufacturer = "";
			}

			// Sale date
			if( (pToken = (CHAR*)::_mbstok( NULL, seps )) ) {
				fl.saledate = pToken;
			} else {
				fl.saledate = "";
			}

			// Price
			if( (pToken = (CHAR*)::_mbstok( NULL, seps )) ) {
				fl.price = pToken;
			} else {
				fl.price = "";
			}

			// Genre
			if( (pToken = (CHAR*)::_mbstok( NULL, seps )) ) {
				fl.genre = pToken;
			} else {
				fl.genre = "";
			}

			m_FileList.push_back( fl );
			m_FileListNum++;
		}

		FCLOSE( fp );
		return	TRUE;
	}

	return	FALSE;
}

void CLauncherDlg::SaveFileList()
{
FILE*	fp = NULL;

//	string	Path = CPathlib::MakePathExt( CApp::GetModulePath(), "launcher", "lst" );
	string	Path = CPathlib::MakePath( CApp::GetModulePath(), "launcher" );
	if( m_nListSelect ) {
		Path = Path + (char)('0'+m_nListSelect) + ".lst";
	} else {
		Path = Path + ".lst";
	}

	if( !m_FileListNum ) {
DEBUGOUT( "Delete Launcher File:%s\n", Path.c_str() );
		::DeleteFile( Path.c_str() );
		return;
	}

DEBUGOUT( "Save Launcher File:%s\n", Path.c_str() );

	if( (fp = ::fopen( Path.c_str(), "w" )) ) {
		for( INT index = 0; index < m_FileListNum; index++ ) {
			FILELIST& fl = m_FileList[index];
//DEBUGOUT( "%08X:%s\n", index, fl.fname.c_str() );
			::fprintf( fp, "%s;%s;%d;%d;%d;%08X;%08X;%s;%s;%s;%s;%s;%s;%s;%s\n",
				fl.fname.c_str(),
				fl.path.c_str(),
				fl.mapper,
				fl.prg_size,
				fl.chr_size,
				fl.crcall,
				fl.crc,
				fl.info.c_str(),
				fl.db.c_str(),
				fl.title.c_str(),
				fl.country.c_str(),
				fl.manufacturer.c_str(),
				fl.saledate.c_str(),
				fl.price.c_str(),
				fl.genre.c_str() );
		}
		FCLOSE( fp );
	}

	m_FileList.clear();
	m_FileListNum = 0;
}

/////////////////////////////////////////////////////////////////////////////

// 儊僢僙乕僕
DLG_MESSAGE_BEGIN(CLchDispEditDlg)
DLG_ON_MESSAGE( WM_INITDIALOG,	OnInitDialog )
// 僐儅儞僪
DLG_COMMAND_BEGIN()
DLG_ON_COMMAND( IDOK, OnOK )
DLG_ON_COMMAND( IDCANCEL, OnCancel )
DLG_ON_COMMAND( IDC_DED_ADD, OnAdd )
DLG_ON_COMMAND( IDC_DED_DEL, OnDel )
DLG_ON_COMMAND( IDC_DED_UP, OnUp )
DLG_ON_COMMAND( IDC_DED_DOWN, OnDown )
DLG_COMMAND_END()
// Notify 儊僢僙乕僕
DLG_NOTIFY_BEGIN()
DLG_NOTIFY_END()
DLG_MESSAGE_END()

INT	CLchDispEditDlg::DoModal( HWND hWndParent )
{
	return	::DialogBoxParam( CApp::GetPlugin(), MAKEINTRESOURCE(IDD_LCH_DISPEDIT),
				hWndParent, g_DlgProc, (LPARAM)this );
}

DLGMSG	CLchDispEditDlg::OnInitDialog( DLGMSGPARAM )
{
//	DEBUGOUT( "CLchDispEditDlg::OnInitDialog\n" );

	INT	i;
	CHAR	szStr[64];
	m_nViewNum = m_nHideNum = 0;
	for( i = 0; i < LAUNCHHEADER_MAX; i++ ) {
		CApp::LoadString( CLauncherDlg::m_HeaderID[Config.launcher.nHeaderOrder[i]], szStr, sizeof(szStr) );
		if( Config.launcher.bHeaderView[Config.launcher.nHeaderOrder[i]] ) {
			::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_ADDSTRING, 0, (LPARAM)szStr );
			m_nViewOrder[m_nViewNum] = Config.launcher.nHeaderOrder[i];
			m_nViewNum++;
		} else {
			::SendDlgItemMessage( m_hWnd, IDC_DED_HIDELIST, LB_ADDSTRING, 0, (LPARAM)szStr );
			m_nHideOrder[m_nHideNum] = Config.launcher.nHeaderOrder[i];
			m_nHideNum++;
		}
	}
	if( m_nViewNum <= 1 ) {
		::EnableWindow( ::GetDlgItem( m_hWnd, IDC_DED_DEL ), FALSE );
	}
	if( m_nHideNum == 0 ) {
		::EnableWindow( ::GetDlgItem( m_hWnd, IDC_DED_ADD ), FALSE );
	}

	return TRUE;
}

DLGCMD	CLchDispEditDlg::OnAdd( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchDispEditDlg::OnAdd\n" );

	INT nSel = ::SendDlgItemMessage( m_hWnd, IDC_DED_HIDELIST, LB_GETCURSEL, 0, 0 );

	if( nSel != LB_ERR ) {
		CHAR	szStr[64];
		::SendDlgItemMessage( m_hWnd, IDC_DED_HIDELIST, LB_GETTEXT, (WPARAM)nSel, (LPARAM)szStr );

		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_ADDSTRING, 0, (LPARAM)szStr );
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_SETCURSEL, (WPARAM)m_nViewNum, 0 );

		m_nViewOrder[m_nViewNum] = m_nHideOrder[nSel];
		m_nViewNum++;

		::SendDlgItemMessage( m_hWnd, IDC_DED_HIDELIST, LB_DELETESTRING, (WPARAM)nSel, 0 );

		for( INT i = nSel; i < m_nHideNum-1; i++ ) {
			m_nHideOrder[i] = m_nHideOrder[i+1];
		}
		m_nHideNum--;
	}

	if( m_nViewNum >= 1 ) {
		::EnableWindow( ::GetDlgItem( m_hWnd, IDC_DED_DEL ), TRUE );
	}
	if( m_nHideNum == 0 ) {
		::EnableWindow( ::GetDlgItem( m_hWnd, IDC_DED_ADD ), FALSE );
	}
}

DLGCMD	CLchDispEditDlg::OnDel( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchDispEditDlg::OnDel\n" );

	INT nSel = ::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_GETCURSEL, 0, 0 );

	if( nSel != LB_ERR ) {
		CHAR	szStr[64];
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_GETTEXT, (WPARAM)nSel, (LPARAM)szStr );

		::SendDlgItemMessage( m_hWnd, IDC_DED_HIDELIST, LB_ADDSTRING, 0, (LPARAM)szStr );
		::SendDlgItemMessage( m_hWnd, IDC_DED_HIDELIST, LB_SETCURSEL, (WPARAM)m_nHideNum, 0 );

		m_nHideOrder[m_nHideNum] = m_nViewOrder[nSel];
		m_nHideNum++;

		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_DELETESTRING, (WPARAM)nSel, 0 );

		for( INT i = nSel; i < m_nViewNum-1; i++ ) {
			m_nViewOrder[i] = m_nViewOrder[i+1];
		}
		m_nViewNum--;
	}

	if( m_nViewNum <= 1 ) {
		::EnableWindow( ::GetDlgItem( m_hWnd, IDC_DED_DEL ), FALSE );
	}
	if( m_nHideNum != 0 ) {
		::EnableWindow( ::GetDlgItem( m_hWnd, IDC_DED_ADD ), TRUE );
	}
}

DLGCMD	CLchDispEditDlg::OnUp( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchDispEditDlg::OnUp\n" );

	INT nSel = ::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_GETCURSEL, 0, 0 );

	if( nSel != LB_ERR && nSel > 0 ) {
		CHAR	szStr[64];
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_GETTEXT, (WPARAM)nSel, (LPARAM)szStr );
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_DELETESTRING, (WPARAM)nSel, 0 );
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_INSERTSTRING, (WPARAM)nSel-1, (LPARAM)szStr );

		INT	temp = m_nViewOrder[nSel];
		m_nViewOrder[nSel] = m_nViewOrder[nSel-1];
		m_nViewOrder[nSel-1] = temp;

		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_SETCURSEL, (WPARAM)nSel-1, 0 );
	}
}

DLGCMD	CLchDispEditDlg::OnDown( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchDispEditDlg::OnDown\n" );

	INT nSel = ::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_GETCURSEL, 0, 0 );

	if( nSel != LB_ERR && nSel < m_nViewNum-1 ) {
		CHAR	szStr[64];
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_GETTEXT, (WPARAM)nSel, (LPARAM)szStr );
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_DELETESTRING, (WPARAM)nSel, 0 );
		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_INSERTSTRING, (WPARAM)nSel+1, (LPARAM)szStr );

		INT	temp = m_nViewOrder[nSel];
		m_nViewOrder[nSel] = m_nViewOrder[nSel+1];
		m_nViewOrder[nSel+1] = temp;

		::SendDlgItemMessage( m_hWnd, IDC_DED_VIEWLIST, LB_SETCURSEL, (WPARAM)nSel+1, 0 );
	}
}

DLGCMD	CLchDispEditDlg::OnOK( DLGCMDPARAM )
{
	for( INT i = 0; i < LAUNCHHEADER_MAX; i++ ) {
		if( i < m_nViewNum ) {
			Config.launcher.nHeaderOrder[i] = m_nViewOrder[i];
			Config.launcher.bHeaderView[m_nViewOrder[i]] = TRUE;
		} else {
			Config.launcher.nHeaderOrder[i] = m_nHideOrder[i-m_nViewNum];
			Config.launcher.bHeaderView[m_nHideOrder[i-m_nViewNum]] = FALSE;
		}
//DEBUGOUT( "%2d:%2d %2d\n", i, Config.launcher.nHeaderOrder[i], Config.launcher.bHeaderView[i] );
	}

	::EndDialog( m_hWnd, IDOK );
}

DLGCMD	CLchDispEditDlg::OnCancel( DLGCMDPARAM )
{
	::EndDialog( m_hWnd, IDCANCEL );
}

///////////////////////////////////////////////////////////////////////////////

#ifndef ListView_SetCheckState
   #define ListView_SetCheckState(hwndLV, i, fCheck) \
      ListView_SetItemState(hwndLV, i, \
      INDEXTOSTATEIMAGEMASK((fCheck)+1), LVIS_STATEIMAGEMASK)
#endif

// 儊僢僙乕僕
DLG_MESSAGE_BEGIN(CLchFolderConfigDlg)
DLG_ON_MESSAGE( WM_INITDIALOG,	OnInitDialog )
// 僐儅儞僪
DLG_COMMAND_BEGIN()
DLG_ON_COMMAND( IDOK, OnOK )
DLG_ON_COMMAND( IDCANCEL, OnCancel )
DLG_ON_COMMAND( IDC_LFL_ADD, OnAdd )
DLG_ON_COMMAND( IDC_LFL_DEL, OnDel )
DLG_COMMAND_END()
// Notify 儊僢僙乕僕
DLG_NOTIFY_BEGIN()
DLG_NOTIFY_END()
DLG_MESSAGE_END()

INT	CLchFolderConfigDlg::DoModal( HWND hWndParent )
{
	return	::DialogBoxParam( CApp::GetPlugin(), MAKEINTRESOURCE(IDD_LCH_FOLDER),
				hWndParent, g_DlgProc, (LPARAM)this );
}

DLGMSG	CLchFolderConfigDlg::OnInitDialog( DLGMSGPARAM )
{
//	DEBUGOUT( "CLchFolderConfigDlg::OnInitDialog\n" );

	HWND	hWndCtrl = ::GetDlgItem( m_hWnd, IDC_LFL_LIST );
	ListView_SetExtendedListViewStyle( hWndCtrl, LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );

	// 儗億乕僩儌乕僪偱偼僿僢僟乕偑柍偔偰傕愝掕偟側偄偲昞帵偝傟側偄
	LV_COLUMN lvcol;
	lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvcol.fmt = LVCFMT_LEFT;
	lvcol.cx = 1024;
	lvcol.iSubItem = 0;
	lvcol.pszText = "";
	ListView_InsertColumn( hWndCtrl, 0, &lvcol );

	LV_ITEM	lvitem;
	lvitem.mask = LVIF_TEXT;
	lvitem.iSubItem = 0;
	for( INT i = 0; i < 16; i++ ) {
		lvitem.iItem = i;
		if( ::strlen( Config.launcher.szFolder[i] ) ) {
			lvitem.pszText = Config.launcher.szFolder[i];
			ListView_InsertItem( hWndCtrl, &lvitem );
			ListView_SetCheckState( hWndCtrl, i, Config.launcher.bFolderUse[i] );
		} else {
			break;
		}
	}

	return	TRUE;
}

DLGCMD	CLchFolderConfigDlg::OnOK( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchFolderConfigDlg::OnOK\n" );

	HWND	hWndCtrl = ::GetDlgItem( m_hWnd, IDC_LFL_LIST );
	INT	nCount = ListView_GetItemCount( hWndCtrl );

	INT	i;
	for( i = 0; i < nCount; i++ ) {
		ListView_GetItemText( hWndCtrl, i, 0, Config.launcher.szFolder[i], sizeof(Config.launcher.szFolder[i]) );
		Config.launcher.bFolderUse[i] = ListView_GetCheckState( hWndCtrl, i );
	}
	for( ; i < 16; i++ ) {
		Config.launcher.bFolderUse[i] = FALSE;
		Config.launcher.szFolder[i][0] = '\0';
	}

	::EndDialog( m_hWnd, IDOK );
}

DLGCMD	CLchFolderConfigDlg::OnCancel( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchFolderConfigDlg::OnCancel\n" );

	::EndDialog( m_hWnd, IDCANCEL );
}

DLGCMD	CLchFolderConfigDlg::OnAdd( DLGCMDPARAM )
{
	HWND	hWndCtrl = ::GetDlgItem( m_hWnd, IDC_LFL_LIST );

	CHAR	szFolder[_MAX_PATH];
	szFolder[0] = '\0';
	CHAR	szTitle[256];
	CApp::LoadString( IDS_UI_BROWSE, szTitle, sizeof(szTitle) );

	if( CPathlib::SelectFolder( m_hWnd, szTitle, szFolder ) ) {
		LV_ITEM	lvitem;
		lvitem.mask = LVIF_TEXT;
		lvitem.iItem = ListView_GetItemCount( hWndCtrl );
		lvitem.iSubItem = 0;
		lvitem.pszText = szFolder;

		ListView_InsertItem( hWndCtrl, &lvitem );
		ListView_SetCheckState( hWndCtrl, lvitem.iItem, TRUE );

		if( lvitem.iItem+1 >= 16 ) {
			::EnableWindow( ::GetDlgItem( m_hWnd, IDC_LFL_ADD ), FALSE );
		}
	}
}

DLGCMD	CLchFolderConfigDlg::OnDel( DLGCMDPARAM )
{
	HWND	hWndCtrl = ::GetDlgItem( m_hWnd, IDC_LFL_LIST );
	INT	nCount = ListView_GetItemCount( hWndCtrl );

	for( INT i = 0; i < nCount; i++ ) {
		if( ListView_GetItemState( hWndCtrl, i, LVIS_SELECTED ) ) {
			ListView_DeleteItem( hWndCtrl, i );
			::EnableWindow( ::GetDlgItem( m_hWnd, IDC_LFL_ADD ), TRUE );
			break;
		}
	}
}

///////////////////////////////////////////////////////////////////////////////

// 儊僢僙乕僕
DLG_MESSAGE_BEGIN(CLchHeaderEditDlg)
DLG_ON_MESSAGE( WM_INITDIALOG,	OnInitDialog )
// 僐儅儞僪
DLG_COMMAND_BEGIN()
DLG_ON_COMMAND( IDOK, OnOK )
DLG_ON_COMMAND( IDCANCEL, OnCancel )
DLG_COMMAND_END()
// Notify 儊僢僙乕僕
DLG_NOTIFY_BEGIN()
DLG_NOTIFY_END()
DLG_MESSAGE_END()

INT	CLchHeaderEditDlg::DoModal( HWND hWndParent )
{
	return	::DialogBoxParam( CApp::GetPlugin(), MAKEINTRESOURCE(IDD_LCH_HEADEREDIT),
				hWndParent, g_DlgProc, (LPARAM)this );
}

DLGMSG	CLchHeaderEditDlg::OnInitDialog( DLGMSGPARAM )
{
//	DEBUGOUT( "CLchHeaderEditDlg::OnInitDialog\n" );

	::SetDlgItemInt( m_hWnd, IDC_HED_EDIT, (UINT)m_nMapperNo, FALSE );

	BTNCHECK( IDC_HED_VMIRROR,    m_bMirror );
	BTNCHECK( IDC_HED_SRAM,        m_bSram );
	BTNCHECK( IDC_HED_4SCREEN,     m_bFourScreen );
	BTNCHECK( IDC_HED_TRAINER,     m_bTrainer );
	BTNCHECK( IDC_HED_VSUNISYSTEM, m_bVSUnisystem );

	return	TRUE;
}

DLGCMD	CLchHeaderEditDlg::OnOK( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchHeaderEditDlg::OnOK\n" );

	m_nMapperNo = (INT)::GetDlgItemInt( m_hWnd, IDC_HED_EDIT, NULL, FALSE );
	if( m_nMapperNo < 0 || m_nMapperNo > 255 ) {
		CHAR	szStr[256];
		CApp::LoadString( IDS_ERROR_ILLEGALMAPPERNO, szStr, sizeof(szStr) );
		::MessageBox( m_hWnd, szStr, "ERROR", MB_ICONERROR|MB_OK );
		return;
	}

	m_bMirror      = IsBTNCHECK( IDC_HED_VMIRROR );
	m_bSram        = IsBTNCHECK( IDC_HED_SRAM );
	m_bFourScreen  = IsBTNCHECK( IDC_HED_4SCREEN );
	m_bTrainer     = IsBTNCHECK( IDC_HED_TRAINER );
	m_bVSUnisystem = IsBTNCHECK( IDC_HED_VSUNISYSTEM );

	::EndDialog( m_hWnd, IDOK );
}

DLGCMD	CLchHeaderEditDlg::OnCancel( DLGCMDPARAM )
{
//	DEBUGOUT( "CLchHeaderEditDlg::OnCancel\n" );

	::EndDialog( m_hWnd, IDCANCEL );
}

⌨️ 快捷键说明

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