[win] online-installer: add RTL mode

This commit is contained in:
SimplestStudio
2024-01-31 15:17:43 +02:00
parent 0b9eac75e7
commit 27bcc24f30
5 changed files with 36 additions and 2 deletions

View File

@ -1,5 +1,5 @@
#pragma code_page(65001)
#include <winres.h>
#include <Windows.h>
#include "../src/version.h"
#include "../src/resource.h"
@ -52,3 +52,17 @@ BEGIN
PUSHBUTTON "", IDC_BUTTON_CANCEL, 225, 72, 80, 18
CONTROL "", IDC_SILENT_CHECK, "BUTTON", BS_AUTOCHECKBOX | WS_TABSTOP, 30, 70, 100, 20
END
IDD_DIALOG_RTL DIALOGEX 0, 0, 320, 100
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_STATICEDGE | WS_EX_LAYOUTRTL
CAPTION ""
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "Progress", IDC_PROGRESS, "msctls_progress32", WS_BORDER, 15, 56, 290, 6
CONTROL "Icon", IDC_MAIN_ICON, "Static", SS_ICON | SS_CENTER | WS_CHILD | WS_VISIBLE, 15, 10, 32, 32
LTEXT "", IDC_LABEL_TITLE, 75, 15, 220, 14, SS_LEFT | WS_CHILD | WS_VISIBLE
LTEXT "", IDC_LABEL_MESSAGE, 75, 28, 220, 24, SS_LEFT | WS_CHILD | WS_VISIBLE
PUSHBUTTON "", IDC_BUTTON_CANCEL, 225, 72, 80, 18
CONTROL "", IDC_SILENT_CHECK, "BUTTON", BS_AUTOCHECKBOX | WS_TABSTOP, 30, 70, 100, 20
END

View File

@ -82,7 +82,7 @@ int WINAPI _tWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInstance, _In
data.file_name = &fileName;
InitCommonControls();
HWND hDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc, (LPARAM)&data);
HWND hDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(NS_Utils::IsRtlLanguage(lcid) ? IDD_DIALOG_RTL : IDD_DIALOG), NULL, DialogProc, (LPARAM)&data);
ShowWindow(hDlg, nCmdShow);
BOOL ret;

View File

@ -2,6 +2,7 @@
#define IDI_MAINICON 101
#define IDD_DIALOG 102
#define IDD_DIALOG_RTL 103
#define IDC_MAIN_ICON 1001
#define IDC_LABEL_TITLE 1002

View File

@ -41,6 +41,10 @@
#include <sstream>
#define _TR(str) Translator::tr(str).c_str()
#define BIT123_LAYOUTRTL 0x08000000
#ifndef LOCALE_IREADINGLAYOUT
# define LOCALE_IREADINGLAYOUT 0x70
#endif
namespace NS_Utils
@ -67,6 +71,20 @@ namespace NS_Utils
caption.append(_TR(CAPTION_TEXT));
MessageBox(NULL, str.c_str(), caption.c_str(), MB_ICONERROR | MB_SERVICE_NOTIFICATION_NT3X | MB_SETFOREGROUND);
}
bool IsRtlLanguage(unsigned long lcid)
{
if (NS_File::getWinVersion() >= WinVer::Win7) {
DWORD layout = 0;
if (GetLocaleInfo(lcid, LOCALE_IREADINGLAYOUT | LOCALE_RETURN_NUMBER, (LPWSTR)&layout, sizeof(layout)/sizeof(WCHAR)) > 0)
return layout == 1;
} else {
LOCALESIGNATURE lsig;
if (GetLocaleInfo(lcid, LOCALE_FONTSIGNATURE, (LPWSTR)&lsig, sizeof(lsig)/sizeof(WCHAR)) > 0)
return (lsig.lsUsb[3] & BIT123_LAYOUTRTL) != 0;
}
return false;
}
}
namespace NS_File

View File

@ -56,6 +56,7 @@ namespace NS_Utils
{
wstring GetLastErrorAsString();
void ShowMessage(wstring str, bool showError = false);
bool IsRtlLanguage(unsigned long lcid);
}
namespace NS_File