diff --git a/dll/win32/comctl32/edit.c b/dll/win32/comctl32/edit.c index ca52e7e496b..ed3829ed1ee 100644 --- a/dll/win32/comctl32/edit.c +++ b/dll/win32/comctl32/edit.c @@ -3991,8 +3991,13 @@ static LRESULT EDIT_WM_StyleChanged ( EDITSTATE *es, WPARAM which, const STYLES /* Only a subset of changes can be applied after the control * has been created. */ +#ifdef __REACTOS__ + style_change_mask = ES_UPPERCASE | ES_LOWERCASE | + ES_NUMBER | ES_LEFT | ES_RIGHT | ES_CENTER; +#else style_change_mask = ES_UPPERCASE | ES_LOWERCASE | ES_NUMBER; +#endif if (es->style & ES_MULTILINE) style_change_mask |= ES_WANTRETURN; diff --git a/modules/rostests/win32/user32/CMakeLists.txt b/modules/rostests/win32/user32/CMakeLists.txt index 757220d2aa3..be1aa50f51b 100644 --- a/modules/rostests/win32/user32/CMakeLists.txt +++ b/modules/rostests/win32/user32/CMakeLists.txt @@ -1,4 +1,5 @@ add_subdirectory(biditext) +add_subdirectory(editalign) add_subdirectory(messagebox) add_subdirectory(paintdesktop) add_subdirectory(psmtest) diff --git a/modules/rostests/win32/user32/editalign/CMakeLists.txt b/modules/rostests/win32/user32/editalign/CMakeLists.txt new file mode 100644 index 00000000000..ed9f7188d2a --- /dev/null +++ b/modules/rostests/win32/user32/editalign/CMakeLists.txt @@ -0,0 +1,6 @@ + +add_rc_deps(editalign.rc ${CMAKE_CURRENT_SOURCE_DIR}/editalign.ico) +add_executable(editalign editalign.c editalign.rc) +set_module_type(editalign win32gui UNICODE) +add_importlibs(editalign gdi32 user32 comctl32 msvcrt kernel32 ntdll) +add_rostests_file(TARGET editalign SUBDIR suppl) diff --git a/modules/rostests/win32/user32/editalign/editalign.c b/modules/rostests/win32/user32/editalign/editalign.c new file mode 100644 index 00000000000..78c216817a5 --- /dev/null +++ b/modules/rostests/win32/user32/editalign/editalign.c @@ -0,0 +1,107 @@ +/* + * PROJECT: ReactOS Tests + * LICENSE: LGPL-2.0+ (https://spdx.org/licenses/LGPL-2.0+) + * PURPOSE: Tests text alignment of EDIT control + * COPYRIGHT: Copyright 2026 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + */ + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#include "resource.h" + +static HINSTANCE g_hInstance = NULL; +static HWND g_hMainWnd = NULL; + +static void SetEditAlign(HWND hwndEdit, LONG_PTR add_style) +{ + LONG_PTR style = GetWindowLongPtr(hwndEdit, GWL_STYLE); + style &= ~(ES_LEFT | ES_CENTER | ES_RIGHT); + style |= add_style; + SetWindowLongPtr(hwndEdit, GWL_STYLE, style); + InvalidateRect(hwndEdit, NULL, TRUE); +} + +static void SetMultiline(HWND hwnd, HWND hwndEdit, BOOL bMultiline) +{ + TCHAR text[1024]; + GetWindowText(hwndEdit, text, ARRAYSIZE(text)); + + RECT rc; + GetWindowRect(hwndEdit, &rc); + MapWindowPoints(NULL, hwnd, (LPPOINT)&rc, sizeof(RECT) / sizeof(POINT)); + + DWORD exstyle = (LONG)GetWindowLongPtr(hwndEdit, GWL_EXSTYLE); + DWORD style = (LONG)GetWindowLongPtr(hwndEdit, GWL_STYLE); + style &= ~ES_MULTILINE; + if (bMultiline) + style |= ES_MULTILINE; + + DestroyWindow(hwndEdit); + CreateWindowEx(exstyle, TEXT("EDIT"), text, style, + rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, + hwnd, (HMENU)UlongToHandle(edt1), g_hInstance, NULL); + + HFONT hFont = (HFONT)SendMessage(hwnd, WM_GETFONT, 0, 0); + SendDlgItemMessage(hwnd, edt1, WM_SETFONT, (WPARAM)hFont, TRUE); +} + +static INT_PTR CALLBACK +DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + g_hMainWnd = hwnd; + SetDlgItemText(hwnd, edt1, TEXT("Text")); + CheckRadioButton(hwnd, rad1, rad3, rad1); + return TRUE; + } + case WM_COMMAND: + { + HWND hwndEdit = GetDlgItem(hwnd, edt1); + switch (LOWORD(wParam)) + { + case IDCANCEL: // Cancel + EndDialog(hwnd, LOWORD(wParam)); + break; + case rad1: // Left + if (HIWORD(wParam) == BN_CLICKED) + SetEditAlign(hwndEdit, ES_LEFT); + break; + case rad2: // Center + if (HIWORD(wParam) == BN_CLICKED) + SetEditAlign(hwndEdit, ES_CENTER); + break; + case rad3: // Right + if (HIWORD(wParam) == BN_CLICKED) + SetEditAlign(hwndEdit, ES_RIGHT); + break; + case chx1: // Multiline + if (HIWORD(wParam) == BN_CLICKED) + { + if (IsDlgButtonChecked(hwnd, chx1) == BST_CHECKED) + SetMultiline(hwnd, hwndEdit, TRUE); + else + SetMultiline(hwnd, hwndEdit, FALSE); + } + } + break; + } + } + return 0; +} + +INT WINAPI +wWinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPWSTR lpCmdLine, + INT nCmdShow) +{ + g_hInstance = hInstance; + InitCommonControls(); + DialogBoxW(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DialogProc); + return 0; +} diff --git a/modules/rostests/win32/user32/editalign/editalign.ico b/modules/rostests/win32/user32/editalign/editalign.ico new file mode 100644 index 00000000000..1073447c20c Binary files /dev/null and b/modules/rostests/win32/user32/editalign/editalign.ico differ diff --git a/modules/rostests/win32/user32/editalign/editalign.rc b/modules/rostests/win32/user32/editalign/editalign.rc new file mode 100644 index 00000000000..9b08113af92 --- /dev/null +++ b/modules/rostests/win32/user32/editalign/editalign.rc @@ -0,0 +1,29 @@ +/* + * PROJECT: ReactOS Tests + * LICENSE: LGPL-2.0+ (https://spdx.org/licenses/LGPL-2.0+) + * PURPOSE: Tests text alignment of EDIT control + * COPYRIGHT: Copyright 2026 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + */ + +#include +#include "resource.h" + +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS EditAlign test program" +#define REACTOS_STR_INTERNAL_NAME "editalign" +#define REACTOS_STR_ORIGINAL_FILENAME "editalign.exe" +#include +#include + +IDI_MAIN ICON "editalign.ico" + +IDD_MAIN DIALOG 0, 0, 215, 135 +CAPTION "EditAlign" +STYLE DS_CENTER | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +FONT 9, "MS Shell Dlg" +{ + EDITTEXT edt1, 37, 13, 122, 61, ES_WANTRETURN + AUTORADIOBUTTON "ES_LEFT", rad1, 11, 83, 60, 14, WS_TABSTOP + AUTORADIOBUTTON "ES_CENTER", rad2, 77, 83, 60, 14, WS_TABSTOP + AUTORADIOBUTTON "ES_RIGHT", rad3, 145, 83, 60, 14, WS_TABSTOP + AUTOCHECKBOX "Multiline", chx1, 141, 115, 60, 14 +} diff --git a/modules/rostests/win32/user32/editalign/resource.h b/modules/rostests/win32/user32/editalign/resource.h new file mode 100644 index 00000000000..729562acb26 --- /dev/null +++ b/modules/rostests/win32/user32/editalign/resource.h @@ -0,0 +1,2 @@ +#define IDD_MAIN 100 +#define IDI_MAIN 100 diff --git a/win32ss/user/user32/controls/edit.c b/win32ss/user/user32/controls/edit.c index ceff2843f15..28e53c8cc24 100644 --- a/win32ss/user/user32/controls/edit.c +++ b/win32ss/user/user32/controls/edit.c @@ -4158,8 +4158,13 @@ static LRESULT EDIT_WM_StyleChanged ( EDITSTATE *es, WPARAM which, const STYLES /* Only a subset of changes can be applied after the control * has been created. */ +#ifdef __REACTOS__ + style_change_mask = ES_UPPERCASE | ES_LOWERCASE | + ES_NUMBER | ES_LEFT | ES_RIGHT | ES_CENTER; +#else style_change_mask = ES_UPPERCASE | ES_LOWERCASE | ES_NUMBER; +#endif if (es->style & ES_MULTILINE) style_change_mask |= ES_WANTRETURN;