Resend: Edit control: Fix text placement and test cases
Michael Kaufmann
hallo at michael-kaufmann.ch
Fri Sep 2 10:27:15 CDT 2005
Changelog:
- Fix text placement
- Paint the border correctly if it's size is bigger than 1 pixel
- Don't paint text over the border
- Fix the edit control placement tests: Put the edit box in a parent
window
- Tidied up the edit control tests
-------------- next part --------------
Index: dlls/user/edit.c
===================================================================
RCS file: /home/wine/wine/dlls/user/edit.c,v
retrieving revision 1.36
diff -u -r1.36 edit.c
--- dlls/user/edit.c 10 Aug 2005 10:59:19 -0000 1.36
+++ dlls/user/edit.c 2 Sep 2005 14:50:47 -0000
@@ -2294,28 +2294,33 @@
static void EDIT_SetRectNP(EDITSTATE *es, LPRECT rc)
{
LONG_PTR ExStyle;
-
- CopyRect(&es->format_rect, rc);
+ INT bw, bh;
ExStyle = GetWindowLongPtrW(es->hwndSelf, GWL_EXSTYLE);
- if ((es->style & WS_POPUP) && !(ExStyle & WS_EX_CLIENTEDGE)) {
- if (es->style & WS_BORDER) {
- INT bw = GetSystemMetrics(SM_CXBORDER) + 1;
- es->format_rect.left += bw;
- es->format_rect.right -= bw;
- if (es->line_height + 2 * bw <=
- es->format_rect.bottom - es->format_rect.top) {
- es->format_rect.top += bw;
- es->format_rect.bottom -= bw;
- }
- }
- } else {
- if (es->line_height + 2 <=
- es->format_rect.bottom - es->format_rect.top) {
+
+ CopyRect(&es->format_rect, rc);
+
+ if (ExStyle & WS_EX_CLIENTEDGE) {
+ es->format_rect.left++;
+ es->format_rect.right--;
+
+ if (es->format_rect.bottom - es->format_rect.top
+ >= es->line_height + 2)
+ {
es->format_rect.top++;
es->format_rect.bottom--;
}
- es->format_rect.left++;
- es->format_rect.right--;
+ }
+ else if (es->style & WS_BORDER) {
+ bw = GetSystemMetrics(SM_CXBORDER) + 1;
+ bh = GetSystemMetrics(SM_CYBORDER) + 1;
+ es->format_rect.left += bw;
+ es->format_rect.right -= bw;
+ if (es->format_rect.bottom - es->format_rect.top
+ >= es->line_height + 2 * bh)
+ {
+ es->format_rect.top += bh;
+ es->format_rect.bottom -= bh;
+ }
}
es->format_rect.left += es->left_margin;
@@ -4712,6 +4717,7 @@
RECT rcRgn;
HBRUSH brush;
HBRUSH old_brush;
+ INT bw, bh;
BOOL rev = es->bEnableState &&
((es->flags & EF_FOCUSED) ||
(es->style & ES_NOHIDESEL));
@@ -4725,20 +4731,32 @@
/* paint the border and the background */
IntersectClipRect(dc, rcClient.left, rcClient.top, rcClient.right, rcClient.bottom);
+
if(es->style & WS_BORDER) {
+ bw = GetSystemMetrics(SM_CXBORDER);
+ bh = GetSystemMetrics(SM_CYBORDER);
rc = rcClient;
if(es->style & ES_MULTILINE) {
- if(es->style & WS_HSCROLL) rc.bottom++;
- if(es->style & WS_VSCROLL) rc.right++;
+ if(es->style & WS_HSCROLL) rc.bottom+=bh;
+ if(es->style & WS_VSCROLL) rc.right+=bw;
}
- old_brush = SelectObject(dc, brush);
- Rectangle(dc, rc.left, rc.top, rc.right, rc.bottom);
+
+ /* Draw the frame. Same code as in nonclient.c */
+ old_brush = SelectObject(dc, GetSysColorBrush(COLOR_WINDOWFRAME));
+ PatBlt(dc, rc.left, rc.top, rc.right - rc.left, bh, PATCOPY);
+ PatBlt(dc, rc.left, rc.top, bw, rc.bottom - rc.top, PATCOPY);
+ PatBlt(dc, rc.left, rc.bottom - 1, rc.right - rc.left, -bw, PATCOPY);
+ PatBlt(dc, rc.right - 1, rc.top, -bw, rc.bottom - rc.top, PATCOPY);
SelectObject(dc, old_brush);
+
+ /* Keep the border clean */
+ IntersectClipRect(dc, rc.left+bw, rc.top+bh,
+ max(rc.right-bw, rc.left+bw), max(rc.bottom-bh, rc.top+bh));
}
- else {
- GetClipBox(dc, &rc);
- FillRect(dc, &rc, brush);
- }
+
+ GetClipBox(dc, &rc);
+ FillRect(dc, &rc, brush);
+
IntersectClipRect(dc, es->format_rect.left,
es->format_rect.top,
es->format_rect.right,
Index: dlls/user/tests/edit.c
===================================================================
RCS file: /home/wine/wine/dlls/user/tests/edit.c,v
retrieving revision 1.11
diff -u -r1.11 edit.c
--- dlls/user/tests/edit.c 5 Jul 2005 14:04:25 -0000 1.11
+++ dlls/user/tests/edit.c 2 Sep 2005 14:50:49 -0000
@@ -38,9 +38,11 @@
static struct edit_notify notifications;
-static char szEditTest2Name[] = "Edit Test 2 window class";
static HINSTANCE hinst;
static HWND hwndET2;
+static char szEditTest2Class[] = "EditTest2Class";
+static char szEditTest3Class[] = "EditTest3Class";
+static char szEditTextPositionClass[] = "EditTextPositionWindowClass";
static HWND create_editcontrol (DWORD style, DWORD exstyle)
{
@@ -48,16 +50,59 @@
handle = CreateWindowEx(exstyle,
"EDIT",
- NULL,
+ "Test Text",
ES_AUTOHSCROLL | ES_AUTOVSCROLL | style,
10, 10, 300, 300,
- NULL, NULL, NULL, NULL);
+ NULL, NULL, hinst, NULL);
assert (handle);
if (winetest_interactive)
ShowWindow (handle, SW_SHOW);
return handle;
}
+static HWND create_child_editcontrol (DWORD style, DWORD exstyle)
+{
+ HWND parentWnd;
+ HWND editWnd;
+ RECT rect;
+
+ rect.left = 0;
+ rect.top = 0;
+ rect.right = 300;
+ rect.bottom = 300;
+ assert(AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE));
+
+ parentWnd = CreateWindowEx(0,
+ szEditTextPositionClass,
+ "Edit Test",
+ WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ rect.right - rect.left, rect.bottom - rect.top,
+ NULL, NULL, hinst, NULL);
+ assert(parentWnd);
+
+ editWnd = CreateWindowEx(exstyle,
+ "EDIT",
+ "Test Text",
+ WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | style,
+ 0, 0, 300, 300,
+ parentWnd, NULL, hinst, NULL);
+ assert(editWnd);
+ if (winetest_interactive)
+ ShowWindow (parentWnd, SW_SHOW);
+ return editWnd;
+}
+
+static void destroy_child_editcontrol (HWND hwndEdit)
+{
+ if (GetParent(hwndEdit))
+ DestroyWindow(GetParent(hwndEdit));
+ else {
+ trace("Edit control has no parent!\n");
+ DestroyWindow(hwndEdit);
+ }
+}
+
static LONG get_edit_style (HWND hwnd)
{
return GetWindowLongA( hwnd, GWL_STYLE ) & (
@@ -87,30 +132,29 @@
GetWindowRect(Wnd, &WindowRect);
GetClientRect(Wnd, &ClientRect);
- SetWindowPos(Wnd, NULL, WindowRect.left, WindowRect.top,
+ SetWindowPos(Wnd, NULL, 0, 0,
WindowRect.right - WindowRect.left,
- Height + (WindowRect.bottom - WindowRect.top) - (ClientRect.bottom - ClientRect.top),
- SWP_NOMOVE | SWP_NOZORDER);
-}
-
-#define edit_pos_ok(exp, got, txt) \
- ok(exp == got, "wrong " #txt " expected %d got %ld\n", exp, got);
-
-#define edit_todo_pos_ok(exp, got, txt, todo) \
- if (todo) todo_wine { edit_pos_ok(exp, got, txt); } \
- else edit_pos_ok(exp, got, txt)
+ Height + (WindowRect.bottom - WindowRect.top) -
+ (ClientRect.bottom - ClientRect.top),
+ SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
+
+ /* Workaround for a bug in Windows' edit control
+ (multi-line mode) */
+ GetWindowRect(Wnd, &WindowRect);
+ SetWindowPos(Wnd, NULL, 0, 0,
+ WindowRect.right - WindowRect.left + 1,
+ WindowRect.bottom - WindowRect.top + 1,
+ SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
+ SetWindowPos(Wnd, NULL, 0, 0,
+ WindowRect.right - WindowRect.left,
+ WindowRect.bottom - WindowRect.top,
+ SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
-#define check_pos(hwEdit, set_height, test_top, test_height, test_left, todo_top, todo_height, todo_left) \
-do { \
- RECT format_rect; \
- int left_margin; \
- set_client_height(hwEdit, set_height); \
- SendMessage(hwEdit, EM_GETRECT, 0, (LPARAM) &format_rect); \
- left_margin = LOWORD(SendMessage(hwEdit, EM_GETMARGINS, 0, 0)); \
- edit_todo_pos_ok(test_top, format_rect.top, vertical position, todo_top); \
- edit_todo_pos_ok((int)test_height, format_rect.bottom - format_rect.top, height, todo_height); \
- edit_todo_pos_ok(test_left, format_rect.left - left_margin, left, todo_left); \
-} while(0)
+ GetClientRect(Wnd, &ClientRect);
+ ok(ClientRect.bottom - ClientRect.top == Height,
+ "The client height should be %ld, but is %ld\n",
+ (long)Height, (long)(ClientRect.bottom - ClientRect.top));
+}
static void test_edit_control_1(void)
{
@@ -118,9 +162,6 @@
MSG msMessage;
int i;
LONG r;
- HFONT Font, OldFont;
- HDC Dc;
- TEXTMETRIC Metrics;
msMessage.message = WM_KEYDOWN;
@@ -175,260 +216,6 @@
"Expected DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTALLKEYS | DLGC_WANTARROWS got %lx\n", r);
}
DestroyWindow (hwEdit);
-
- /* Get a stock font for which we can determine the metrics */
- Font = GetStockObject(SYSTEM_FONT);
- assert(NULL != Font);
- Dc = GetDC(NULL);
- assert(NULL != Dc);
- OldFont = SelectObject(Dc, Font);
- assert(NULL != OldFont);
- if (! GetTextMetrics(Dc, &Metrics))
- {
- assert(FALSE);
- }
- SelectObject(Dc, OldFont);
- ReleaseDC(NULL, Dc);
-
- trace("EDIT: Text position\n");
- hwEdit = create_editcontrol(0, 0);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, 0);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 1, 1, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(0, WS_EX_CLIENTEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, WS_EX_CLIENTEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(0, WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 1, 1, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(0, WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP, 0);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 0, Metrics.tmHeight , 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 0, Metrics.tmHeight , 0, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP | WS_BORDER, 0);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 0, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 3, 0, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 2, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 2, Metrics.tmHeight , 2, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP, WS_EX_CLIENTEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP | WS_BORDER, WS_EX_CLIENTEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP, WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 0, Metrics.tmHeight , 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 0, Metrics.tmHeight , 0, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 0, Metrics.tmHeight , 0, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP | WS_BORDER, WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 0, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 3, 0, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 2, Metrics.tmHeight , 2, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 2, Metrics.tmHeight , 2, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP, WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_POPUP | WS_BORDER, WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(0, ES_MULTILINE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, ES_MULTILINE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 1, 1, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(0, ES_MULTILINE | WS_EX_CLIENTEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, ES_MULTILINE | WS_EX_CLIENTEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(0, ES_MULTILINE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, ES_MULTILINE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 1, 1, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 1, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(0, ES_MULTILINE | WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
-
- hwEdit = create_editcontrol(WS_BORDER, ES_MULTILINE | WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
- SendMessage(hwEdit, WM_SETFONT, (WPARAM) Font, (LPARAM) FALSE);
- check_pos(hwEdit, Metrics.tmHeight - 1, 0, Metrics.tmHeight - 1, 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight , 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 1, 0, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 2, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 4, 1, Metrics.tmHeight , 1, 0, 0, 0);
- check_pos(hwEdit, Metrics.tmHeight + 10, 1, Metrics.tmHeight , 1, 0, 0, 0);
- DestroyWindow(hwEdit);
}
/* WM_SETTEXT is implemented by selecting all text, and then replacing the
@@ -443,7 +230,7 @@
char szLocalString[MAXLEN];
/* Create main and edit windows. */
- hwndMain = CreateWindow(szEditTest2Name, "ET2", WS_OVERLAPPEDWINDOW,
+ hwndMain = CreateWindow(szEditTest2Class, "ET2", WS_OVERLAPPEDWINDOW,
0, 0, 200, 200, NULL, NULL, hinst, NULL);
assert(hwndMain);
if (winetest_interactive)
@@ -496,24 +283,6 @@
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
-static BOOL RegisterWindowClasses (void)
-{
- WNDCLASSA cls;
- cls.style = 0;
- cls.lpfnWndProc = ET2_WndProc;
- cls.cbClsExtra = 0;
- cls.cbWndExtra = 0;
- cls.hInstance = hinst;
- cls.hIcon = NULL;
- cls.hCursor = LoadCursorA (NULL, IDC_ARROW);
- cls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- cls.lpszMenuName = NULL;
- cls.lpszClassName = szEditTest2Name;
- if (!RegisterClassA (&cls)) return FALSE;
-
- return TRUE;
-}
-
static void zero_notify(void)
{
notifications.en_change = 0;
@@ -555,7 +324,6 @@
*/
static void test_edit_control_3(void)
{
- WNDCLASSA cls;
HWND hWnd;
HWND hParent;
int len;
@@ -564,21 +332,8 @@
trace("EDIT: Test notifications\n");
- cls.style = 0;
- cls.lpfnWndProc = edit3_wnd_procA;
- cls.cbClsExtra = 0;
- cls.cbWndExtra = 0;
- cls.hInstance = GetModuleHandleA(0);
- cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
- cls.hbrBackground = GetStockObject(WHITE_BRUSH);
- cls.lpszMenuName = NULL;
- cls.lpszClassName = "ParentWindowClass";
-
- assert(RegisterClassA(&cls));
-
hParent = CreateWindowExA(0,
- "ParentWindowClass",
+ szEditTest3Class,
NULL,
0,
CW_USEDEFAULT, CW_USEDEFAULT, 10, 10,
@@ -974,15 +729,210 @@
DestroyWindow (hwEdit);
}
+#define edit_pos_ok(exp, got, txt) \
+ ok(exp == got, "wrong " #txt " expected %d got %ld\n", exp, got);
+
+#define check_pos(hwEdit, set_height, test_top, test_height, test_left) \
+do { \
+ RECT format_rect; \
+ int left_margin; \
+ set_client_height(hwEdit, set_height); \
+ SendMessage(hwEdit, EM_GETRECT, 0, (LPARAM) &format_rect); \
+ left_margin = LOWORD(SendMessage(hwEdit, EM_GETMARGINS, 0, 0)); \
+ edit_pos_ok(test_top, format_rect.top, vertical position); \
+ edit_pos_ok((int)test_height, format_rect.bottom - format_rect.top, height); \
+ edit_pos_ok(test_left, format_rect.left - left_margin, left); \
+} while(0)
+
+void test_text_position_style(DWORD style)
+{
+ HWND hwEdit;
+ HFONT font, oldFont;
+ HDC dc;
+ TEXTMETRIC metrics;
+ INT b, bm, b2, b3;
+ BOOL single_line = !(style & ES_MULTILINE);
+
+ b = GetSystemMetrics(SM_CYBORDER) + 1;
+ b2 = 2 * b;
+ b3 = 3 * b;
+ bm = b2 - 1;
+
+ /* Get a stock font for which we can determine the metrics */
+ assert(font = GetStockObject(SYSTEM_FONT));
+ assert(dc = GetDC(NULL));
+ oldFont = SelectObject(dc, font);
+ assert(GetTextMetrics(dc, &metrics));
+ SelectObject(dc, oldFont);
+ ReleaseDC(NULL, dc);
+
+ /* Windows' edit control has some bugs in multi-line mode:
+ * - Sometimes the format rectangle doesn't get updated
+ * (see workaround in set_client_height())
+ * - If the height of the control is smaller than the height of a text
+ * line, the format rectangle is still as high as a text line
+ * (higher than the client rectangle) and the caret is not shown
+ */
+
+ /* Edit controls that are in a parent window */
+
+ hwEdit = create_child_editcontrol(style, 0);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 0);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 0);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 0);
+ check_pos(hwEdit, metrics.tmHeight + 2, 0, metrics.tmHeight , 0);
+ check_pos(hwEdit, metrics.tmHeight + 10, 0, metrics.tmHeight , 0);
+ destroy_child_editcontrol(hwEdit);
+
+ hwEdit = create_child_editcontrol(style | WS_BORDER, 0);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, b);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + bm, 0, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + b2, b, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + b3, b, metrics.tmHeight , b);
+ destroy_child_editcontrol(hwEdit);
+
+ hwEdit = create_child_editcontrol(style, WS_EX_CLIENTEDGE);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1);
+ destroy_child_editcontrol(hwEdit);
+
+ hwEdit = create_child_editcontrol(style | WS_BORDER, WS_EX_CLIENTEDGE);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1);
+ destroy_child_editcontrol(hwEdit);
+
+
+ /* Edit controls that are popup windows */
+
+ hwEdit = create_editcontrol(style | WS_POPUP, 0);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 0);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 0);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 0);
+ check_pos(hwEdit, metrics.tmHeight + 2, 0, metrics.tmHeight , 0);
+ check_pos(hwEdit, metrics.tmHeight + 10, 0, metrics.tmHeight , 0);
+ DestroyWindow(hwEdit);
+
+ hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, 0);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, b);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + bm, 0, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + b2, b, metrics.tmHeight , b);
+ check_pos(hwEdit, metrics.tmHeight + b3, b, metrics.tmHeight , b);
+ DestroyWindow(hwEdit);
+
+ hwEdit = create_editcontrol(style | WS_POPUP, WS_EX_CLIENTEDGE);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1);
+ DestroyWindow(hwEdit);
+
+ hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, WS_EX_CLIENTEDGE);
+ SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+ if (single_line)
+ check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1);
+ check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1);
+ check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1);
+ DestroyWindow(hwEdit);
+}
+
+void test_text_position(void)
+{
+ trace("EDIT: Text position (Single line)\n");
+ test_text_position_style(0);
+ trace("EDIT: Text position (Multi line)\n");
+ test_text_position_style(ES_MULTILINE);
+}
+
+static BOOL RegisterWindowClasses (void)
+{
+ WNDCLASSA test2;
+ WNDCLASSA test3;
+ WNDCLASSA text_position;
+
+ test2.style = 0;
+ test2.lpfnWndProc = ET2_WndProc;
+ test2.cbClsExtra = 0;
+ test2.cbWndExtra = 0;
+ test2.hInstance = hinst;
+ test2.hIcon = NULL;
+ test2.hCursor = LoadCursorA (NULL, IDC_ARROW);
+ test2.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
+ test2.lpszMenuName = NULL;
+ test2.lpszClassName = szEditTest2Class;
+ if (!RegisterClassA(&test2)) return FALSE;
+
+ test3.style = 0;
+ test3.lpfnWndProc = edit3_wnd_procA;
+ test3.cbClsExtra = 0;
+ test3.cbWndExtra = 0;
+ test3.hInstance = hinst;
+ test3.hIcon = 0;
+ test3.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ test3.hbrBackground = GetStockObject(WHITE_BRUSH);
+ test3.lpszMenuName = NULL;
+ test3.lpszClassName = szEditTest3Class;
+ if (!RegisterClassA(&test3)) return FALSE;
+
+ text_position.style = CS_HREDRAW | CS_VREDRAW;
+ text_position.cbClsExtra = 0;
+ text_position.cbWndExtra = 0;
+ text_position.hInstance = hinst;
+ text_position.hIcon = NULL;
+ text_position.hCursor = LoadCursorA(NULL, MAKEINTRESOURCEA(IDC_ARROW));
+ text_position.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
+ text_position.lpszMenuName = NULL;
+ text_position.lpszClassName = szEditTextPositionClass;
+ text_position.lpfnWndProc = DefWindowProc;
+ if (!RegisterClassA(&text_position)) return FALSE;
+
+ return TRUE;
+}
+
+static void UnregisterWindowClasses (void)
+{
+ UnregisterClassA(szEditTest2Class, hinst);
+ UnregisterClassA(szEditTest3Class, hinst);
+ UnregisterClassA(szEditTextPositionClass, hinst);
+}
+
START_TEST(edit)
{
- hinst = GetModuleHandleA (NULL);
- if (!RegisterWindowClasses())
- assert(0);
+ hinst = GetModuleHandleA(NULL);
+ assert(RegisterWindowClasses());
test_edit_control_1();
test_edit_control_2();
test_edit_control_3();
test_edit_control_4();
test_margins();
+ test_text_position();
+
+ UnregisterWindowClasses();
}
More information about the wine-patches
mailing list