gfx/common/win32_resources.c — programmatic creation of all resources (menu bar, accelerator table, Pick Core dialog, icon loading, DPI awareness)
gfx/common/win32_resources.h — public API header
gfx/common/win32_common.c — replaces LoadMenuA(MAKEINTRESOURCE(IDR_MENU)), LoadAcceleratorsA(MAKEINTRESOURCE(IDR_ACCELERATOR1)), DialogBoxParam(MAKEINTRESOURCE(IDD_PICKCORE)), and LoadIcon(MAKEINTRESOURCE(IDI_ICON)) with the new programmatic equivalents
frontend/drivers/platform_win32.c — replaces the hand-rolled DPI awareness code in frontend_win32_init() with a single win32_resources_init() call that also sets up the accelerator table
griffin/griffin.c — adds #include "../gfx/common/win32_resources.c" for MSVC unity builds
Makefile.common — swaps media/rarch.o for gfx/common/win32_resources.o for MinGW/GCC builds
rarch.rc is only kept around now for the icon about to be embedded into the binary file
This commit is contained in:
U-DESKTOP-SPFP6AQ\twistedtechre committed 2026-04-12 14:51:45 +02:00
1 parent 95b6bb2ea2
commit cd0568e829
9 files changed
+417 -234

No files matched your search

