Merge branch 'master' into audio

This commit is contained in:
Jasmine Iwanek
2022-01-15 19:38:56 -05:00
45 changed files with 652 additions and 188 deletions

View File

@@ -1068,7 +1068,13 @@ void update_mouse_msg()
if (wcp) /* remove parentheses */
*(wcp - 1) = L'\0';
mbstowcs(wcpu, cpu_s->name, strlen(cpu_s->name)+1);
#ifdef _WIN32
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i%%%% - %ls",
plat_get_string(IDS_2077));
swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i%%%% - %ls",
(mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079));
wcsncpy(mouse_msg[2], L"%i%%", sizeof_w(mouse_msg[2]));
#else
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls",
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu,
plat_get_string(IDS_2077));
@@ -1077,6 +1083,7 @@ void update_mouse_msg()
(mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079));
swprintf(mouse_msg[2], sizeof_w(mouse_msg[2]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls",
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu);
#endif
}
void

View File

@@ -737,8 +737,8 @@ cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, in
static int
track_type_is_valid(uint8_t id, int type, int flags, int audio, int mode2)
{
if (!(flags & 0x70)) { /* 0x00/0x08/0x80/0x88 are illegal modes */
cdrom_log("CD-ROM %i: [Any Mode] 0x00/0x08/0x80/0x88 are illegal modes\n", id);
if (!(flags & 0x70) && (flags & 0xf8)) { /* 0x08/0x80/0x88 are illegal modes */
cdrom_log("CD-ROM %i: [Any Mode] 0x08/0x80/0x88 are illegal modes\n", id);
return 0;
}
@@ -1031,8 +1031,8 @@ cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, int c
memset(raw_buffer, 0, 2448);
memset(extra_buffer, 0, 296);
if (!(cdrom_sector_flags & 0xf0)) { /* 0x00 and 0x08 are illegal modes */
cdrom_log("CD-ROM %i: [Mode 1] 0x00 and 0x08 are illegal modes\n", dev->id);
if ((cdrom_sector_flags & 0xf8) == 0x08) { /* 0x08 is an illegal mode */
cdrom_log("CD-ROM %i: [Mode 1] 0x08 is an illegal mode\n", dev->id);
return 0;
}

View File

@@ -561,6 +561,7 @@ load_general(void)
kbd_req_capture = config_get_int(cat, "kbd_req_capture", 0);
hide_status_bar = config_get_int(cat, "hide_status_bar", 0);
hide_tool_bar = config_get_int(cat, "hide_tool_bar", 0);
confirm_reset = config_get_int(cat, "confirm_reset", 1);
confirm_exit = config_get_int(cat, "confirm_exit", 1);
@@ -2036,6 +2037,7 @@ config_load(void)
kbd_req_capture = 0;
hide_status_bar = 0;
hide_tool_bar = 0;
scale = 1;
machine = machine_get_machine_from_internal_name("ibmpc");
dpi_scale = 1;
@@ -2222,6 +2224,11 @@ save_general(void)
else
config_delete_var(cat, "hide_status_bar");
if (hide_tool_bar != 0)
config_set_int(cat, "hide_tool_bar", hide_tool_bar);
else
config_delete_var(cat, "hide_tool_bar");
if (confirm_reset != 1)
config_set_int(cat, "confirm_reset", confirm_reset);
else

View File

@@ -127,6 +127,13 @@
#define IDS_2151 2151 // "Cartridge images (*.JRC)\0*.JRC\0..."
#define IDS_2152 2152 // "Error initializing renderer"
#define IDS_2153 2153 // "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
#define IDS_2154 2154 // "Resume execution"
#define IDS_2155 2155 // "Pause execution"
#define IDS_2156 2156 // "Press Ctrl+Alt+Del"
#define IDS_2157 2157 // "Press Ctrl+Alt+Esc"
#define IDS_2158 2158 // "Hard reset"
#define IDS_2159 2159 // "ACPI shutdown"
#define IDS_2160 2160 // "Settings"
#define IDS_4096 4096 // "Hard disk (%s)"
#define IDS_4097 4097 // "%01i:%01i"

View File

@@ -90,7 +90,7 @@ extern int update_icons;
extern int unscaled_size_x, /* current unscaled size X */
unscaled_size_y; /* current unscaled size Y */
extern int kbd_req_capture, hide_status_bar;
extern int kbd_req_capture, hide_status_bar, hide_tool_bar;
/* System-related functions. */
extern char *fix_exe_path(char *str);

View File

@@ -313,6 +313,7 @@
#endif
#define IDM_CONFIG 40020
#define IDM_VID_HIDE_STATUS_BAR 40021
#define IDM_VID_HIDE_TOOLBAR 40022
#define IDM_UPDATE_ICONS 40030
#define IDM_SND_GAIN 40031
#define IDM_VID_RESIZE 40040

View File

@@ -107,7 +107,7 @@ extern HANDLE ghMutex;
extern HICON hIcon[256];
extern int dpi;
extern RECT oldclip;
extern int sbar_height, user_resize;
extern int sbar_height, tbar_height, user_resize;
extern int acp_utf8;
// extern int status_is_open;
@@ -213,6 +213,13 @@ extern void StatusBarCreate(HWND hwndParent, uintptr_t idStatus, HINSTANCE hInst
extern int MediaMenuHandler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
/* Functions in win_toolbar.c */
extern HWND hwndRebar;
extern void ToolBarCreate(HWND hwndParent, HINSTANCE hInst);
extern void ToolBarLoadIcons();
extern void ToolBarUpdatePause(int paused);
/* Functions in win_dialog.c: */
/* Pass NULL in the title param to use the default title. */
extern int file_dlg_w(HWND hwnd, WCHAR *f, WCHAR *fn, WCHAR *title, int save);

View File

@@ -1623,7 +1623,22 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
dev->sector_len -= dev->sector_pos;
dev->sector_len++;
msf = 1;
if ((cdb[9] & 0xf8) == 0x08) {
/* 0x08 is an illegal mode */
scsi_cdrom_invalid_field(dev);
return;
}
/* If all the flag bits are cleared, then treat it as a non-data command. */
if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00))
dev->sector_len = 0;
else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) {
scsi_cdrom_invalid_field(dev);
return;
}
break;
case GPCMD_READ_CD_OLD:
case GPCMD_READ_CD:
@@ -1632,6 +1647,20 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
msf = 0;
if ((cdb[9] & 0xf8) == 0x08) {
/* 0x08 is an illegal mode */
scsi_cdrom_invalid_field(dev);
return;
}
/* If all the flag bits are cleared, then treat it as a non-data command. */
if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00))
dev->sector_len = 0;
else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) {
scsi_cdrom_invalid_field(dev);
return;
}
break;
}

View File

@@ -40,6 +40,7 @@ int rctrl_is_lalt;
int update_icons;
int kbd_req_capture;
int hide_status_bar;
int hide_tool_bar;
int fixed_size_x = 640;
int fixed_size_y = 480;
extern int title_set;

View File

@@ -139,6 +139,13 @@ END
185 ICON DISCARDABLE ICON_PATH "icons/mo_empty_active.ico"
192 ICON DISCARDABLE ICON_PATH "icons/cassette_empty.ico"
193 ICON DISCARDABLE ICON_PATH "icons/cassette_empty_active.ico"
200 ICON DISCARDABLE ICON_PATH "icons/run.ico"
201 ICON DISCARDABLE ICON_PATH "icons/pause.ico"
202 ICON DISCARDABLE ICON_PATH "icons/send_cad.ico"
203 ICON DISCARDABLE ICON_PATH "icons/send_cae.ico"
204 ICON DISCARDABLE ICON_PATH "icons/hard_reset.ico"
205 ICON DISCARDABLE ICON_PATH "icons/acpi_shutdown.ico"
206 ICON DISCARDABLE ICON_PATH "icons/settings.ico"
232 ICON DISCARDABLE ICON_PATH "icons/cartridge_empty.ico"
240 ICON DISCARDABLE ICON_PATH "icons/machine.ico"
241 ICON DISCARDABLE ICON_PATH "icons/display.ico"

View File

