📄 controllerdlg.cpp
字号:
//
// 僐儞僩儘乕儔僟僀傾儘僌僋儔僗
//
//
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <mmsystem.h>
#include <string>
using namespace std;
#include "VirtuaNESres.h"
#include "DebugOut.h"
#include "App.h"
#include "Pathlib.h"
#include "Wnd.h"
#include "ControllerDlg.h"
#include "DirectInput.h"
///////////////////////////////////////////////////////////////////////////////
DLG_MESSAGE_BEGIN(CControllerPageDlg)
// 儊僢僙乕僕
DLG_ON_MESSAGE( WM_INITDIALOG, OnInitDialog )
// NOTIFY儊僢僙乕僕
DLG_NOTIFY_BEGIN()
DLG_NOTIFY_END()
// 僐儅儞僪
DLG_COMMAND_BEGIN()
DLG_ON_COMMAND_NOTIFY_RANGE( IDC_CTR_UP, IDC_CTR_END, STN_CLICKED, OnClicked )
DLG_COMMAND_END()
DLG_MESSAGE_END()
INT CControllerPageDlg::Create( UINT nID, HWND hWndParent )
{
m_nPageID = nID;
m_hWnd = ::CreateDialogParam( CApp::GetPlugin(), MAKEINTRESOURCE(nID),
hWndParent, g_DlgProc, (LPARAM)this );
return (m_hWnd)?TRUE:FALSE;
}
void CControllerPageDlg::Destroy()
{
::DestroyWindow( m_hWnd );
}
DLGCMD CControllerPageDlg::OnClicked( DLGCMDPARAM )
{
// DEBUGOUT( "CControllerPageDlg::OnClicked uID=%d\n", uID );
// 恊偺僞僽僐儞僩儘乕儖傪僷僗偟偰儊僢僙乕僕傪捠抦:p
HWND hWndParent, hWndOwner;
hWndParent = ::GetParent( m_hWnd );
hWndOwner = ::GetParent( hWndParent );
::SendMessage( hWndOwner, WM_COMMAND, MAKELPARAM(uID,STN_CLICKED), (LPARAM)::GetDlgItem(m_hWnd,uID) );
}
DLGMSG CControllerPageDlg::OnInitDialog( DLGMSGPARAM )
{
// DEBUGOUT( "CControllerPageDlg::OnInitDialog\n" );
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
UINT CControllerDlg::ControllerPageID[] = {
IDD_CTR_PLAYER1,
IDD_CTR_PLAYER2,
IDD_CTR_PLAYER3,
IDD_CTR_PLAYER4,
IDD_CTR_CRAZYCLIMBER,
IDD_CTR_FAMLYTRAINER,
IDD_CTR_EXCITINGBOXING,
IDD_CTR_MAHJANG,
IDD_CTR_NSFPLAYER,
IDD_CTR_VSUNISYSTEM,
0
};
DLG_MESSAGE_BEGIN(CControllerDlg)
// 儊僢僙乕僕
DLG_ON_MESSAGE( WM_INITDIALOG, OnInitDialog )
DLG_ON_MESSAGE( WM_DESTROY, OnDestroy )
DLG_ON_MESSAGE( WM_TIMER, OnTimer )
// NOTIFY儊僢僙乕僕
DLG_NOTIFY_BEGIN()
DLG_ON_NOTIFY( IDC_CTR_TAB, TCN_SELCHANGE, OnSelectChange )
DLG_NOTIFY_END()
// 僐儅儞僪
DLG_COMMAND_BEGIN()
DLG_ON_COMMAND( IDOK, OnOK )
DLG_ON_COMMAND( IDCANCEL, OnCancel )
DLG_ON_COMMAND( IDDEFAULT, OnDefault )
DLG_ON_COMMAND_NOTIFY_RANGE( IDC_CTR_UP, IDC_CTR_END, STN_CLICKED, OnClicked )
DLG_ON_COMMAND_NOTIFY( IDC_CTR_SELECT_COMBO, CBN_SELCHANGE, OnSettingSelectChange )
DLG_COMMAND_END()
DLG_MESSAGE_END()
INT CControllerDlg::DoModal( HWND hWndParent )
{
m_bCancelMode = FALSE;
m_TimerID = 0;
m_SettingSel = 0;
return ::DialogBoxParam( CApp::GetPlugin(), MAKEINTRESOURCE(IDD_CFG_CONTROLLER),
hWndParent, g_DlgProc, (LPARAM)this );
}
BOOL CControllerDlg::PreTranslateMessage( MSG* pMsg )
{
if( pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST ) {
// DEBUGOUT( "CControllerDlg::PreTranslateMessage WM_KEY????\n" );
return m_bCancelMode;
}
return FALSE;
}
void CControllerDlg::OnInitialMember()
{
HWND hWndCtrl = ::GetDlgItem( m_hWnd, IDC_CTR_TAB );
RECT rcT, rcP, rcW;
INT page;
// for( INT page = 0; ControllerPageID[page]; page++ ) {
for( page = 0; ControllerPageID[page]; page++ ) {
m_Page[page].Create( ControllerPageID[page], hWndCtrl );
// 柤慜偺庢摼
CHAR szTitle[256];
::GetWindowText( m_Page[page].m_hWnd, szTitle, sizeof(szTitle) );
// 柤慜傪庢摼偟偨傜僉儍僾僔儑儞傪徚偡
LONG style;
style = ::GetWindowLong( m_Page[page].m_hWnd, GWL_STYLE );
style &= ~(WS_CAPTION|WS_BORDER|WS_OVERLAPPED);
::SetWindowLong( m_Page[page].m_hWnd, GWL_STYLE, style );
// 僒僀僘曄峏
::GetWindowRect( m_Page[page].m_hWnd, &rcW );
rcW.right -= ::GetSystemMetrics( SM_CXSIZEFRAME );
rcW.bottom -= ::GetSystemMetrics( SM_CYCAPTION )+::GetSystemMetrics( SM_CYSIZEFRAME )*2;
::SetWindowPos( m_Page[page].m_hWnd, NULL, 0, 0, RCWIDTH(rcW), RCHEIGHT(rcW), SWP_NOMOVE|SWP_NOZORDER );
// 僞僽偵柤慜傪愝掕偡傞
TCITEM tcitem;
tcitem.mask = TCIF_TEXT;
tcitem.pszText = szTitle;
TabCtrl_InsertItem( hWndCtrl, page, &tcitem );
// // 儁乕僕埵抲偺曗惓
// ::GetClientRect( hWndCtrl, &rcT );
// TabCtrl_AdjustRect( hWndCtrl, FALSE, &rcT );
// ::GetWindowRect( m_Page[page].m_hWnd, &rcP );
// 寁嶼
// rcW.left = rcT.left + (RCWIDTH(rcT)-RCWIDTH(rcP))/2;
// rcW.top = rcT.top + (RCHEIGHT(rcT)-RCHEIGHT(rcP))/2;
// rcW.right = rcW.left + RCWIDTH(rcP);
// rcW.bottom = rcW.top + RCHEIGHT(rcP);
// ::SetWindowPos( m_Page[page].m_hWnd, NULL, rcW.left, rcW.top, RCWIDTH(rcW), RCHEIGHT(rcW), SWP_NOZORDER|SWP_NOACTIVATE );
// 奺儁乕僕偺儕僗僩儃僢僋僗偺愝掕
if( page < 4 ) {
HWND hWndList;
hWndList = ::GetDlgItem( m_Page[page].m_hWnd, IDC_CTR_A_RAPID_LIST );
::SendMessage( hWndList, LB_INSERTSTRING, 0, (LPARAM)" 10FPS" );
::SendMessage( hWndList, LB_INSERTSTRING, 1, (LPARAM)" 15FPS" );
::SendMessage( hWndList, LB_INSERTSTRING, 2, (LPARAM)" 20FPS" );
::SendMessage( hWndList, LB_INSERTSTRING, 3, (LPARAM)" 30FPS" );
hWndList = ::GetDlgItem( m_Page[page].m_hWnd, IDC_CTR_B_RAPID_LIST );
::SendMessage( hWndList, LB_INSERTSTRING, 0, (LPARAM)" 10FPS" );
::SendMessage( hWndList, LB_INSERTSTRING, 1, (LPARAM)" 15FPS" );
::SendMessage( hWndList, LB_INSERTSTRING, 2, (LPARAM)" 20FPS" );
::SendMessage( hWndList, LB_INSERTSTRING, 3, (LPARAM)" 30FPS" );
}
// 儃僞儞柤摍偺愝掕
OnPageSetup( page );
::ShowWindow( m_Page[page].m_hWnd, (page==0)?SW_SHOW:SW_HIDE );
}
// 儁乕僕埵抲嵞挷惍
for( page = 0; ControllerPageID[page]; page++ ) {
// 儁乕僕埵抲偺曗惓
::GetClientRect( hWndCtrl, &rcT );
TabCtrl_AdjustRect( hWndCtrl, FALSE, &rcT );
::GetWindowRect( m_Page[page].m_hWnd, &rcP );
// 寁嶼
rcW.left = rcT.left + (RCWIDTH(rcT)-RCWIDTH(rcP))/2;
rcW.top = rcT.top + (RCHEIGHT(rcT)-RCHEIGHT(rcP))/2;
rcW.right = rcW.left + RCWIDTH(rcP);
rcW.bottom = rcW.top + RCHEIGHT(rcP);
::SetWindowPos( m_Page[page].m_hWnd, NULL, rcW.left, rcW.top, RCWIDTH(rcW), RCHEIGHT(rcW), SWP_NOZORDER|SWP_NOACTIVATE );
}
TabCtrl_SetCurSel( hWndCtrl, 0 );
m_PageSel = 0;
m_PageNum = page;
// 愝掕僐儞儃儃僢僋僗
::SendDlgItemMessage( m_hWnd, IDC_CTR_SELECT_COMBO, CB_RESETCONTENT, 0, 0 );
CHAR szStr[64];
for( INT i = IDS_CTR_SELECT1; i <= IDS_CTR_SELECT2; i++ ) {
CApp::LoadString( i, szStr, sizeof(szStr) );
::SendDlgItemMessage( m_hWnd, IDC_CTR_SELECT_COMBO, CB_INSERTSTRING, (WPARAM)i-IDS_CTR_SELECT1, (LPARAM)szStr );
}
::SendDlgItemMessage( m_hWnd, IDC_CTR_SELECT_COMBO, CB_SETCURSEL, 0, 0 );
}
void CControllerDlg::OnPageSetup( UINT nPage )
{
HWND hWnd = m_Page[nPage].m_hWnd;
HWND hWndCtrl;
INT nKey;
LPCSTR lpStr;
INT nOffset = m_SettingSel?32:0;
for( INT nID = IDC_CTR_UP; nID <= IDC_CTR_END; nID++ ) {
if( (hWndCtrl = ::GetDlgItem( hWnd, nID )) ) {
if( nPage < 4 ) {
nKey = Config.controller.nButton[nPage][nID-IDC_CTR_UP+nOffset];
} else if( ControllerPageID[nPage] == IDD_CTR_CRAZYCLIMBER ) {
nKey = Config.controller.nExButton[0][nID-IDC_CTR_UP+nOffset];
} else if( ControllerPageID[nPage] == IDD_CTR_FAMLYTRAINER ) {
nKey = Config.controller.nExButton[1][nID-IDC_CTR_UP+nOffset];
} else if( ControllerPageID[nPage] == IDD_CTR_EXCITINGBOXING ) {
nKey = Config.controller.nExButton[2][nID-IDC_CTR_UP+nOffset];
} else if( ControllerPageID[nPage] == IDD_CTR_MAHJANG ) {
nKey = Config.controller.nExButton[3][nID-IDC_CTR_UP+nOffset];
} else if( ControllerPageID[nPage] == IDD_CTR_NSFPLAYER ) {
nKey = Config.controller.nNsfButton[nID-IDC_CTR_UP+nOffset];
} else if( ControllerPageID[nPage] == IDD_CTR_VSUNISYSTEM ) {
nKey = Config.controller.nVSUnisystem[nID-IDC_CTR_UP+nOffset];
}
if( (lpStr = DirectInput.SearchKeyName(nKey)) ) {
::SetWindowText( hWndCtrl, lpStr );
} else {
::SetWindowText( hWndCtrl, "----" );
}
::InvalidateRect( hWndCtrl, NULL, TRUE );
}
}
if( nPage < 4 ) {
::SendDlgItemMessage( hWnd, IDC_CTR_A_RAPID_LIST, LB_SETCURSEL,
(WPARAM)Config.controller.nRapid[nPage][0], 0 );
::SendDlgItemMessage( hWnd, IDC_CTR_B_RAPID_LIST, LB_SETCURSEL,
(WPARAM)Config.controller.nRapid[nPage][1], 0 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -