diff --git a/README.md b/README.md index e270bb2f4..0f48bc59e 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ System requirements and recommendations Performance may vary depending on both host and guest configuration. Most emulation logic is executed in a single thread, therefore generally systems with better IPC (instructions per clock) should be able to emulate higher clock speeds. It is also recommended to use a manager application with 86Box for easier handling of multiple virtual machines. -* [WinBox for 86Box](https://github.com/laciba96/WinBox-for-86Box) by [Laci bá'](https://github.com/laciba96) +* [WinBox for 86Box](https://github.com/86Box/WinBox-for-86Box) by Laci bá' * The new manager with improved new user experience; installer, automatic updates of emulator files and more. * [86Box Manager](https://github.com/86Box/86BoxManager) by [daviunic](https://github.com/daviunic) (Overdoze) * The traditional 86Box manager with simple interface. diff --git a/src/86box.c b/src/86box.c index 393ce90af..0970a6cb6 100644 --- a/src/86box.c +++ b/src/86box.c @@ -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 diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index 37615a32e..31f875a77 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -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; } diff --git a/src/config.c b/src/config.c index bda66d417..eebc4462e 100644 --- a/src/config.c +++ b/src/config.c @@ -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 diff --git a/src/include/86box/language.h b/src/include/86box/language.h index 467a5704c..f9da499be 100644 --- a/src/include/86box/language.h +++ b/src/include/86box/language.h @@ -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" diff --git a/src/include/86box/plat.h b/src/include/86box/plat.h index 3a605fe6b..ff8b31b02 100644 --- a/src/include/86box/plat.h +++ b/src/include/86box/plat.h @@ -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); diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h index b5a67b85b..f35be6465 100644 --- a/src/include/86box/resource.h +++ b/src/include/86box/resource.h @@ -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 diff --git a/src/include/86box/win.h b/src/include/86box/win.h index d776cccdf..4fb6a7d00 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -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); diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index a69413596..8a443dd77 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -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; } diff --git a/src/unix/unix.c b/src/unix/unix.c index f707757fb..3727e1f63 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -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; diff --git a/src/win/86Box.rc b/src/win/86Box.rc index 1b48edb03..8b34c5c09 100644 --- a/src/win/86Box.rc +++ b/src/win/86Box.rc @@ -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" diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt index 36c3dc9ac..0d1fb00cc 100644 --- a/src/win/CMakeLists.txt +++ b/src/win/CMakeLists.txt @@ -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) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index 61f79c8dd..948e1d260 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -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 diff --git a/src/win/icons/acpi_shutdown.ico b/src/win/icons/acpi_shutdown.ico new file mode 100644 index 000000000..a2493b803 Binary files /dev/null and b/src/win/icons/acpi_shutdown.ico differ diff --git a/src/win/icons/hard_reset.ico b/src/win/icons/hard_reset.ico new file mode 100644 index 000000000..d0494f40b Binary files /dev/null and b/src/win/icons/hard_reset.ico differ diff --git a/src/win/icons/pause.ico b/src/win/icons/pause.ico new file mode 100644 index 000000000..a57bc0a08 Binary files /dev/null and b/src/win/icons/pause.ico differ diff --git a/src/win/icons/run.ico b/src/win/icons/run.ico new file mode 100644 index 000000000..90a7f2886 Binary files /dev/null and b/src/win/icons/run.ico differ diff --git a/src/win/icons/send_cad.ico b/src/win/icons/send_cad.ico new file mode 100644 index 000000000..e3e64a743 Binary files /dev/null and b/src/win/icons/send_cad.ico differ diff --git a/src/win/icons/send_cae.ico b/src/win/icons/send_cae.ico new file mode 100644 index 000000000..757f38d35 Binary files /dev/null and b/src/win/icons/send_cae.ico differ diff --git a/src/win/icons/settings.ico b/src/win/icons/settings.ico new file mode 100644 index 000000000..ed64740b2 Binary files /dev/null and b/src/win/icons/settings.ico differ diff --git a/src/win/languages/cs-CZ.rc b/src/win/languages/cs-CZ.rc index b63d8a176..f9b128819 100644 --- a/src/win/languages/cs-CZ.rc +++ b/src/win/languages/cs-CZ.rc @@ -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 diff --git a/src/win/languages/de-DE.rc b/src/win/languages/de-DE.rc index 5a5ca5914..9a89beb24 100644 --- a/src/win/languages/de-DE.rc +++ b/src/win/languages/de-DE.rc @@ -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 diff --git a/src/win/languages/en-GB.rc b/src/win/languages/en-GB.rc index 61749d954..936a05e17 100644 --- a/src/win/languages/en-GB.rc +++ b/src/win/languages/en-GB.rc @@ -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 diff --git a/src/win/languages/en-US.rc b/src/win/languages/en-US.rc index 3bee70556..0266397a4 100644 --- a/src/win/languages/en-US.rc +++ b/src/win/languages/en-US.rc @@ -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 diff --git a/src/win/languages/es-ES.rc b/src/win/languages/es-ES.rc index 2232e69c5..52cb60c6b 100644 --- a/src/win/languages/es-ES.rc +++ b/src/win/languages/es-ES.rc @@ -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 diff --git a/src/win/languages/fi-FI.rc b/src/win/languages/fi-FI.rc index 56430464d..5513977af 100644 --- a/src/win/languages/fi-FI.rc +++ b/src/win/languages/fi-FI.rc @@ -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 diff --git a/src/win/languages/fr-FR.rc b/src/win/languages/fr-FR.rc index 6b58bd593..460283b0d 100644 --- a/src/win/languages/fr-FR.rc +++ b/src/win/languages/fr-FR.rc @@ -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 diff --git a/src/win/languages/hr-HR.rc b/src/win/languages/hr-HR.rc index 61fc0c475..575d0ba1d 100644 --- a/src/win/languages/hr-HR.rc +++ b/src/win/languages/hr-HR.rc @@ -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 diff --git a/src/win/languages/hu-HU.rc b/src/win/languages/hu-HU.rc index 731ef0e42..ae7e51924 100644 --- a/src/win/languages/hu-HU.rc +++ b/src/win/languages/hu-HU.rc @@ -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 diff --git a/src/win/languages/it-IT.rc b/src/win/languages/it-IT.rc index 461b76e71..2ee1cb0a8 100644 --- a/src/win/languages/it-IT.rc +++ b/src/win/languages/it-IT.rc @@ -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 diff --git a/src/win/languages/ja-JP.rc b/src/win/languages/ja-JP.rc index e88e1822c..56abc7600 100644 --- a/src/win/languages/ja-JP.rc +++ b/src/win/languages/ja-JP.rc @@ -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セットをダウンロードして、《roms》ディレクトリに解凍してください。" + IDS_2056 "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、「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 "OpenGL(3.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" diff --git a/src/win/languages/ko-KR.rc b/src/win/languages/ko-KR.rc index a46c8f6d7..b2e86d0ac 100644 --- a/src/win/languages/ko-KR.rc +++ b/src/win/languages/ko-KR.rc @@ -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 diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc index 06a000458..68761adfa 100644 --- a/src/win/languages/pt-BR.rc +++ b/src/win/languages/pt-BR.rc @@ -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 diff --git a/src/win/languages/pt-PT.rc b/src/win/languages/pt-PT.rc index a424ad141..cc50665b1 100644 --- a/src/win/languages/pt-PT.rc +++ b/src/win/languages/pt-PT.rc @@ -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 diff --git a/src/win/languages/ru-RU.rc b/src/win/languages/ru-RU.rc index 413b0c5f3..6bb1f222a 100644 --- a/src/win/languages/ru-RU.rc +++ b/src/win/languages/ru-RU.rc @@ -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 diff --git a/src/win/languages/sl-SI.rc b/src/win/languages/sl-SI.rc index fb1c80b8b..cdc00fc4a 100644 --- a/src/win/languages/sl-SI.rc +++ b/src/win/languages/sl-SI.rc @@ -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 diff --git a/src/win/languages/tr-TR.rc b/src/win/languages/tr-TR.rc index 5d2ef2c50..eca2767dc 100644 --- a/src/win/languages/tr-TR.rc +++ b/src/win/languages/tr-TR.rc @@ -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 diff --git a/src/win/languages/zh-CN.rc b/src/win/languages/zh-CN.rc index 37c5621ab..52d8de944 100644 --- a/src/win/languages/zh-CN.rc +++ b/src/win/languages/zh-CN.rc @@ -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 diff --git a/src/win/win.c b/src/win/win.c index a4854f65f..7d127efa6 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -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. */ diff --git a/src/win/win_icon.c b/src/win/win_icon.c index 9b0d5ef23..33a5932ef 100644 --- a/src/win/win_icon.c +++ b/src/win/win_icon.c @@ -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(); } \ No newline at end of file diff --git a/src/win/win_opengl.c b/src/win/win_opengl.c index 4f328c097..99843cd9f 100644 --- a/src/win/win_opengl.c +++ b/src/win/win_opengl.c @@ -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) diff --git a/src/win/win_specify_dim.c b/src/win/win_specify_dim.c index 96ae0403c..64a95cef4 100644 --- a/src/win/win_specify_dim.c +++ b/src/win/win_specify_dim.c @@ -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); diff --git a/src/win/win_stbar.c b/src/win/win_stbar.c index afc906215..29985aaf3 100644 --- a/src/win/win_stbar.c +++ b/src/win/win_stbar.c @@ -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); diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c new file mode 100644 index 000000000..71e9a02c3 --- /dev/null +++ b/src/win/win_toolbar.c @@ -0,0 +1,219 @@ +#define UNICODE +#include +#include +#include +#include +#include +#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); +} diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 912eef8cf..099540ccb 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -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)); } }