@@ -21,7 +21,7 @@ add_library(plat OBJECT win.c win_dynld.c win_cdrom.c win_keyboard.c
add_library(ui OBJECT win_ui.c win_icon.c win_stbar.c win_sdl.c win_dialog.c win_about.c
win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c
win_jsconf.c win_media_menu.c win_preferences.c win_discord.c glad.c win_opengl.c
win_opengl_glslp.c 86Box.rc)
win_opengl_glslp.c win_toolbar.c 86Box.rc)
if(NOT CPPTHREADS)
target_sources(plat PRIVATE win_thread.c)

View File

@@ -692,7 +692,7 @@ UIOBJ := win_ui.o win_icon.o win_stbar.o win_discord.o \
win_dialog.o win_about.o \
win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_preferences.o \
win_new_floppy.o win_jsconf.o \
win_media_menu.o
win_media_menu.o win_toolbar.o
ifeq ($(DINPUT), y)
PLATOBJ += win_joystick.o

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
src/win/icons/pause.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
src/win/icons/run.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
src/win/icons/send_cad.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
src/win/icons/send_cae.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
src/win/icons/settings.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Zobrazení"
BEGIN
MENUITEM "&Schovat stavový řádek", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Schovat panel &nástrojů", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Měnitelná velikost okna", IDM_VID_RESIZE
MENUITEM "&Pamatovat velikost a pozici", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Obrazy cartridge (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Všechny soubory (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Obnovit"
IDS_2155 "Pozastavit"
IDS_2156 "Stisknout Ctrl+Alt+Delete"
IDS_2157 "Stisknout Ctrl+Alt+Esc"
IDS_2158 "Resetovat"
IDS_2159 "Vypnout skrze rozhraní ACPI"
IDS_2160 "Nastavení"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Ansicht"
BEGIN
MENUITEM "&Statusleiste ausblenden", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Größenverstellbares Fenster", IDM_VID_RESIZE
MENUITEM "&Größe && Position merken", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Cartridgeimages (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Alle Dateien (*.*)\0*.*\0"
IDS_2152 "Fehler bei der Rendererinitialisierung"
IDS_2153 "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&View"
BEGIN
MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Resizeable window", IDM_VID_RESIZE
MENUITEM "R&emember size && position", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&View"
BEGIN
MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Resizeable window", IDM_VID_RESIZE
MENUITEM "R&emember size && position", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Vista"
BEGIN
MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Ventana redimensionable", IDM_VID_RESIZE
MENUITEM "&Recordar tamaño y posición", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Imágenes de Cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Näytä"
BEGIN
MENUITEM "&Piilota tilapalkki", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Salli koon muuttaminen", IDM_VID_RESIZE
MENUITEM "&Muista koko ja sijainti", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "ROM-moduulikuvat (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Kaikki tiedostot (*.*)\0*.*\0"
IDS_2152 "Virhe renderöijän alustuksessa"
IDS_2153 "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Vue"
BEGIN
MENUITEM "&Masquer la barre de status", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "Fenètre &Retaillable", IDM_VID_RESIZE
MENUITEM "S&auvegarder taille && position", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Images cartouche (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tous les fichiers (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Pogled"
BEGIN
MENUITEM "&Sakrij statusni redak", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Prozor s promjenjivim veličinama", IDM_VID_RESIZE
MENUITEM "&Zapamtite veličinu i položaj", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Slike kasete (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Sve datoteke (*.*)\0*.*\0"
IDS_2152 "Nije moguće inicijalizirati renderer"
IDS_2153 "Nije moguće inicijalizirati OpenGL (3.0 jezgra) renderer. Molimte koristite drugi renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -35,6 +35,7 @@ BEGIN
POPUP "&Nézet"
BEGIN
MENUITEM "Állapotsor &elrejtése", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Átméretezhető ablak", IDM_VID_RESIZE
MENUITEM "Méret és pozíció &megjegyzése", IDM_VID_REMEMBER
@@ -534,6 +535,13 @@ BEGIN
IDS_2151 "ROM-kazetta képek (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Minden fájl (*.*)\0*.*\0"
IDS_2152 "Hiba történt a renderelő inicializálásakor"
IDS_2153 "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Visualizza"
BEGIN
MENUITEM "&Nascondi barra di stato", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Finestra ridimensionabile", IDM_VID_RESIZE
MENUITEM "R&icorda dimensioni e posizione", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Immagini cartuccia (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tutti i file (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -20,7 +20,7 @@ BEGIN
MENUITEM "キーボードはキャプチャが必要(&K)", IDM_ACTION_KBD_REQ_CAPTURE
MENUITEM "右CTRLを左ALTへ(&R)", IDM_ACTION_RCTRL_IS_LALT
MENUITEM SEPARATOR
MENUITEM "再起動(&H)...", IDM_ACTION_HRESET
MENUITEM "ハードリセット(&H)...", IDM_ACTION_HRESET
MENUITEM "Ctrl+Alt+Del(&C)\tCtrl+F12", IDM_ACTION_RESET_CAD
MENUITEM SEPARATOR
MENUITEM "Ctrl+Alt+Esc(&E)", IDM_ACTION_CTRL_ALT_ESC
@@ -32,9 +32,10 @@ BEGIN
POPUP "表示(&V)"
BEGIN
MENUITEM "ステータスバーを隠す(&H)", IDM_VID_HIDE_STATUS_BAR
MENUITEM "ツールバーを隠す(&T)", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "ウィンドウのサイズを変更可能にする(&R)", IDM_VID_RESIZE
MENUITEM "ウィンドウのサイズと位置を記憶する(&E)", IDM_VID_REMEMBER
MENUITEM "ウィンドウのサイズをリサイズ可能(&R)", IDM_VID_RESIZE
MENUITEM "ウィンドウのサイズと位置を記憶(&E)", IDM_VID_REMEMBER
MENUITEM SEPARATOR
POPUP "レンダラー(&N)"
BEGIN
@@ -47,9 +48,9 @@ BEGIN
#endif
END
MENUITEM SEPARATOR
MENUITEM "ウィンドウのサイズを指定する...", IDM_VID_SPECIFY_DIM
MENUITEM "画面比率を4:3に合わせる(&O)", IDM_VID_FORCE43
POPUP "ウィンドウの倍率(&W)"
MENUITEM "ウィンドウのサイズを指定...", IDM_VID_SPECIFY_DIM
MENUITEM "4:3アスペクト比を固定(&O)", IDM_VID_FORCE43
POPUP "ウィンドウの表示倍率(&W)"
BEGIN
MENUITEM "0.5x(&0)", IDM_VID_SCALE_1X
MENUITEM "1x(&1)", IDM_VID_SCALE_2X
@@ -58,53 +59,53 @@ BEGIN
END
POPUP "フィルター方式"
BEGIN
MENUITEM "ニアレストネイバー(&N)", IDM_VID_FILTER_NEAREST
MENUITEM "リニア補間(&L)", IDM_VID_FILTER_LINEAR
MENUITEM "最近傍補間(&N)", IDM_VID_FILTER_NEAREST
MENUITEM "線形補間(&L)", IDM_VID_FILTER_LINEAR
END
MENUITEM "DPIスケー(&D)", IDM_VID_HIDPI
MENUITEM "HiDPIスケーリング(&D)", IDM_VID_HIDPI
MENUITEM SEPARATOR
MENUITEM "フルスクリーン(&F)\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN
POPUP "フルスクリーンの比率(&S)"
POPUP "フルスクリーンのスケール(&S)"
BEGIN
MENUITEM "フルスクリーンに拡大(&F)", IDM_VID_FS_FULL
MENUITEM "4:3(&4)", IDM_VID_FS_43
MENUITEM "正方形ピクセル(維持)(&S)", IDM_VID_FS_KEEPRATIO
MENUITEM "数倍(&I)", IDM_VID_FS_INT
MENUITEM "正方形ピクセル(アスペクト比を維持)(&S)", IDM_VID_FS_KEEPRATIO
MENUITEM "数倍(&I)", IDM_VID_FS_INT
END
POPUP "E&GA/(S)VGAの設定"
BEGIN
MENUITEM "色反転VGAモニター(&I)", IDM_VID_INVERT
POPUP "VGA画面タイプ(&T)"
MENUITEM "色反転(&I)", IDM_VID_INVERT
POPUP "画面タイプ(&T)"
BEGIN
MENUITEM "RGBカラー(&C)", IDM_VID_GRAY_RGB
MENUITEM "RGBグレースケール(&R)", IDM_VID_GRAY_MONO
MENUITEM "橙色モニター(&A)", IDM_VID_GRAY_AMBER
MENUITEM "緑色モニター(&G)", IDM_VID_GRAY_GREEN
MENUITEM "白色モニター(&W)", IDM_VID_GRAY_WHITE
MENUITEM "RGB(カラー)(&C)", IDM_VID_GRAY_RGB
MENUITEM "RGB(グレースケール)(&R)", IDM_VID_GRAY_MONO
MENUITEM "モニター(琥珀色)(&A)", IDM_VID_GRAY_AMBER
MENUITEM "モニター(緑色)(&G)", IDM_VID_GRAY_GREEN
MENUITEM "モニター(白色)(&W)", IDM_VID_GRAY_WHITE
END
POPUP "グレースケール表示方式(&C)"
POPUP "グレースケール変換タイプ(&C)"
BEGIN
MENUITEM "BT601 (NTSC/PAL)(&6)", IDM_VID_GRAYCT_601
MENUITEM "BT709 (HDTV)(&7)", IDM_VID_GRAYCT_709
MENUITEM "平均(&A)", IDM_VID_GRAYCT_AVE
MENUITEM "平均(&A)", IDM_VID_GRAYCT_AVE
END
END
MENUITEM SEPARATOR
MENUITEM "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)", IDM_VID_OVERSCAN
MENUITEM "単色モニター用対比転換(&M)", IDM_VID_CGACON
MENUITEM "単色モニター用コントラストを変更(&M)", IDM_VID_CGACON
END
MENUITEM "メディア(&M)", IDM_MEDIA
POPUP "ツール(&T)"
BEGIN
MENUITEM "設定(&S)...", IDM_CONFIG
MENUITEM "ステータスバーのアイコンを更新する(&U)", IDM_UPDATE_ICONS
MENUITEM "ステータスバーのアイコンを更新(&U)", IDM_UPDATE_ICONS
MENUITEM SEPARATOR
MENUITEM "スクリーンショットを撮る(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT
MENUITEM SEPARATOR
MENUITEM "環境設定(&P)...", IDM_PREFERENCES
MENUITEM "Discordとの連携を可能にする(&D)", IDM_DISCORD
MENUITEM "Discordとの連携機能(&D)", IDM_DISCORD
MENUITEM SEPARATOR
MENUITEM "音量ゲイン(&G)...", IDM_SND_GAIN
MENUITEM "音量を調節(&G)...", IDM_SND_GAIN
#ifdef MTR_ENABLED
MENUITEM SEPARATOR
MENUITEM "トレース開始\tCtrl+T", IDM_ACTION_BEGIN_TRACE
@@ -115,35 +116,35 @@ BEGIN
POPUP "ログ(&L)"
BEGIN
# ifdef ENABLE_BUSLOGIC_LOG
MENUITEM "BusLogicのログを有効にする\tCtrl+F4", IDM_LOG_BUSLOGIC
MENUITEM "BusLogicのログを有効\tCtrl+F4", IDM_LOG_BUSLOGIC
# endif
# ifdef ENABLE_CDROM_LOG
MENUITEM "CD-ROMのログを有効にする\tCtrl+F5", IDM_LOG_CDROM
MENUITEM "CD-ROMのログを有効\tCtrl+F5", IDM_LOG_CDROM
# endif
# ifdef ENABLE_D86F_LOG
MENUITEM "フロッピー(86F)のログを有効にする\tCtrl+F6", IDM_LOG_D86F
MENUITEM "フロッピー(86F)のログを有効\tCtrl+F6", IDM_LOG_D86F
# endif
# ifdef ENABLE_FDC_LOG
MENUITEM "フロッピーコントローラーのログを有効にする\tCtrl+F7", IDM_LOG_FDC
MENUITEM "フロッピーコントローラーのログを有効\tCtrl+F7", IDM_LOG_FDC
# endif
# ifdef ENABLE_IDE_LOG
MENUITEM "IDEのログを有効にする\tCtrl+F8", IDM_LOG_IDE
MENUITEM "IDEのログを有効\tCtrl+F8", IDM_LOG_IDE
# endif
# ifdef ENABLE_SERIAL_LOG
MENUITEM "シリアルポートのログを有効にする\tCtrl+F3", IDM_LOG_SERIAL
MENUITEM "シリアルポートのログを有効\tCtrl+F3", IDM_LOG_SERIAL
# endif
# ifdef ENABLE_NIC_LOG
MENUITEM "ネットワークのログを有効にする\tCtrl+F9", IDM_LOG_NIC
MENUITEM "ネットワークのログを有効\tCtrl+F9", IDM_LOG_NIC
# endif
# ifdef ENABLE_LOG_COMMANDS
# ifdef ENABLE_LOG_TOGGLES
MENUITEM SEPARATOR
# endif
# ifdef ENABLE_LOG_BREAKPOINT
MENUITEM "ブレークポイントのログを有効にする(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT
MENUITEM "ブレークポイントのログを有効(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT
# endif
# ifdef ENABLE_VRAM_DUMP
MENUITEM "ビデオRAMのダンプを有効にする(&V)\tCtrl+F1", IDM_DUMP_VRAM
MENUITEM "ビデオRAMのダンプを有効(&V)\tCtrl+F1", IDM_DUMP_VRAM
# endif
# endif
END
@@ -151,7 +152,7 @@ BEGIN
POPUP "ヘルプ(&H)"
BEGIN
MENUITEM "ドキュメント(&D)...", IDM_DOCS
MENUITEM "86Boxについて(&A)...", IDM_ABOUT
MENUITEM "86Boxのバージョン情報(&A)...", IDM_ABOUT
END
END
@@ -164,15 +165,15 @@ CassetteSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "新規イメージ(&N)...", IDM_CASSETTE_IMAGE_NEW
MENUITEM "新規イメージ(&N)...", IDM_CASSETTE_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "既存のイメージ(&E)...", IDM_CASSETTE_IMAGE_EXISTING
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
MENUITEM "既存のイメージを開く(&E)...", IDM_CASSETTE_IMAGE_EXISTING
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "録音する(&R)", IDM_CASSETTE_RECORD
MENUITEM "再生する(&P)", IDM_CASSETTE_PLAY
MENUITEM "録音(&R)", IDM_CASSETTE_RECORD
MENUITEM "再生(&P)", IDM_CASSETTE_PLAY
MENUITEM "冒頭に巻き戻す(&R)", IDM_CASSETTE_REWIND
MENUITEM "最後まで早送りする(&F)", IDM_CASSETTE_FAST_FORWARD
MENUITEM "最後まで早送り(&F)", IDM_CASSETTE_FAST_FORWARD
MENUITEM SEPARATOR
MENUITEM "取り出す(&J)", IDM_CASSETTE_EJECT
END
@@ -192,12 +193,12 @@ FloppySubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "新規イメージ(&N)...", IDM_FLOPPY_IMAGE_NEW
MENUITEM "新規イメージ(&N)...", IDM_FLOPPY_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "既存のイメージ(&E)...", IDM_FLOPPY_IMAGE_EXISTING
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
MENUITEM "既存のイメージを開く(&E)...", IDM_FLOPPY_IMAGE_EXISTING
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "86Fへのエクスポート(&X)...", IDM_FLOPPY_EXPORT_TO_86F
MENUITEM "86Fイメージにエクスポート(&X)...", IDM_FLOPPY_EXPORT_TO_86F
MENUITEM SEPARATOR
MENUITEM "取り出す(&J)", IDM_FLOPPY_EJECT
END
@@ -210,7 +211,7 @@ BEGIN
MENUITEM "ミュート(&M)", IDM_CDROM_MUTE
MENUITEM SEPARATOR
MENUITEM "空(&M)", IDM_CDROM_EMPTY
MENUITEM "前のイメージを再読み込み (&R)", IDM_CDROM_RELOAD
MENUITEM "前のイメージを再読み込み(&R)", IDM_CDROM_RELOAD
MENUITEM SEPARATOR
MENUITEM "イメージ(&I)", IDM_CDROM_IMAGE
END
@@ -220,13 +221,13 @@ ZIPSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "新規イメージ(&N)...", IDM_ZIP_IMAGE_NEW
MENUITEM "新規イメージ(&N)...", IDM_ZIP_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "既存のイメージ(&E)...", IDM_ZIP_IMAGE_EXISTING
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_ZIP_IMAGE_EXISTING_WP
MENUITEM "既存のイメージを開く(&E)...", IDM_ZIP_IMAGE_EXISTING
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_ZIP_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "取り出す(&J)", IDM_ZIP_EJECT
MENUITEM "前のイメージを再読み込み (&R)", IDM_ZIP_RELOAD
MENUITEM "前のイメージを再読み込み(&R)", IDM_ZIP_RELOAD
END
END
@@ -234,13 +235,13 @@ MOSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "新規イメージ(&N)...", IDM_MO_IMAGE_NEW
MENUITEM "新規イメージ(&N)...", IDM_MO_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "既存のイメージ(&E)...", IDM_MO_IMAGE_EXISTING
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_MO_IMAGE_EXISTING_WP
MENUITEM "既存のイメージを開く(&E)...", IDM_MO_IMAGE_EXISTING
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_MO_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "取り出す(&J)", IDM_MO_EJECT
MENUITEM "前のイメージを再読み込み (&R)", IDM_MO_RELOAD
MENUITEM "前のイメージを再読み込み(&R)", IDM_MO_RELOAD
END
END
@@ -248,16 +249,16 @@ VidGLSubMenu MENU DISCARDABLE
BEGIN
POPUP "目標フレームレート(&F)"
BEGIN
MENUITEM "ビデオと同期(&S)", IDM_VID_GL_FPS_BLITTER
MENUITEM "ビデオと同期(&S)", IDM_VID_GL_FPS_BLITTER
MENUITEM "25 fps(&2)", IDM_VID_GL_FPS_25
MENUITEM "30 fps(&3)", IDM_VID_GL_FPS_30
MENUITEM "50 fps(&5)", IDM_VID_GL_FPS_50
MENUITEM "60 fps(&6)", IDM_VID_GL_FPS_60
MENUITEM "75 fps(&7)", IDM_VID_GL_FPS_75
END
MENUITEM "VSync(&V)", IDM_VID_GL_VSYNC
MENUITEM "シェーダ選択(&S)...", IDM_VID_GL_SHADER
MENUITEM "シェーダ削除(&R)", IDM_VID_GL_NOSHADER
MENUITEM "垂直同期(VSync)(&V)", IDM_VID_GL_VSYNC
MENUITEM "シェーダーを選択(&S)...", IDM_VID_GL_SHADER
MENUITEM "シェーダーを削除(&R)", IDM_VID_GL_NOSHADER
END
@@ -282,9 +283,9 @@ END
#define STR_GAIN "ゲイン値"
#define STR_FILE_NAME "ファイル名:"
#define STR_DISK_SIZE "ディスクの容量:"
#define STR_RPM_MODE "RPMモード:"
#define STR_PROGRESS "進行:"
#define STR_DISK_SIZE "ディスクサイズ:"
#define STR_RPM_MODE "回転数モード:"
#define STR_PROGRESS "進行状況:"
#define STR_WIDTH "幅:"
#define STR_HEIGHT "高さ:"
@@ -299,11 +300,11 @@ END
#define STR_WAIT_STATES "待機状態:"
#define STR_MB "MB"
#define STR_MEMORY "メモリ:"
#define STR_TIME_SYNC "時刻同期"
#define STR_DISABLED "使用しない"
#define STR_ENABLED_LOCAL "使用する (現地時間)"
#define STR_ENABLED_UTC "使用する (UTC)"
#define STR_DYNAREC "動的コンパイ"
#define STR_TIME_SYNC "時刻同期機能"
#define STR_DISABLED "無効にする"
#define STR_ENABLED_LOCAL "有効にする (現地時間)"
#define STR_ENABLED_UTC "有効にする (UTC)"
#define STR_DYNAREC "動的コンパイ"
#define STR_VIDEO "ビデオカード:"
#define STR_VOODOO "Voodooグラフィック"
@@ -318,15 +319,15 @@ END
#define STR_SOUND "サウンドカード:"
#define STR_MIDI "MIDI出力デバイス:"
#define STR_MIDI_IN "MIDI入力デバイス:"
#define STR_MPU401 "MPU-401を単独使用"
#define STR_MPU401 "独立型MPU-401"
#define STR_SSI "Innovation SSI-2001"
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32サウンドを使用"
#define STR_FLOAT "FLOAT32サウンドを使用する"
#define STR_NET_TYPE "ネットワークタイプ:"
#define STR_PCAP "PCapデバイス:"
#define STR_NET "ネットワークカード:"
#define STR_NET "ネットワークアダプター:"
#define STR_LPT1 "LPT1デバイス:"
#define STR_LPT2 "LPT2デバイス:"
@@ -362,8 +363,8 @@ END
#define STR_SECTORS "セクター:"
#define STR_HEADS "ヘッド:"
#define STR_CYLS "シリンダー:"
#define STR_SIZE_MB "容量(MB):"
#define STR_TYPE "形式:"
#define STR_SIZE_MB "サイズ(MB):"
#define STR_TYPE "タイプ:"
#define STR_IMG_FORMAT "イメージ形式:"
#define STR_BLOCK_SIZE "ブロックサイズ:"
@@ -405,19 +406,19 @@ BEGIN
IDS_2053 "速度"
IDS_2054 "ZIP %03i %i (%s): %ls"
IDS_2055 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
IDS_2056 "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットを<a href=""https://github.com/86Box/roms/releases/latest"">ダウンロード</a>して、romsディレクトリに解凍してください。"
IDS_2056 "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットを<a href=""https://github.com/86Box/roms/releases/latest"">ダウンロード</a>して、romsディレクトリに解凍してください。"
IDS_2057 "(空)"
IDS_2058 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0すべてのファイル (*.*)\0*.*\0"
IDS_2059 "高速"
IDS_2060 "オン"
IDS_2061 "オフ"
IDS_2062 "すべてのイメージ (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本的なセクターイメージ (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0表面イメージ (*.86F)\0*.86F\0"
IDS_2063 "roms/machinesディレクトリにROMがないため、マシン%hsは使用できません。使用可能なマシンに切り替えます。"
IDS_2063 "roms/machinesディレクトリにROMがないため、マシン%hsは使用できません。使用可能なマシンに切り替えます。"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード%hsは使用できません。使用可能なビデオカードに切り替えます。"
IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード%hsは使用できません。使用可能なビデオカードに切り替えます。"
IDS_2065 "マシン"
IDS_2066 "画面表示"
IDS_2067 "入力デバイス"
@@ -428,11 +429,11 @@ BEGIN
IDS_2072 "ハードディスク"
IDS_2073 "フロッピー/CD-ROMドライブ"
IDS_2074 "その他のリムーバブルデバイス"
IDS_2075 "その他の周辺機器"
IDS_2075 "その他の周辺装置"
IDS_2076 "表面イメージ (*.86F)\0*.86F\0"
IDS_2077 "クリックするとマウスを直接入力します"
IDS_2078 "F12+F8キーでマウスの直接入力を解します"
IDS_2079 "F12+F8キーまたは中クリックでマウスの直接入力を解します"
IDS_2077 "クリックするとマウスをキャプチャします"
IDS_2078 "F8+F12キーでマウスを解します"
IDS_2079 "F8+F12キーまたは中ボタンでマウスを解します"
END
STRINGTABLE DISCARDABLE
@@ -449,42 +450,42 @@ BEGIN
IDS_2089 "ビデオレンダラーが初期化できません。"
IDS_2090 "既定値"
IDS_2091 "%iつの待機状態"
IDS_2092 "形式"
IDS_2092 "タイプ"
IDS_2093 "PCapのセットアップに失敗しました"
IDS_2094 "PCapデバイスがありません"
IDS_2095 "不正なPCapデバイスです"
IDS_2096 "標準2ボタンジョイスティック"
IDS_2097 "標準4ボタンジョイスティック"
IDS_2098 "標準6ボタンジョイスティック"
IDS_2099 "標準8ボタンジョイスティック"
IDS_2096 "標準ジョイスティック(2ボタン)"
IDS_2097 "標準ジョイスティック(4ボタン)"
IDS_2098 "標準ジョイスティック(6ボタン)"
IDS_2099 "標準ジョイスティック(8ボタン)"
IDS_2100 "CH Flightstick Pro"
IDS_2101 "Microsoft SideWinder Pad"
IDS_2102 "Thrustmaster Flight Control System"
IDS_2103 "なし"
IDS_2104 "キーボードアクセラレータを読み込めません。"
IDS_2105 "Raw入力が登録できません。"
IDS_2104 "キーボードアクセラレータを読み込めません。"
IDS_2105 "生の入力が登録できません。"
IDS_2106 "%u"
IDS_2107 "%u MB (CHS: %i, %i, %i)"
IDS_2108 "フロッピー %i (%s): %ls"
IDS_2109 "すべてのイメージ (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0アドバンスドセクターイメージ (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本セクターイメージ (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0フラックスイメージ (*.FDI)\0*.FDI\0表面イメージ (*.86F;*.MFM)\0*.86F;*.MFM\0すべてのファイル (*.*)\0*.*\0"
IDS_2110 "FreeTypeが初期化できません"
IDS_2111 "SDLが初期化できません。SDL2.dllが必要です"
IDS_2112 "起動中のマシンを再起動しますか?"
IDS_2112 "使用中のマシンをハードリセットしますか?"
IDS_2113 "86Boxを終了しますか"
IDS_2114 "Ghostscriptが初期化できません"
IDS_2115 "光磁気 %i (%ls): %ls"
IDS_2116 "光磁気イメージ (*.IM?;*.MDI)\0*.IM?;*.MDI\0すべてのファイル (*.*)\0*.*\0"
IDS_2117 "86Boxへようこそ!"
IDS_2118 "内部のコントローラー"
IDS_2117 "86Boxへようこそ"
IDS_2118 "内コントローラー"
IDS_2119 "終了"
IDS_2120 "ROMが見つかりません"
IDS_2121 "設定を保存しますか?"
IDS_2122 "保存すると使用中のマシンが再起動されます。"
IDS_2122 "保存すると使用中のマシンがハードリセットされます。"
IDS_2123 "保存"
IDS_2124 "86Boxについて"
IDS_2124 "86Boxのバージョン情報"
IDS_2125 "86Box v" EMU_VERSION
IDS_2126 "古いコンピュータのエミュレータ\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。"
IDS_2126 "古いパソコンのエミュレータ\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。"
IDS_2127 "OK"
IDS_2128 "ハードウェアが利用できません"
#ifdef _WIN32
@@ -505,15 +506,15 @@ BEGIN
#else
#define LIB_NAME_GS "libgs"
#endif
IDS_2132 LIB_NAME_GS "はPostScriptファイルをPDFに自動変換させる為に必要です。\n\n汎用PostScriptプリンターに送った任意のドキュメントはPostScript(.ps)ファイルとして保存されます。"
IDS_2132 "PostScriptファイルをPDFに自動変換するには" LIB_NAME_GS "が必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントはPostScript(.ps)ファイルとして保存されます。"
#ifdef _WIN32
#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll"
#else
#define LIB_NAME_FLUIDSYNTH "libfluidsynth"
#endif
IDS_2133 "FluidSynthのMIDI出力には" LIB_NAME_FLUIDSYNTH "が必要です。"
IDS_2134 "フルスクリーンモードに転換します"
IDS_2135 "今後このメッセージを表示しない"
IDS_2134 "フルスクリーンに切り替えています"
IDS_2135 "今後このメッセージを表示しない"
IDS_2136 "終了しない"
IDS_2137 "リセット"
IDS_2138 "リセットしない"
@@ -522,16 +523,23 @@ BEGIN
IDS_2141 "%hs デバイスの設定"
IDS_2142 "モニターのスリープモード"
IDS_2143 "OpenGLシェーダー (*.GLSL)\0*.GLSL\0すべてのファイル (*.*)\0*.*\0"
IDS_2144 "OpenGL設定"
IDS_2144 "OpenGL設定"
IDS_2145 "サポートされていない設定を読み込んでいます"
IDS_2146 "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。"
IDS_2147 "つづく"
IDS_2147 "続行"
IDS_2148 "カセット: %s"
IDS_2149 "カセットイメージ (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0すべてのファイル (*.*)\0*.*\0"
IDS_2150 "カートリッジ %i: %ls"
IDS_2151 "カートリッジイメージ (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0すべてのファイル (*.*)\0*.*\0"
IDS_2152 "レンダラーの初期化エラー"
IDS_2153 "OpenGL3.0コアレンダラーが初期化できませんでした。別のレンダラーを使用してください。"
IDS_2153 "OpenGL (3.0コア) レンダラーが初期化できませんでした。別のレンダラーを使用してください。"
IDS_2154 "実行を再開"
IDS_2155 "実行を一時停止"
IDS_2156 "Ctrl+Alt+DELを押し"
IDS_2157 "Ctrl+Alt+Escを押し"
IDS_2158 "ハードリセット"
IDS_2159 "ACPIシャットダウン"
IDS_2160 "設定"
END
STRINGTABLE DISCARDABLE
@@ -541,33 +549,33 @@ BEGIN
IDS_4098 "%01i"
IDS_4099 "MFM/RLLまたはESDIのCD-ROMドライブが存在しません"
IDS_4100 "カスタム..."
IDS_4101 "カスタム(大)..."
IDS_4101 "カスタム (大型)..."
IDS_4102 "新規のディスクを追加"
IDS_4103 "既定のディスクを追加"
IDS_4104 "HDIディスクイメージは4GB以上にはできません。"
IDS_4105 "ディスクイメージは127GB以上にはできません。"
IDS_4104 "HDIディスクイメージは4GBを超えることはできません。"
IDS_4105 "ディスクイメージは127GBを超えることはできません。"
IDS_4106 "ハードディスクイメージ (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0すべてのファイル (*.*)\0*.*\0"
IDS_4107 "ファイルの読み込みができません"
IDS_4108 "ファイルの書き込みができません"
IDS_4109 "512バイト以外のセクタサイズを持ったHDIまたはHDX形式のイメージはサポートません。"
IDS_4110 "USBはまだサポートません"
IDS_4109 "512以外のセクタサイズを持HDIまたはHDXイメージはサポートされていません。"
IDS_4110 "USBはまだサポートされていません"
IDS_4111 "ディスクイメージファイルが既に存在します"
IDS_4112 "有効なファイル名を指定してください。"
IDS_4113 "ディスクイメージが作成されました"
IDS_4114 "ファイルが存在し、読み取り可能であることを確認します。"
IDS_4114 "ファイルが存在し、読み取り可能であることを確認してください。"
IDS_4115 "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。"
IDS_4116 "ディスクイメージが大きすぎます"
IDS_4117 "新規ディスクのパーティション設定とフォーマットを必ずしといてください。"
IDS_4118 "選択したファイル上書きされます。使っていいですか?"
IDS_4116 "ディスクイメージのサイズが大きすぎます"
IDS_4117 "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。"
IDS_4118 "選択したファイル上書きされます。使っていいですか?"
IDS_4119 "サポートされていないディスクイメージ"
IDS_4120 "上書き"
IDS_4121 "上書きしない"
IDS_4122 "Rawイメージ (.img)"
IDS_4123 "HDIイメージ (.hdi)"
IDS_4124 "HDXイメージ (.hdx)"
IDS_4125 "固定サイズのVHD (.vhd)"
IDS_4126 "ダイナミックサイズのVHD (.vhd)"
IDS_4127 "ディファレンシングVHD (.vhd)"
IDS_4125 "VHD(容量固定)(.vhd)"
IDS_4126 "VHD(容量可変)(.vhd)"
IDS_4127 "VHD(差分)(.vhd)"
IDS_4128 "大型ブロック (2 MB)"
IDS_4129 "小型ブロック (512 KB)"
IDS_4130 "VHDファイル (*.VHD)\0*.VHD\0すべてのファイル (*.*)\0*.*\0"

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "표시(&V)"
BEGIN
MENUITEM "상태 바 숨기기(&H)", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "창 크기 조절 가능하게 하기(&R)", IDM_VID_RESIZE
MENUITEM "창 크기와 위치를 기억하기(&E)", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "카트리지 이미지 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0모든 파일 (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -35,6 +35,7 @@ BEGIN
POPUP "&Exibir"
BEGIN
MENUITEM "&Ocultar barra de status", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Ocultar &barra de ferramenta", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Janela redimensionável", IDM_VID_RESIZE
MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER
@@ -368,7 +369,7 @@ END
#define STR_SIZE_MB "Tamanho (MB):"
#define STR_TYPE "Tipo:"
#define STR_IMG_FORMAT "Formato:"
#define STR_BLOCK_SIZE "Tamanho do bloco:"
#define STR_BLOCK_SIZE "Bloco:"
#define STR_FLOPPY_DRIVES "Unidades de disquete:"
#define STR_TURBO "Turbo"
@@ -478,7 +479,7 @@ BEGIN
IDS_2115 "Magneto-óptico %i (%ls): %ls"
IDS_2116 "Imagens magneto-ópticas (*.IM?;*.MDI)\0*.IM?;*.MDI\0Todos os arquivos (*.*)\0*.*\0"
IDS_2117 "Bem-vindo ao 86Box!"
IDS_2118 "Controle interno"
IDS_2118 "Controlador interno"
IDS_2119 "Sair"
IDS_2120 "Nenhum ROM encontrada"
IDS_2121 "Você deseja salvar as configurações?"
@@ -535,6 +536,13 @@ BEGIN
IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os arquivos (*.*)\0*.*\0"
IDS_2152 "Erro ao inicializar o renderizador"
IDS_2153 "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador."
IDS_2154 "Continuar a execução"
IDS_2155 "Pausar a execução"
IDS_2156 "Pressionar Ctrl+Alt+Del"
IDS_2157 "Pressionar Ctrl+Alt+Esc"
IDS_2158 "Reinicialização completa"
IDS_2159 "Desligamento por ACPI"
IDS_2160 "Configurações"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Ver"
BEGIN
MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Janela redimensionável", IDM_VID_RESIZE
MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os ficheiros (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Вид"
BEGIN
MENUITEM "&Скрыть строку статуса", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Изменяемый размер окна", IDM_VID_RESIZE
MENUITEM "&Запомнить размер и положение", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Образы картриджей (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Все файлы (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Pogled"
BEGIN
MENUITEM "&Skrij statusno vrstico", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "S&premenljiva velikost okna", IDM_VID_RESIZE
MENUITEM "&Zapomni si velikost in položaj", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Slike spominskega vložka (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Vse datoteke (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "&Görüntüleme"
BEGIN
MENUITEM "&Durum çubuğunu gizle", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Yeniden boyutlandırılabilir pencere", IDM_VID_RESIZE
MENUITEM "&Pencere boyut ve pozisyonunu hatırla", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "Kartuş imajları (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tüm dosyalar (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
END
STRINGTABLE DISCARDABLE

View File

@@ -32,6 +32,7 @@ BEGIN
POPUP "查看(&V)"
BEGIN
MENUITEM "隐藏状态栏(&H)", IDM_VID_HIDE_STATUS_BAR
MENUITEM "隐藏工具栏(&T)", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "窗口大小可调(&R)", IDM_VID_RESIZE
MENUITEM "记住窗口大小和位置(&E)", IDM_VID_REMEMBER
@@ -532,6 +533,13 @@ BEGIN
IDS_2151 "卡带镜像 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0所有文件 (*.*)\0*.*\0"
IDS_2152 "初始化渲染器时出错"
IDS_2153 "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。"
IDS_2154 "恢复执行"
IDS_2155 "暂停执行"
IDS_2156 "按 Ctrl+Alt+Del"
IDS_2157 "按 Ctrl+Alt+Esc"
IDS_2158 "硬重置"
IDS_2159 "ACPI 关机"
IDS_2160 "设置"
END
STRINGTABLE DISCARDABLE

View File

@@ -1118,10 +1118,7 @@ plat_setfullscreen(int on)
GetClientRect(hwndMain, &rect);
temp_x = rect.right - rect.left + 1;
if (hide_status_bar)
temp_y = rect.bottom - rect.top + 1;
else
temp_y = rect.bottom - rect.top + 1 - sbar_height;
temp_y = rect.bottom - rect.top + 1 - (hide_status_bar ? 0 : sbar_height) - (hide_tool_bar ? 0 : tbar_height);
} else {
if (dpi_scale) {
temp_x = MulDiv((vid_resize & 2) ? fixed_size_x : unscaled_size_x, dpi, 96);
@@ -1135,10 +1132,7 @@ plat_setfullscreen(int on)
if (vid_resize >= 2)
MoveWindow(hwndMain, window_x, window_y, window_w, window_h, TRUE);
if (hide_status_bar)
ResizeWindowByClientArea(hwndMain, temp_x, temp_y);
else
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height);
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
}
/* Render window. */

View File

@@ -87,6 +87,13 @@ const _ICON_DATA icon_files[] =
{185, "mo_empty_active.ico"},
{192, "cassette_empty.ico"},
{193, "cassette_empty_active.ico"},
{200, "run.ico"},
{201, "pause.ico"},
{202, "send_cad.ico"},
{203, "send_cae.ico"},
{204, "hard_reset.ico"},
{205, "acpi_shutdown.ico"},
{206, "settings.ico"},
{232, "cartridge_empty.ico"},
{240, "machine.ico"},
{241, "display.ico"},
@@ -120,9 +127,11 @@ void win_load_icon_set()
win_clear_icon_set();
win_system_icon_set();
if (strlen(icon_set) == 0)
if (strlen(icon_set) == 0) {
ToolBarLoadIcons();
return;
}
char path_root[2048] = {0}, temp[2048] = {0};
wchar_t wtemp[2048] = {0};
@@ -150,4 +159,6 @@ void win_load_icon_set()
uint32_t curr_lang = lang_id;
lang_id = 0;
set_language(curr_lang);
ToolBarLoadIcons();
}

View File

@@ -200,8 +200,9 @@ static void set_parent_binding(int enable)
* @param wParam
* @param lParam
* @param fullscreen
* @return Was message handled
*/
static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen)
static int handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen)
{
switch (message)
{
@@ -219,7 +220,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
/* Mouse events that enter and exit capture. */
PostMessage(parent, message, wParam, lParam);
}
break;
return 1;
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
@@ -228,7 +229,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
{
PostMessage(parent, message, wParam, lParam);
}
break;
return 1;
case WM_INPUT:
if (fullscreen)
{
@@ -256,8 +257,17 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
}
free(raw);
}
break;
return 1;
case WM_MOUSELEAVE:
if (fullscreen)
{
/* Leave fullscreen if mouse leaves the renderer window. */
PostMessage(GetAncestor(parent, GA_ROOT), WM_LEAVEFULLSCREEN, 0, 0);
}
return 0;
}
return 0;
}
/**
@@ -638,12 +648,13 @@ static void opengl_main(void* param)
/* Handle window messages */
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.hwnd == window_hwnd)
handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen);
TranslateMessage(&msg);
DispatchMessage(&msg);
if (msg.hwnd != window_hwnd || !handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
/* Wait for synchronized events for 1ms before going back to window events */
@@ -722,7 +733,14 @@ static void opengl_main(void* param)
{
SetForegroundWindow(window_hwnd);
SetFocus(window_hwnd);
/* Clip cursor to prevent it moving to another monitor. */
RECT rect;
GetWindowRect(window_hwnd, &rect);
ClipCursor(&rect);
}
else
ClipCursor(NULL);
}
if (fullscreen)

View File

@@ -119,7 +119,7 @@ SpecifyDimensionsDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM
temp_y = MulDiv(temp_y, dpi, 96);
}
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height);
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height + tbar_height);
if (vid_resize) {
CheckMenuItem(hmenu, IDM_VID_SCALE_1X + scale, MF_UNCHECKED);

View File

@@ -54,10 +54,6 @@
#include <86box/ui.h>
#include <86box/win.h>
#ifndef GWL_WNDPROC
#define GWL_WNDPROC GWLP_WNDPROC
#endif
HWND hwndSBAR;
int update_icons = 1, reset_occurred = 1;
@@ -992,7 +988,7 @@ StatusBarCreate(HWND hwndParent, uintptr_t idStatus, HINSTANCE hInst)
/* Replace the original procedure with ours. */
OriginalProcedure = GetWindowLongPtr(hwndSBAR, GWLP_WNDPROC);
SetWindowLongPtr(hwndSBAR, GWL_WNDPROC, (LONG_PTR)&StatusBarProcedure);
SetWindowLongPtr(hwndSBAR, GWLP_WNDPROC, (LONG_PTR)&StatusBarProcedure);
SendMessage(hwndSBAR, SB_SETMINHEIGHT, (WPARAM)17, (LPARAM)0);

219
src/win/win_toolbar.c Normal file
View File

@@ -0,0 +1,219 @@
#define UNICODE
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <CommCtrl.h>
#include <86box/86box.h>
#include <86box/plat.h>
#include <86box/resource.h>
#include <86box/ui.h>
#include <86box/win.h>
HWND hwndRebar = NULL;
static HWND hwndToolbar = NULL;
static HIMAGELIST hImageList = NULL;
static wchar_t wTitle[512] = { 0 };
static WNDPROC pOriginalProcedure = NULL;
enum image_index {
RUN,
PAUSE,
CTRL_ALT_DEL,
CTRL_ALT_ESC,
HARD_RESET,
ACPI_SHUTDOWN,
SETTINGS
};
void
ToolBarLoadIcons()
{
if (!hwndToolbar)
return;
if (hImageList)
ImageList_Destroy(hImageList);
hImageList = ImageList_Create(win_get_system_metrics(SM_CXSMICON, dpi),
win_get_system_metrics(SM_CYSMICON, dpi),
ILC_MASK | ILC_COLOR32, 1, 1);
// The icons must be loaded in the same order as the `image_index`
// enumeration above.
ImageList_AddIcon(hImageList, hIcon[200]); // Run
ImageList_AddIcon(hImageList, hIcon[201]); // Pause
ImageList_AddIcon(hImageList, hIcon[202]); // Ctrl+Alt+Delete
ImageList_AddIcon(hImageList, hIcon[203]); // Ctrl+Alt+Esc
ImageList_AddIcon(hImageList, hIcon[204]); // Hard reset
ImageList_AddIcon(hImageList, hIcon[205]); // ACPI shutdown
ImageList_AddIcon(hImageList, hIcon[206]); // Settings
SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList);
}
int
ToolBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_NOTIFY:
switch (((LPNMHDR) lParam)->code) {
case TTN_GETDISPINFO: {
LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT)lParam;
// Set the instance of the module that contains the resource.
lpttt->hinst = hinstance;
uintptr_t idButton = lpttt->hdr.idFrom;
switch (idButton) {
case IDM_ACTION_PAUSE:
if (dopause)
lpttt->lpszText = MAKEINTRESOURCE(IDS_2154);
else
lpttt->lpszText = MAKEINTRESOURCE(IDS_2155);
break;
case IDM_ACTION_RESET_CAD:
lpttt->lpszText = MAKEINTRESOURCE(IDS_2156);
break;
case IDM_ACTION_CTRL_ALT_ESC:
lpttt->lpszText = MAKEINTRESOURCE(IDS_2157);
break;
case IDM_ACTION_HRESET:
lpttt->lpszText = MAKEINTRESOURCE(IDS_2158);
break;
case IDM_CONFIG:
lpttt->lpszText = MAKEINTRESOURCE(IDS_2160);
break;
}
return TRUE;
}
}
}
return(CallWindowProc(pOriginalProcedure, hwnd, message, wParam, lParam));
}
void
ToolBarUpdatePause(int pause)
{
TBBUTTONINFO tbbi;
tbbi.cbSize = sizeof(tbbi);
tbbi.dwMask = TBIF_IMAGE;
tbbi.iImage = pause ? RUN : PAUSE;
SendMessage(hwndToolbar, TB_SETBUTTONINFO, IDM_ACTION_PAUSE, (LPARAM) &tbbi);
}
static TBBUTTON buttons[] = {
{ PAUSE, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
{ HARD_RESET, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
{ ACPI_SHUTDOWN, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 },
{ 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 },
{ CTRL_ALT_DEL, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
{ CTRL_ALT_ESC, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
{ 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 },
{ SETTINGS, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }
};
void
ToolBarCreate(HWND hwndParent, HINSTANCE hInst)
{
REBARINFO rbi = { 0 };
REBARBANDINFO rbbi = { 0 };
int btnSize;
// Create the toolbar.
hwndToolbar = CreateWindowEx(WS_EX_PALETTEWINDOW, TOOLBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN |
WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS |
TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE |
CCS_NOPARENTALIGN | CCS_NORESIZE |
CCS_NODIVIDER,
0, 0, 0, 0,
hwndParent, NULL, hInst, NULL);
ToolBarLoadIcons();
// Add buttons.
SendMessage(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
SendMessage(hwndToolbar, TB_ADDBUTTONS, sizeof(buttons) / sizeof(TBBUTTON), (LPARAM) &buttons);
// Autosize the toolbar and determine its size.
btnSize = LOWORD(SendMessage(hwndToolbar, TB_GETBUTTONSIZE, 0,0));
// Replace the original procedure with ours.
pOriginalProcedure = (WNDPROC) GetWindowLongPtr(hwndToolbar, GWLP_WNDPROC);
SetWindowLongPtr(hwndToolbar, GWLP_WNDPROC, (LONG_PTR)&ToolBarProcedure);
// Make sure the Pause button is in the correct state.
ToolBarUpdatePause(dopause);
// Create the containing Rebar.
hwndRebar = CreateWindowEx(0, REBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_CLIPCHILDREN | RBS_VARHEIGHT |
CCS_NODIVIDER | CCS_NOPARENTALIGN,
0, 0, scrnsz_x, 0,
hwndParent, NULL, hInst, NULL);
// Create and send the REBARINFO structure.
rbi.cbSize = sizeof(rbi);
SendMessage(hwndRebar, RB_SETBARINFO, 0, (LPARAM)&rbi);
// Add the toolbar to the rebar.
rbbi.cbSize = sizeof(rbbi);
rbbi.fMask = RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_STYLE;
rbbi.hwndChild = hwndToolbar;
rbbi.cxMinChild = 0;
rbbi.cyMinChild = btnSize;
rbbi.fStyle = RBBS_NOGRIPPER;
SendMessage(hwndRebar, RB_INSERTBAND, -1, (LPARAM)&rbbi);
// Add a label for machine information.
rbbi.fMask = RBBIM_TEXT | RBBIM_STYLE;
rbbi.lpText = TEXT("Test");
rbbi.fStyle = RBBS_NOGRIPPER;
SendMessage(hwndRebar, RB_INSERTBAND, -1, (LPARAM)&rbbi);
SendMessage(hwndRebar, RB_MAXIMIZEBAND, 0, 0);
ShowWindow(hwndRebar, TRUE);
return;
}
wchar_t *
ui_window_title(wchar_t *s)
{
REBARBANDINFO rbbi = { 0 };
if (! video_fullscreen) {
if (s != NULL) {
wcsncpy(wTitle, s, sizeof_w(wTitle) - 1);
} else
s = wTitle;
rbbi.cbSize = sizeof(rbbi);
rbbi.fMask = RBBIM_TEXT;
rbbi.lpText = s;
SendMessage(hwndRebar, RB_SETBANDINFO, 1, (LPARAM) &rbbi);
} else {
if (s == NULL)
s = wTitle;
}
return(s);
}

View File

@@ -58,6 +58,7 @@ HWND hwndMain = NULL, /* application main window */
HMENU menuMain; /* application main menu */
RECT oldclip; /* mouse rect */
int sbar_height = 23; /* statusbar height */
int tbar_height = 23; /* toolbar height */
int minimized = 0;
int infocus = 1, button_down = 0;
int rctrl_is_lalt = 0;
@@ -65,6 +66,7 @@ int user_resize = 0;
int fixed_size_x = 0, fixed_size_y = 0;
int kbd_req_capture = 0;
int hide_status_bar = 0;
int hide_tool_bar = 0;
int dpi = 96;
extern char openfilestring[512];
@@ -72,7 +74,6 @@ extern WCHAR wopenfilestring[512];
/* Local data. */
static wchar_t wTitle[512];
static int manager_wm = 0;
static int save_window_pos = 0, pause_state = 0;
static int padded_frame = 0;
@@ -96,7 +97,8 @@ static dllimp_t user32_imports[] = {
void* shell32_handle = NULL;
static HRESULT (WINAPI *pSetCurrentProcessExplicitAppUserModelID)(PCWSTR AppID);
static dllimp_t shell32_imports[]= {
{ "SetCurrentProcessExplicitAppUserModelID", &pSetCurrentProcessExplicitAppUserModelID }
{ "SetCurrentProcessExplicitAppUserModelID", &pSetCurrentProcessExplicitAppUserModelID },
{ NULL, NULL }
};
int
@@ -274,6 +276,7 @@ ResetAllMenus(void)
#endif
CheckMenuItem(menuMain, IDM_VID_HIDE_STATUS_BAR, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_HIDE_TOOLBAR, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_FORCE43, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_OVERSCAN, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_INVERT, MF_UNCHECKED);
@@ -342,6 +345,7 @@ ResetAllMenus(void)
#endif
CheckMenuItem(menuMain, IDM_VID_HIDE_STATUS_BAR, hide_status_bar ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_HIDE_TOOLBAR, hide_tool_bar ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_FORCE43, force_43?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_OVERSCAN, enable_overscan?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_INVERT, invert_display ? MF_CHECKED : MF_UNCHECKED);
@@ -639,6 +643,21 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
config_save();
break;
case IDM_VID_HIDE_TOOLBAR:
hide_tool_bar ^= 1;
CheckMenuItem(hmenu, IDM_VID_HIDE_TOOLBAR, hide_tool_bar ? MF_CHECKED : MF_UNCHECKED);
ShowWindow(hwndRebar, hide_tool_bar ? SW_HIDE : SW_SHOW);
GetWindowRect(hwnd, &rect);
if (hide_tool_bar) {
MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top - tbar_height, TRUE);
SetWindowPos(hwndRender, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
} else {
MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top + tbar_height, TRUE);
SetWindowPos(hwndRender, NULL, 0, tbar_height, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}
config_save();
break;
case IDM_VID_RESIZE:
vid_resize ^= 1;
CheckMenuItem(hmenu, IDM_VID_RESIZE, (vid_resize & 1) ? MF_CHECKED : MF_UNCHECKED);
@@ -657,10 +676,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
temp_y = unscaled_size_y;
}
if (hide_status_bar)
ResizeWindowByClientArea(hwnd, temp_x, temp_y);
else
ResizeWindowByClientArea(hwnd, temp_x, temp_y + sbar_height);
ResizeWindowByClientArea(hwnd, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
if (mouse_capture) {
ClipCursor(&rect);
@@ -938,6 +954,8 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
dpi = HIWORD(wParam);
GetWindowRect(hwndSBAR, &rect);
sbar_height = rect.bottom - rect.top;
GetWindowRect(hwndRebar, &rect);
tbar_height = rect.bottom - rect.top;
rect_p = (RECT*)lParam;
if (vid_resize == 1)
MoveWindow(hwnd, rect_p->left, rect_p->top, rect_p->right - rect_p->left, rect_p->bottom - rect_p->top, TRUE);
@@ -950,15 +968,15 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
}
/* Main Window. */
if (hide_status_bar)
ResizeWindowByClientArea(hwndMain, temp_x, temp_y);
else
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height);
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
} else if (!user_resize)
atomic_flag_clear(&doresize);
break;
case WM_WINDOWPOSCHANGED:
if (video_fullscreen & 1)
PostMessage(hwndMain, WM_LEAVEFULLSCREEN, 0, 0);
pos = (WINDOWPOS*)lParam;
GetClientRect(hwndMain, &rect);
@@ -985,12 +1003,13 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
if (!(pos->flags & SWP_NOSIZE) || !user_resize) {
plat_vidapi_enable(0);
if (hide_status_bar)
MoveWindow(hwndRender, 0, 0, rect.right, rect.bottom, TRUE);
else {
if (!hide_status_bar)
MoveWindow(hwndSBAR, 0, rect.bottom - sbar_height, sbar_height, rect.right, TRUE);
MoveWindow(hwndRender, 0, 0, rect.right, rect.bottom - sbar_height, TRUE);
}
if (!hide_tool_bar)
MoveWindow(hwndRebar, 0, 0, rect.right, tbar_height, TRUE);
MoveWindow(hwndRender, 0, hide_tool_bar ? 0 : tbar_height, rect.right, rect.bottom - (hide_status_bar ? 0 : sbar_height) - (hide_tool_bar ? 0 : tbar_height), TRUE);
GetClientRect(hwndRender, &rect);
if (dpi_scale) {
@@ -1158,6 +1177,13 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
}
break;
case WM_ACTIVATEAPP:
/* Leave full screen on switching application except
for OpenGL Core and VNC renderers. */
if (video_fullscreen & 1 && wParam == FALSE && vid_api < 3)
PostMessage(hwndMain, WM_LEAVEFULLSCREEN, 0, 0);
break;
case WM_ENTERSIZEMOVE:
user_resize = 1;
break;
@@ -1243,7 +1269,7 @@ ui_init(int nCmdShow)
MSG messages = {0}; /* received-messages buffer */
HWND hwnd = NULL; /* handle for our window */
HACCEL haccel; /* handle to accelerator table */
RECT sbar_rect; /* RECT of the status bar */
RECT rect;
int bRet;
TASKDIALOGCONFIG tdconfig = {0};
TASKDIALOG_BUTTON tdbuttons[] = {{IDCANCEL, MAKEINTRESOURCE(IDS_2119)}};
@@ -1329,7 +1355,7 @@ ui_init(int nCmdShow)
return(2);
/* Now create our main window. */
mbstowcs(title, emu_version, sizeof_w(title));
swprintf_s(title, sizeof_w(title), L"%hs - %s %s", vm_name, EMU_NAME_W, EMU_VERSION_FULL_W);
hwnd = CreateWindowEx (
0, /* no extended possibilites */
CLASS_NAME, /* class name */
@@ -1357,11 +1383,20 @@ ui_init(int nCmdShow)
StatusBarCreate(hwndMain, IDC_STATUS, hinstance);
/* Get the actual height of the status bar */
GetWindowRect(hwndSBAR, &sbar_rect);
sbar_height = sbar_rect.bottom - sbar_rect.top;
GetWindowRect(hwndSBAR, &rect);
sbar_height = rect.bottom - rect.top;
if (hide_status_bar)
ShowWindow(hwndSBAR, SW_HIDE);
/* Create the toolbar window. */
ToolBarCreate(hwndMain, hinstance);
/* Get the actual height of the toolbar */
GetWindowRect(hwndRebar, &rect);
tbar_height = rect.bottom - rect.top;
if (hide_tool_bar)
ShowWindow(hwndRebar, SW_HIDE);
/* Set up main window for resizing if configured. */
if (vid_resize == 1)
SetWindowLongPtr(hwnd, GWL_STYLE,
@@ -1552,25 +1587,6 @@ ui_init(int nCmdShow)
}
wchar_t *
ui_window_title(wchar_t *s)
{
if (! video_fullscreen) {
if (s != NULL) {
wcsncpy(wTitle, s, sizeof_w(wTitle) - 1);
} else
s = wTitle;
SetWindowText(hwndMain, s);
} else {
if (s == NULL)
s = wTitle;
}
return(s);
}
/* We should have the language ID as a parameter. */
void
plat_pause(int p)
@@ -1614,6 +1630,9 @@ plat_pause(int p)
if (enable_discord)
discord_update_activity(dopause);
/* Update the toolbar */
ToolBarUpdatePause(p);
/* Send the WM to a manager if needed. */
if (source_hwnd)
PostMessage((HWND) (uintptr_t) source_hwnd, WM_SENDSTATUS, (WPARAM) !!dopause, (LPARAM) hwndMain);
@@ -1631,10 +1650,7 @@ plat_resize(int x, int y)
x = MulDiv(x, dpi, 96);
y = MulDiv(y, dpi, 96);
}
if (hide_status_bar)
ResizeWindowByClientArea(hwndMain, x, y);
else
ResizeWindowByClientArea(hwndMain, x, y + sbar_height);
ResizeWindowByClientArea(hwndMain, x, y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
}
}