Allow user to choose full-screen monitor - Part 2

This commit is contained in:
Barry Harris 2017-06-09 19:05:10 +00:00
parent 9dd04a648f
commit 3f6e5d8381
7 changed files with 179 additions and 1 deletions

View File

@ -2,7 +2,7 @@ alldir += burner burner/win32 dep/kaillera/client dep/libs/libpng dep/libs/lib7
intf/video/scalers intf/video/win32 intf/audio intf/audio/win32 intf/input intf/input/win32 intf/cd intf/cd/win32 \
intf/perfcount intf/perfcount/win32 dep/generated
depobj += about.o bzip.o cona.o debugger.o drv.o dynhuff.o fba_kaillera.o gameinfo.o image_win32.o inpc.o \
depobj += about.o bzip.o choose_monitor.o cona.o debugger.o drv.o dynhuff.o fba_kaillera.o gameinfo.o image_win32.o inpc.o \
inpcheat.o inpd.o inpdipsw.o inps.o ips_manager.o localise.o localise_download.o localise_gamelist.o main.o \
media.o memcard.o menu.o misc_win32.o neocdlist.o neocdsel.o numdial.o paletteviewer.o popup_win32.o progress.o \
replay.o res.o roms.o run.o scrn.o sel.o sfactd.o splash.o stated.o support_paths.o systeminfo.o wave.o \

View File

@ -927,6 +927,25 @@ BEGIN
CONTROL "Record From Power-On",IDC_REPLAYRESET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,55,79,106,14
END
IDD_CHOOSEMONITOR DIALOGEX 0, 0, 242, 77
STYLE DS_MODALFRAME | DS_CENTER | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Choose Monitor for Full Screen"
#ifdef USE_SEGOE
FONT 8, "Segoe UI", 0, 0, 0x1
#else
FONT 8, "MS Shell Dlg", 0, 0, 0x1
#endif
BEGIN
GROUPBOX "",IDC_STATIC1,2,0,236,56
LTEXT "These only apply to the DirectX Graphics 9 blitters.",IDC_CHOOSE_MONITOR_TEXT,8,4,210,15,SS_CENTERIMAGE
LTEXT "Horizontal Games:", IDC_CHOOSE_MONITOR_HOR, 8, 21, 60, 10, SS_CENTERIMAGE
COMBOBOX IDC_CHOOSE_MONITOR_HOR_LIST, 80, 20, 150, 128, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
LTEXT "Vertical Games:", IDC_CHOOSE_MONITOR_VER, 8, 39, 60, 10, SS_CENTERIMAGE
COMBOBOX IDC_CHOOSE_MONITOR_VER_LIST, 80, 38, 150, 128, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
CONTROL "Cancel",IDCANCEL,"Button",WS_TABSTOP,117,59,58,14
CONTROL "OK",IDOK,"Button",WS_TABSTOP,180,59,58,14
END
/////////////////////////////////////////////////////////////////////////////
//
// Menu
@ -1082,6 +1101,7 @@ BEGIN
MENUITEM "&24bit", MENU_24
MENUITEM "&32bit", MENU_32
END
MENUITEM "Choose Fullscreen Monitor", MENU_FULLSCREEN_MONITOR
MENUITEM SEPARATOR
POPUP "&Monitor properties"
BEGIN

View File

@ -467,6 +467,9 @@ void IpsPatchExit();
// localise_download.cpp
int LocaliseDownloadCreate(HWND hParentWND);
// choose_monitor.cpp
int ChooseMonitorCreate();
// Misc
#define _TtoA(a) TCHARToANSI(a, NULL, 0)
#define _AtoT(a) ANSIToTCHAR(a, NULL, 0)

View File