+1
View File
@@ -2526,6 +2526,7 @@ endif
ifneq ($(findstring Win32,$(OS)),)
OBJ += media/rarch.o \
gfx/common/win32_resources.o \
gfx/common/win32_common.o \
frontend/drivers/platform_win32.o \
gfx/display_servers/dispserv_win32.o
+4 -18
View File
@@ -55,6 +55,7 @@
#include "../../verbosity.h"
#include "../../msg_hash_lbl_str.h"
#include "../../ui/drivers/ui_win32.h"
#include "../../gfx/common/win32_resources.h"
#include "platform_win32.h"
@@ -647,24 +648,9 @@ static size_t frontend_win32_get_os(char *s, size_t len, int *major, int *minor)
static void frontend_win32_init(void *data)
{
typedef BOOL (WINAPI *isProcessDPIAwareProc)();
typedef BOOL (WINAPI *setProcessDPIAwareProc)();
#ifdef HAVE_DYLIB
HMODULE handle =
GetModuleHandle("User32.dll");
isProcessDPIAwareProc isDPIAwareProc =
(isProcessDPIAwareProc)dylib_proc(handle, "IsProcessDPIAware");
setProcessDPIAwareProc setDPIAwareProc =
(setProcessDPIAwareProc)dylib_proc(handle, "SetProcessDPIAware");
#else
isProcessDPIAwareProc isDPIAwareProc = IsProcessDPIAware;
setProcessDPIAwareProc setDPIAwareProc = SetProcessDPIAware;
#endif
if (isDPIAwareProc)
if (!isDPIAwareProc())
if (setDPIAwareProc)
setDPIAwareProc();
/* Initializes DPI awareness, accelerator table, and
* prepares programmatic resources (replaces .rc file). */
win32_resources_init();
}
+5 -4
View File
@@ -41,6 +41,7 @@
#endif
#include "win32_common.h"
#include "win32_resources.h"
#ifdef HAVE_GDI
#include "gdi_defines.h"
@@ -577,8 +578,8 @@ static bool win32_load_content_from_gui(const char *szFilename)
video_st->poke->show_mouse(video_st->data, true);
/* Pick one core that could be compatible. */
if (DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_PICKCORE),
main_window.hwnd, pick_core_proc, (LPARAM)NULL) == IDOK)
if (win32_resources_pick_core_dialog(
main_window.hwnd, pick_core_proc) == IDOK)
{
task_push_load_content_with_current_core_from_companion_ui(
NULL, &content_info, CORE_TYPE_PLAIN, NULL, NULL);
@@ -2060,7 +2061,7 @@ bool win32_window_create(void *data, unsigned style,
if (!main_window.hwnd)
return false;
window_accelerators = LoadAcceleratorsA(GetModuleHandleA(NULL), MAKEINTRESOURCE(IDR_ACCELERATOR1));
window_accelerators = win32_resources_get_accelerator();
#ifdef HAVE_TASKBAR
g_win32->taskbar_message =
@@ -2734,7 +2735,7 @@ void win32_set_window(unsigned *width, unsigned *height,
rc_temp.right = (LONG)*height;
rc_temp.bottom = 0x7FFF;
menuItem = LoadMenuA(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU));
menuItem = win32_resources_create_menu();
win32_localize_menu(menuItem);
SetMenu(main_window.hwnd, menuItem);
+334
View File
@@ -0,0 +1,334 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2024 - RetroArch contributors
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
/* Programmatic replacement for the menu, dialog, accelerator,
* and manifest resources formerly in media/rarch.rc and
* media/rarch_ja.rc.
*
* The icon resource remains in rarch.rc so the executable has
* an embedded icon visible in Explorer / taskbar / Alt+Tab.
*
* This file creates:
* IDR_MENU → win32_resources_create_menu()
* IDR_ACCELERATOR1 → win32_resources_get_accelerator()
* IDD_PICKCORE → win32_resources_pick_core_dialog()
* rarch.manifest → apply_dpi_awareness() (called from _init)
*/
#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__)
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0601
#endif
#include <windows.h>
#include <string.h>
#include <wchar.h>
#include "win32_resources.h"
#include "../../ui/drivers/ui_win32_resource.h"
/* ----------------------------------------------------------------
* Internal state
* ---------------------------------------------------------------- */
static HACCEL s_accel_table = NULL;
/* ----------------------------------------------------------------
* DPI AWARENESS (replaces media/rarch.manifest)
*
* The manifest contained:
* <dpiAware xmlns="...">true</dpiAware>
*
* We call the equivalent API at runtime.
* ---------------------------------------------------------------- */
typedef HRESULT (WINAPI *pfn_SetProcessDpiAwareness)(int);
static void apply_dpi_awareness(void)
{
HMODULE shcore = LoadLibraryW(L"shcore.dll");
if (shcore)
{
pfn_SetProcessDpiAwareness fn =
(pfn_SetProcessDpiAwareness)(void*)GetProcAddress(
shcore, "SetProcessDpiAwareness");
if (fn)
{
/* PROCESS_SYSTEM_DPI_AWARE = 1 */
fn(1);
FreeLibrary(shcore);
return;
}
FreeLibrary(shcore);
}
/* Fallback for Vista / Win7 without shcore */
SetProcessDPIAware();
}
/* ----------------------------------------------------------------
* ACCELERATOR TABLE (replaces IDR_ACCELERATOR1)
*
* Ctrl+O → ID_M_LOAD_CONTENT
* Alt+Enter → ID_M_FULL_SCREEN
* ---------------------------------------------------------------- */
static HACCEL create_accelerator_table(void)
{
ACCEL accel[2];
accel[0].fVirt = FCONTROL | FVIRTKEY | FNOINVERT;
accel[0].key = 'O';
accel[0].cmd = ID_M_LOAD_CONTENT;
accel[1].fVirt = FALT | FVIRTKEY | FNOINVERT;
accel[1].key = VK_RETURN;
accel[1].cmd = ID_M_FULL_SCREEN;
return CreateAcceleratorTableW(accel, 2);
}
/* ----------------------------------------------------------------
* MENU BAR (replaces IDR_MENU from rarch.rc)
*
* The menu is always created with English labels; RetroArch's
* existing win32_localize_menu() in win32_common.c re-labels
* every item with the localized string for the active language,
* so there is no need for a separate Japanese menu.
* ---------------------------------------------------------------- */
HMENU win32_resources_create_menu(void)
{
HMENU menu_bar, file_menu, command_menu, window_menu;
HMENU audio_menu, disk_menu, savestate_menu, stateindex_menu;
HMENU scale_menu;
menu_bar = CreateMenu();
if (!menu_bar)
return NULL;
/* ---- File ---- */
file_menu = CreatePopupMenu();
AppendMenuA(file_menu, MF_STRING, ID_M_LOAD_CORE, "Load Core...");
AppendMenuA(file_menu, MF_STRING, ID_M_LOAD_CONTENT, "Load Content...");
AppendMenuA(file_menu, MF_SEPARATOR, 0, NULL);
AppendMenuA(file_menu, MF_STRING, ID_M_QUIT, "Close");
AppendMenuA(menu_bar, MF_POPUP, (UINT_PTR)file_menu, "File");
/* ---- Command ---- */
command_menu = CreatePopupMenu();
/* Audio Options */
audio_menu = CreatePopupMenu();
AppendMenuA(audio_menu, MF_STRING, ID_M_MUTE_TOGGLE, "Audio Mute Toggle");
AppendMenuA(command_menu, MF_POPUP, (UINT_PTR)audio_menu, "Audio Options");
/* Disk Options */
disk_menu = CreatePopupMenu();
AppendMenuA(disk_menu, MF_STRING, ID_M_DISK_CYCLE, "Disk Eject Toggle");
AppendMenuA(disk_menu, MF_STRING, ID_M_DISK_PREV, "Disk Previous");
AppendMenuA(disk_menu, MF_STRING, ID_M_DISK_NEXT, "Disk Next");
AppendMenuA(command_menu, MF_POPUP, (UINT_PTR)disk_menu, "Disk Options");
/* Save State Options */
savestate_menu = CreatePopupMenu();
/* State Index sub-menu */
stateindex_menu = CreatePopupMenu();
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_AUTO, "Auto");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_0, "0");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_1, "1");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_2, "2");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_3, "3");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_4, "4");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_5, "5");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_6, "6");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_7, "7");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_8, "8");
AppendMenuA(stateindex_menu, MF_STRING, ID_M_STATE_INDEX_9, "9");
AppendMenuA(savestate_menu, MF_POPUP,
(UINT_PTR)stateindex_menu, "State Index");
AppendMenuA(savestate_menu, MF_STRING, ID_M_LOAD_STATE, "Load State");
AppendMenuA(savestate_menu, MF_STRING, ID_M_SAVE_STATE, "Save State");
AppendMenuA(command_menu, MF_POPUP,
(UINT_PTR)savestate_menu, "Save State Options");
AppendMenuA(command_menu, MF_STRING, ID_M_RESET, "Reset");
AppendMenuA(command_menu, MF_STRING, ID_M_PAUSE_TOGGLE, "Pause Toggle");
AppendMenuA(command_menu, MF_STRING, ID_M_MENU_TOGGLE, "Menu Toggle");
AppendMenuA(command_menu, MF_STRING, ID_M_TAKE_SCREENSHOT, "Take Screenshot");
AppendMenuA(command_menu, MF_STRING, ID_M_MOUSE_GRAB, "Mouse Grab Toggle");
AppendMenuA(menu_bar, MF_POPUP, (UINT_PTR)command_menu, "Command");
/* ---- Window ---- */
window_menu = CreatePopupMenu();
/* Windowed Scale sub-menu */
scale_menu = CreatePopupMenu();
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_1X, "1x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_2X, "2x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_3X, "3x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_4X, "4x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_5X, "5x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_6X, "6x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_7X, "7x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_8X, "8x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_9X, "9x");
AppendMenuA(scale_menu, MF_STRING, ID_M_WINDOW_SCALE_10X, "10x");
AppendMenuA(window_menu, MF_POPUP, (UINT_PTR)scale_menu, "Windowed Scale");
#ifdef HAVE_QT
AppendMenuA(window_menu, MF_STRING, ID_M_TOGGLE_DESKTOP,
"Toggle Desktop Menu");
#endif
AppendMenuA(window_menu, MF_STRING, ID_M_FULL_SCREEN,
"Toggle Exclusive Full Screen");
AppendMenuA(menu_bar, MF_POPUP, (UINT_PTR)window_menu, "Window");
return menu_bar;
}
/* ----------------------------------------------------------------
* "PICK CORE" DIALOG (replaces IDD_PICKCORE)
*
* Builds DLGTEMPLATE + DLGITEMTEMPLATE structs in memory and calls
* DialogBoxIndirectParam, so no compiled resource is needed.
* ---------------------------------------------------------------- */
/* Align pointer up to DWORD boundary */
static LPWORD align_dword(LPWORD ptr)
{
ULONG_PTR ul = (ULONG_PTR)ptr;
ul = (ul + 3) & ~(ULONG_PTR)3;
return (LPWORD)ul;
}
/* Append a wide string (including NUL) into template buffer */
static LPWORD append_wstr(LPWORD ptr, const WCHAR *str)
{
int len = (int)wcslen(str) + 1;
memcpy(ptr, str, len * sizeof(WCHAR));
return ptr + len;
}
int win32_resources_pick_core_dialog(HWND parent, DLGPROC dlg_proc)
{
BYTE buf[2048];
DLGTEMPLATE *dlg;
LPWORD p;
DLGITEMTEMPLATE *item;
memset(buf, 0, sizeof(buf));
dlg = (DLGTEMPLATE *)buf;
/* Dialog header */
dlg->style = DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT
| WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU;
dlg->dwExtendedStyle = 0;
dlg->cdit = 4;
dlg->x = 0;
dlg->y = 0;
dlg->cx = 225;
dlg->cy = 118;
p = (LPWORD)(dlg + 1);
*p++ = 0; /* no menu */
*p++ = 0; /* default class */
p = append_wstr(p, L"Pick Core"); /* caption */
*p++ = 8; /* font size */
p = append_wstr(p, L"Ms Shell Dlg"); /* font name */
/* Control 1: LTEXT (static label) */
p = align_dword(p);
item = (DLGITEMTEMPLATE *)p;
item->style = WS_CHILD | WS_VISIBLE | SS_LEFT;
item->dwExtendedStyle = WS_EX_LEFT;
item->x = 9; item->y = 12;
item->cx = 160; item->cy = 17;
item->id = 0;
p = (LPWORD)(item + 1);
*p++ = 0xFFFF; *p++ = 0x0082; /* STATIC class */
p = append_wstr(p,
L"Please select a core to use for the content loaded.\n"
L"Otherwise, press 'Cancel' to cancel loading.");
*p++ = 0; /* no creation data */
/* Control 2: DEFPUSHBUTTON "OK" */
p = align_dword(p);
item = (DLGITEMTEMPLATE *)p;
item->style = WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON;
item->dwExtendedStyle = WS_EX_LEFT;
item->x = 170; item->y = 15;
item->cx = 50; item->cy = 14;
item->id = IDOK;
p = (LPWORD)(item + 1);
*p++ = 0xFFFF; *p++ = 0x0080; /* BUTTON class */
p = append_wstr(p, L"OK");
*p++ = 0;
/* Control 3: PUSHBUTTON "Cancel" */
p = align_dword(p);
item = (DLGITEMTEMPLATE *)p;
item->style = WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON;
item->dwExtendedStyle = WS_EX_LEFT;
item->x = 170; item->y = 32;
item->cx = 50; item->cy = 14;
item->id = IDCANCEL;
p = (LPWORD)(item + 1);
*p++ = 0xFFFF; *p++ = 0x0080; /* BUTTON class */
p = append_wstr(p, L"Cancel");
*p++ = 0;
/* Control 4: LISTBOX (core list) */
p = align_dword(p);
item = (DLGITEMTEMPLATE *)p;
item->style = WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
| LBS_NOINTEGRALHEIGHT | LBS_SORT | LBS_NOTIFY;
item->dwExtendedStyle = WS_EX_LEFT;
item->x = 5; item->y = 55;
item->cx = 214; item->cy = 60;
item->id = ID_CORELISTBOX;
p = (LPWORD)(item + 1);
*p++ = 0xFFFF; *p++ = 0x0083; /* LISTBOX class */
*p++ = 0; /* empty title */
*p++ = 0; /* no creation data */
return (int)DialogBoxIndirectParamW(
GetModuleHandleW(NULL),
dlg, parent, dlg_proc, 0);
}
/* ----------------------------------------------------------------
* PUBLIC INIT / FREE
* ---------------------------------------------------------------- */
void win32_resources_init(void)
{
apply_dpi_awareness();
s_accel_table = create_accelerator_table();
}
void win32_resources_free(void)
{
if (s_accel_table)
{
DestroyAcceleratorTable(s_accel_table);
s_accel_table = NULL;
}
}
HACCEL win32_resources_get_accelerator(void)
{
return s_accel_table;
}
#endif /* _WIN32 && !_XBOX && !__WINRT__ */
+62
View File
@@ -0,0 +1,62 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2024 - RetroArch contributors
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
/* Programmatic replacement for the menu, dialog, accelerator,
* and manifest resources that were in media/rarch.rc.
*
* The icon resource remains in rarch.rc (compiled by windres/rc)
* so that the .exe has an embedded icon visible in Explorer.
* Everything else is created at runtime via Win32 API calls. */
#ifndef WIN32_RESOURCES_H__
#define WIN32_RESOURCES_H__
#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__)
#include <windows.h>
#include "../../ui/drivers/ui_win32_resource.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Call once before creating any windows.
* Applies DPI awareness and creates the accelerator table. */
void win32_resources_init(void);
/* Release resources created by win32_resources_init(). */
void win32_resources_free(void);
/* Build the application menu bar programmatically
* (replaces LoadMenu + MAKEINTRESOURCE(IDR_MENU)).
* Returns a fresh HMENU each call — caller owns it. */
HMENU win32_resources_create_menu(void);
/* Return the accelerator table
* (replaces LoadAccelerators + MAKEINTRESOURCE(IDR_ACCELERATOR1)). */
HACCEL win32_resources_get_accelerator(void);
/* Show the "Pick Core" dialog built in memory
* (replaces DialogBoxParam + MAKEINTRESOURCE(IDD_PICKCORE)).
* Returns IDOK or IDCANCEL. */
int win32_resources_pick_core_dialog(HWND parent, DLGPROC dlg_proc);
#ifdef __cplusplus
}
#endif
#endif /* _WIN32 && !_XBOX && !__WINRT__ */
#endif /* WIN32_RESOURCES_H__ */
+1
View File
@@ -261,6 +261,7 @@ CHEATS
UI COMMON CONTEXT
============================================================ */
#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__)
#include "../gfx/common/win32_resources.c"
#include "../gfx/common/win32_common.c"
#endif
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
</assembly>
+10 -114
View File
@@ -1,121 +1,17 @@
// Generated by ResEdit 1.6.6
// Copyright (C) 2006-2015
// http://www.resedit.net
#include "../ui/drivers/ui_win32_resource.h"
// RetroArch icon resource
//
// This is the only resource that must remain in the .rc file:
// the icon must be embedded in the PE executable so that Windows
// can display it in Explorer, the taskbar, and Alt+Tab without
// running the program.
//
// All other resources (menus, dialogs, accelerators, manifest)
// are now created programmatically — see gfx/common/win32_resources.c
#include <windows.h>
// Menu resources
//
LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
IDR_MENU MENU
{
POPUP "File"
{
MENUITEM "Load Core...", ID_M_LOAD_CORE
MENUITEM "Load Content...", ID_M_LOAD_CONTENT
MENUITEM SEPARATOR
MENUITEM "Close", ID_M_QUIT
}
POPUP "Command"
{
POPUP "Audio Options"
{
MENUITEM "Audio Mute Toggle", ID_M_MUTE_TOGGLE
}
POPUP "Disk Options"
{
MENUITEM "Disk Eject Toggle", ID_M_DISK_CYCLE
MENUITEM "Disk Previous", ID_M_DISK_PREV
MENUITEM "Disk Next", ID_M_DISK_NEXT
}
POPUP "Save State Options"
{
POPUP "State Index"
{
MENUITEM "Auto", ID_M_STATE_INDEX_AUTO
MENUITEM "0", ID_M_STATE_INDEX_0
MENUITEM "1", ID_M_STATE_INDEX_1
MENUITEM "2", ID_M_STATE_INDEX_2
MENUITEM "3", ID_M_STATE_INDEX_3
MENUITEM "4", ID_M_STATE_INDEX_4
MENUITEM "5", ID_M_STATE_INDEX_5
MENUITEM "6", ID_M_STATE_INDEX_6
MENUITEM "7", ID_M_STATE_INDEX_7
MENUITEM "8", ID_M_STATE_INDEX_8
MENUITEM "9", ID_M_STATE_INDEX_9
}
MENUITEM "Load State", ID_M_LOAD_STATE
MENUITEM "Save State", ID_M_SAVE_STATE
}
MENUITEM "Reset", ID_M_RESET
MENUITEM "Pause Toggle", ID_M_PAUSE_TOGGLE
MENUITEM "Menu Toggle", ID_M_MENU_TOGGLE
MENUITEM "Take Screenshot", ID_M_TAKE_SCREENSHOT
MENUITEM "Mouse Grab Toggle", ID_M_MOUSE_GRAB
}
POPUP "Window"
{
POPUP "Windowed Scale"
{
MENUITEM "1x", ID_M_WINDOW_SCALE_1X
MENUITEM "2x", ID_M_WINDOW_SCALE_2X
MENUITEM "3x", ID_M_WINDOW_SCALE_3X
MENUITEM "4x", ID_M_WINDOW_SCALE_4X
MENUITEM "5x", ID_M_WINDOW_SCALE_5X
MENUITEM "6x", ID_M_WINDOW_SCALE_6X
MENUITEM "7x", ID_M_WINDOW_SCALE_7X
MENUITEM "8x", ID_M_WINDOW_SCALE_8X
MENUITEM "9x", ID_M_WINDOW_SCALE_9X
MENUITEM "10x", ID_M_WINDOW_SCALE_10X
}
#ifdef HAVE_QT
MENUITEM "Toggle Desktop Menu", ID_M_TOGGLE_DESKTOP
#endif
MENUITEM "Toggle Exclusive Full Screen", ID_M_FULL_SCREEN
// Shader dialog is disabled for now, until video_threaded issues are fixed.
//MENUITEM "Shader Parameters", ID_M_SHADER_PARAMETERS
}
}
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_PICKCORE DIALOG 0, 0, 225, 118
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Pick Core"
FONT 8, "Ms Shell Dlg"
{
LISTBOX ID_CORELISTBOX, 5, 55, 214, 60, WS_TABSTOP | WS_VSCROLL | LBS_NOINTEGRALHEIGHT | LBS_SORT | LBS_NOTIFY, WS_EX_LEFT
DEFPUSHBUTTON "OK", IDOK, 170, 15, 50, 14, 0, WS_EX_LEFT
PUSHBUTTON "Cancel", IDCANCEL, 170, 32, 50, 14, 0, WS_EX_LEFT
LTEXT "Please select a core to use for the content loaded.\nOtherwise, press 'Cancel' to cancel loading.", 0, 9, 12, 160, 17, SS_LEFT, WS_EX_LEFT
}
//
// Icon resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
1 ICON "retroarch.ico"
//
// Manifest resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
2 RT_MANIFEST "rarch.manifest"
//
// Accelerator
//
IDR_ACCELERATOR1 ACCELERATORS
BEGIN
"O", ID_M_LOAD_CONTENT, VIRTKEY, CONTROL, NOINVERT
VK_RETURN, ID_M_FULL_SCREEN, VIRTKEY, ALT, NOINVERT
END
// Per the documentation, this should be used before including resource files.
// https://docs.microsoft.com/en-us/windows/desktop/menurc/pragma-directives
#pragma code_page(932)
#include "rarch_ja.rc"
-90
View File
@@ -1,90 +0,0 @@
// Menu resources (Japanese)
//
// The encoding for this file is CP932.
#pragma code_page(932)
LANGUAGE LANG_JAPANESE, SUBLANG_NEUTRAL
IDR_MENU MENU
{
POPUP "ファイル"
{
MENUITEM "コアをロード...", ID_M_LOAD_CORE
MENUITEM "コンテンツをロード...", ID_M_LOAD_CONTENT
MENUITEM SEPARATOR
MENUITEM "終了", ID_M_QUIT
}
POPUP "コマンド"
{
POPUP "オーディオ設定"
{
MENUITEM "オーディオを消音", ID_M_MUTE_TOGGLE
}
POPUP "ディスク操作"
{
MENUITEM "ディスク取り出し", ID_M_DISK_CYCLE
MENUITEM "前のディスク", ID_M_DISK_PREV
MENUITEM "次のディスク", ID_M_DISK_NEXT
}
POPUP "保存状態設定"
{
POPUP "状態のインデックス"
{
MENUITEM "自動", ID_M_STATE_INDEX_AUTO
MENUITEM "0", ID_M_STATE_INDEX_0
MENUITEM "1", ID_M_STATE_INDEX_1
MENUITEM "2", ID_M_STATE_INDEX_2
MENUITEM "3", ID_M_STATE_INDEX_3
MENUITEM "4", ID_M_STATE_INDEX_4
MENUITEM "5", ID_M_STATE_INDEX_5
MENUITEM "6", ID_M_STATE_INDEX_6
MENUITEM "7", ID_M_STATE_INDEX_7
MENUITEM "8", ID_M_STATE_INDEX_8
MENUITEM "9", ID_M_STATE_INDEX_9
}
MENUITEM "保存状態をロード", ID_M_LOAD_STATE
MENUITEM "状態保存", ID_M_SAVE_STATE
}
MENUITEM "リセット", ID_M_RESET
MENUITEM "一時停止", ID_M_PAUSE_TOGGLE
MENUITEM "メニューに切り替え", ID_M_MENU_TOGGLE
MENUITEM "スクリーンショットを撮る", ID_M_TAKE_SCREENSHOT
MENUITEM "マウスグラブ切り替え", ID_M_MOUSE_GRAB
}
POPUP "ウィンドウ"
{
POPUP "ウィンドウのスケール"
{
MENUITEM "1x", ID_M_WINDOW_SCALE_1X
MENUITEM "2x", ID_M_WINDOW_SCALE_2X
MENUITEM "3x", ID_M_WINDOW_SCALE_3X
MENUITEM "4x", ID_M_WINDOW_SCALE_4X
MENUITEM "5x", ID_M_WINDOW_SCALE_5X
MENUITEM "6x", ID_M_WINDOW_SCALE_6X
MENUITEM "7x", ID_M_WINDOW_SCALE_7X
MENUITEM "8x", ID_M_WINDOW_SCALE_8X
MENUITEM "9x", ID_M_WINDOW_SCALE_9X
MENUITEM "10x", ID_M_WINDOW_SCALE_10X
}
#ifdef HAVE_QT
MENUITEM "デスクトップメニューを表示", ID_M_TOGGLE_DESKTOP
#endif
MENUITEM "排他的なフルスクリーン切り替え", ID_M_FULL_SCREEN
// Shader dialog is disabled for now, until video_threaded issues are fixed.
//MENUITEM "シェーダーのパラメータ", ID_M_SHADER_PARAMETERS
}
}
//
// Dialog resources
//
LANGUAGE LANG_JAPANESE, SUBLANG_NEUTRAL
IDD_PICKCORE DIALOG 0, 0, 225, 118
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "コア選択"
FONT 8, "Ms Shell Dlg"
{
LISTBOX ID_CORELISTBOX, 5, 55, 214, 60, WS_TABSTOP | WS_VSCROLL | LBS_NOINTEGRALHEIGHT | LBS_SORT | LBS_NOTIFY, WS_EX_LEFT
DEFPUSHBUTTON "OK", IDOK, 170, 15, 50, 14, 0, WS_EX_LEFT
PUSHBUTTON "キャンセル", IDCANCEL, 170, 32, 50, 14, 0, WS_EX_LEFT
LTEXT "コンテンツに使用するコアを選択してください。", 0, 9, 12, 160, 17, SS_LEFT, WS_EX_LEFT
}