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

📄 controllerdlg.cpp

📁 著名的任天堂FC游戏机模拟器VirtuaNes 085版的源码!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
DLGMSG	CControllerDlg::OnInitDialog( DLGMSGPARAM )
{
//	DEBUGOUT( "CControllerDlg::OnInitDialog\n" );
	m_ConfigSave = Config.controller;

	OnInitialMember();

	return	TRUE;
}

DLGMSG	CControllerDlg::OnDestroy( DLGMSGPARAM )
{
//	DEBUGOUT( "CControllerDlg::OnDestroy\n" );

	// 僠儍僀儖僪僂僀儞僪僂傪攋婞
	for( INT i = 0; i < m_PageNum; i++ ) {
		::DestroyWindow( m_Page[i].m_hWnd );
	}
	return	FALSE;
}

DLGNOTIFY CControllerDlg::OnSelectChange( DLGNOTIFYPARAM )
{
//	DEBUGOUT( "CControllerDlg::OnSelectChange\n" );

	HWND	hWndCtrl = ::GetDlgItem( m_hWnd, IDC_CTR_TAB );
	m_PageSel = TabCtrl_GetCurSel( hWndCtrl );

	OnPageSetup( m_PageSel );

	for( INT i = 0; i < m_PageNum; i++ ) {
		if( i == m_PageSel ) {
			::ShowWindow( m_Page[i].m_hWnd, SW_SHOW );
		} else {
			::ShowWindow( m_Page[i].m_hWnd, SW_HIDE );
		}
	}

	if( m_TimerID ) {
		::KillTimer( m_hWnd, m_TimerID );
		m_TimerID   = 0;
		m_ControlID = 0;
//		::InvalidateRect( hWndCtrl, NULL, TRUE );
	}
	m_bCancelMode = FALSE;
}

DLGNOTIFY CControllerDlg::OnSettingSelectChange( DLGCMDPARAM )
{
//	DEBUGOUT( "CControllerDlg::OnSettingSelectChange\n" );

	if( m_TimerID ) {
		::KillTimer( m_hWnd, m_TimerID );
		m_TimerID   = 0;
		m_ControlID = 0;
//		::InvalidateRect( ::GetDlgItem( m_hWnd, IDC_CTR_TAB ), NULL, TRUE );
	}
	m_bCancelMode = FALSE;

	m_SettingSel = ::SendDlgItemMessage( m_hWnd, IDC_CTR_SELECT_COMBO, CB_GETCURSEL, 0, 0 );

	OnPageSetup( m_PageSel );
}

DLGCMD	CControllerDlg::OnClicked( DLGCMDPARAM )
{
//	DEBUGOUT( "CControllerDlg::OnClicked uID=%d\n", uID );
	if( !m_TimerID ) {
		m_ControlID = uID;
		m_TimerCount = 0;
		m_TimerID = ::SetTimer( m_hWnd, 1, 50, NULL );
		m_bCancelMode = TRUE;
	}
}