@ -0,0 +1,101 @@
#include "burner.h"
#define MAX_MONITORS 8
static TCHAR *MonitorIDs[MAX_MONITORS];
static INT_PTR CALLBACK ResProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM)
{
static bool bOK;
switch (Msg) {
case WM_INITDIALOG: {
int i;
int nHorSelected = 0, nVerSelected = 0;
for (i = 0; i < MAX_MONITORS; i++) {
MonitorIDs[i] = (TCHAR*)malloc(32 * sizeof(TCHAR));
memset(MonitorIDs[i], 0, 32 * sizeof(TCHAR));
}
DISPLAY_DEVICE dd;
ZeroMemory(&dd, sizeof(dd));
dd.cb = sizeof(dd);
for (i = 0; EnumDisplayDevices(NULL, i, &dd, 0); i++) {
if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) {
DISPLAY_DEVICE dd2;
ZeroMemory(&dd2, sizeof(dd2));
dd2.cb = sizeof(dd2);
EnumDisplayDevices(dd.DeviceName, 0, &dd2, 0);
// Add to dropdowns
TCHAR szTemp[256];
_stprintf(szTemp, _T("%s"), dd2.DeviceString);
if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) _stprintf(szTemp, _T("%s (default)"), szTemp);
SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_HOR_LIST, CB_ADDSTRING, 0, (LPARAM)&szTemp);
SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_VER_LIST, CB_ADDSTRING, 0, (LPARAM)&szTemp);
// Store id for later
_stprintf(MonitorIDs[i], _T("%s"), dd.DeviceName);
// Select if this is our value or the default
if (nHorSelected == 0) {
if (!_tcsicmp(HorScreen, MonitorIDs[i])) {
nHorSelected = 1;
SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_HOR_LIST, CB_SETCURSEL, i, 0);
} else {
if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_HOR_LIST, CB_SETCURSEL, i, 0);
}
}
if (nVerSelected == 0) {
if (!_tcsicmp(VerScreen, MonitorIDs[i])) {
nVerSelected = 1;
SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_VER_LIST, CB_SETCURSEL, i, 0);
} else {
if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_VER_LIST, CB_SETCURSEL, i, 0);
}
}
}
}
WndInMid(hDlg, hScrnWnd);
SetFocus(hDlg); // Enable Esc=close
break;
}
case WM_COMMAND: {
if (LOWORD(wParam) == IDOK) {
bOK = 1;
SendMessage(hDlg, WM_CLOSE, 0, 0);
}
if (LOWORD(wParam) == IDCANCEL) {
SendMessage(hDlg, WM_CLOSE, 0, 0);
}
break;
}
case WM_CLOSE: {
if (bOK) {
// save selected values
int nItem = (int)SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_HOR_LIST, CB_GETCURSEL, 0, 0);
if (MonitorIDs[(int)nItem]) _stprintf(HorScreen, _T("%s"), MonitorIDs[(int)nItem]);
nItem = (int)SendDlgItemMessage(hDlg, IDC_CHOOSE_MONITOR_VER_LIST, CB_GETCURSEL, 0, 0);
if (MonitorIDs[(int)nItem]) _stprintf(VerScreen, _T("%s"), MonitorIDs[(int)nItem]);
}
EndDialog(hDlg, 0);
break;
}
}
return 0;
}
int ChooseMonitorCreate()
{
FBADialogBox(hAppInst,MAKEINTRESOURCE(IDD_CHOOSEMONITOR),hScrnWnd,(DLGPROC)ResProc);
return 0;
}

View File

@ -48,6 +48,7 @@
#define IDD_NCD_COVER_DLG 80
#define IDD_GAMEINFO 81
#define IDD_DOWNLOAD_LOCAL 82
#define IDD_CHOOSEMONITOR 83
#define IDR_MENU 100
#define IDR_MENU_BLITTER_1 110
@ -185,6 +186,11 @@
#define IDC_SYSINFO_LOG_SAVE 20138
#define IDC_LOCAL_DOWNLOAD_LANG 20139
#define IDC_SEL_SEARCHTIMER 20140
#define IDC_CHOOSE_MONITOR_HOR 20141
#define IDC_CHOOSE_MONITOR_HOR_LIST 20142
#define IDC_CHOOSE_MONITOR_VER 20143
#define IDC_CHOOSE_MONITOR_VER_LIST 20144
#define IDC_CHOOSE_MONITOR_TEXT 20145
#define IDC_DRVCOUNT 20200
#define IDC_TREE2 20201
@ -641,6 +647,7 @@
#define MENU_AVI2X 10725
#define MENU_AVI3X 10726
#define MENU_GEARSHIFT 10727
#define MENU_FULLSCREEN_MONITOR 10728
#define MENU_BASIC_NORMAL 11001
#define MENU_BASIC_SCAN 11002

View File

@ -1361,6 +1361,14 @@ static void OnCommand(HWND /*hDlg*/, int id, HWND /*hwndCtl*/, UINT codeNotify)
ResCreate(HORIZONTAL_ORIENTED_RES);
GameInpCheckMouse();
break;
case MENU_FULLSCREEN_MONITOR:
if (UseDialogs()) {
AudBlankSound();
ChooseMonitorCreate();
GameInpCheckMouse();
}
break;
// Vertical
case MENU_RES_ARCADE_VERTICAL:

View File

@ -840,6 +840,21 @@ static int dx9Init()
return 1;
}
nRotateGame = 0;
if (bDrvOkay) {
if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) {
if (nVidRotationAdjust & 1) {
nRotateGame |= (nVidRotationAdjust & 2);
} else {
nRotateGame |= 1;
}
}
if (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) {
nRotateGame ^= 2;
}
}
nD3DAdapter = D3DADAPTER_DEFAULT;
if (nRotateGame & 1 && VerScreen[0]) {
nD3DAdapter = dx9GetAdapter(VerScreen);
@ -1794,6 +1809,30 @@ static int dx9AltInit()
dx9AltExit();
return 1;
}
nRotateGame = 0;
if (bDrvOkay) {
if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) {
if (nVidRotationAdjust & 1) {
nRotateGame |= (nVidRotationAdjust & 2);
} else {
nRotateGame |= 1;
}
}
if (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) {
nRotateGame ^= 2;
}
}
nD3DAdapter = D3DADAPTER_DEFAULT;
if (nRotateGame & 1 && VerScreen[0]) {
nD3DAdapter = dx9GetAdapter(VerScreen);
} else {
if (HorScreen[0]) {
nD3DAdapter = dx9GetAdapter(HorScreen);
}
}
// check selected atapter
D3DDISPLAYMODE dm;