DLGMSG	CControllerDlg::OnTimer( DLGMSGPARAM )
{
	HWND	hWndCtrl = ::GetDlgItem( m_Page[m_PageSel].m_hWnd, m_ControlID );
	INT	nID = m_ControlID - IDC_CTR_UP;
	INT	nOffset = m_SettingSel?32:0;

	if( wParam == (WPARAM)m_TimerID ) {
		if( m_TimerCount == 0 )
			m_TimerStart = ::timeGetTime();
		m_TimerCount++;

		DirectInput.Poll();

		if( m_TimerCount > 60 ) {
		// TimeOut
			if( m_TimerID ) {
				::KillTimer( m_hWnd, m_TimerID );
				m_TimerID   = 0;
				m_ControlID = 0;
				::InvalidateRect( hWndCtrl, NULL, TRUE );
			}
			m_bCancelMode = FALSE;
		} else {
		// Button push?
			BOOL	bSet = FALSE;
			INT	i;
			LPCSTR	str;
			// Set cancel
			if( DirectInput.m_Sw[DIK_ESCAPE] ) {
				if( m_PageSel < 4 ) {
					Config.controller.nButton[m_PageSel][nID+nOffset] = 0;
				} else if( ControllerPageID[m_PageSel] == IDD_CTR_CRAZYCLIMBER ) {
					Config.controller.nExButton[0][nID+nOffset] = 0;
				} else if( ControllerPageID[m_PageSel] == IDD_CTR_FAMLYTRAINER ) {
						Config.controller.nExButton[1][nID+nOffset] = 0;
				} else if( ControllerPageID[m_PageSel] == IDD_CTR_EXCITINGBOXING ) {
						Config.controller.nExButton[2][nID+nOffset] = 0;
				} else if( ControllerPageID[m_PageSel] == IDD_CTR_MAHJANG ) {
						Config.controller.nExButton[3][nID+nOffset] = 0;
				} else if( ControllerPageID[m_PageSel] == IDD_CTR_NSFPLAYER ) {
					Config.controller.nNsfButton[nID+nOffset] = 0;
				} else if( ControllerPageID[m_PageSel] == IDD_CTR_VSUNISYSTEM ) {
					Config.controller.nVSUnisystem[nID+nOffset] = 0;
				}
				::SetWindowText( hWndCtrl, "----" );
				bSet = TRUE;
			} else {
				for( i = 0; i < 512; i++ ) {
					if( DirectInput.m_Sw[i] ) {
						if( (str=DirectInput.SearchKeyName( i )) ) {
							if( m_PageSel < 4 ) {
								Config.controller.nButton[m_PageSel][nID+nOffset] = i;
							} else if( ControllerPageID[m_PageSel] == IDD_CTR_CRAZYCLIMBER ) {
								Config.controller.nExButton[0][nID+nOffset] = i;
							} else if( ControllerPageID[m_PageSel] == IDD_CTR_FAMLYTRAINER ) {
									Config.controller.nExButton[1][nID+nOffset] = i;
							} else if( ControllerPageID[m_PageSel] == IDD_CTR_EXCITINGBOXING ) {
									Config.controller.nExButton[2][nID+nOffset] = i;
							} else if( ControllerPageID[m_PageSel] == IDD_CTR_MAHJANG ) {
									Config.controller.nExButton[3][nID+nOffset] = i;
							} else if( ControllerPageID[m_PageSel] == IDD_CTR_NSFPLAYER ) {
								Config.controller.nNsfButton[nID+nOffset] = i;
							} else if( ControllerPageID[m_PageSel] == IDD_CTR_VSUNISYSTEM ) {
								Config.controller.nVSUnisystem[nID+nOffset] = i;
							}
							::SetWindowText( hWndCtrl, str );
							bSet = TRUE;
						}
					}
				}
			}

			if( bSet ) {
			// Button Pressed
				if( m_TimerID ) {
					::KillTimer( m_hWnd, m_TimerID );
					m_TimerID   = 0;
					m_ControlID = 0;
					::InvalidateRect( hWndCtrl, NULL, TRUE );
				}
				m_bCancelMode = FALSE;
			} else {
			// Flashing
				HDC	hDC = ::GetDC( hWndCtrl );
				RECT	rc;
				::GetClientRect( hWndCtrl, &rc );
				DWORD	c = ((::timeGetTime()-m_TimerStart)/3)&0xFF;
				if( c > 0x7F )
					c = 0x80 - (c - 0x7F);
				c *= 2;
				::SetBkColor( hDC, RGB(c,c,c) );
				::ExtTextOut( hDC, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL );
				::ReleaseDC( hWndCtrl, hDC );
			}
		}
	}
	return	FALSE;
}

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

	if( m_TimerID ) {
		::KillTimer( m_hWnd, m_TimerID );
		m_TimerID   = 0;
		m_ControlID = 0;
	}
	m_bCancelMode = FALSE;

	for( INT page = 0; page < 4; page++ ) {
		Config.controller.nRapid[page][0] = ::SendDlgItemMessage( m_Page[page].m_hWnd, IDC_CTR_A_RAPID_LIST, LB_GETCURSEL, 0, 0 );
		Config.controller.nRapid[page][1] = ::SendDlgItemMessage( m_Page[page].m_hWnd, IDC_CTR_B_RAPID_LIST, LB_GETCURSEL, 0, 0 );
	}

	::EndDialog( m_hWnd, IDOK );
}

DLGCMD	CControllerDlg::OnCancel( DLGCMDPARAM )
{
//	DEBUGOUT( "CControllerDlg::OnCancel\n" );
//	if( m_bCancelMode )
//		return;
	if( m_TimerID ) {
		::KillTimer( m_hWnd, m_TimerID );
		m_TimerID   = 0;
		m_ControlID = 0;
	}
	m_bCancelMode = FALSE;

	Config.controller = m_ConfigSave;

	::EndDialog( m_hWnd, IDCANCEL );
}

DLGCMD	CControllerDlg::OnDefault( DLGCMDPARAM )
{
//	DEBUGOUT( "CControllerDlg::OnDefault\n" );
	if( m_TimerID ) {
		::KillTimer( m_hWnd, m_TimerID );
		m_TimerID   = 0;
		m_ControlID = 0;
	}
	m_bCancelMode = FALSE;

	switch( ControllerPageID[m_PageSel] ) {
		case	IDD_CTR_PLAYER1:
			Config.controller.DefaultController1();
			break;
		case	IDD_CTR_PLAYER2:
			Config.controller.DefaultController2();
			break;
		case	IDD_CTR_PLAYER3:
			Config.controller.DefaultController3();
			break;
		case	IDD_CTR_PLAYER4:
			Config.controller.DefaultController4();
			break;
		case	IDD_CTR_CRAZYCLIMBER:
			Config.controller.DefaultExController0();
			break;
		case	IDD_CTR_FAMLYTRAINER:
			Config.controller.DefaultExController1();
			break;
		case	IDD_CTR_EXCITINGBOXING:
			Config.controller.DefaultExController2();
			break;
		case	IDD_CTR_MAHJANG:
			Config.controller.DefaultExController3();
			break;
		case	IDD_CTR_NSFPLAYER:
			Config.controller.DefaultNsfController();
			break;
		case	IDD_CTR_VSUNISYSTEM:
			Config.controller.DefaultVSUnisystem();
			break;
		default:
			break;
	}
	OnPageSetup( m_PageSel );
}

⌨️ 快捷键说明

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