Release 971116
Sun Nov 16 07:42:44 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [windows/dce.c] [windows/clipboard.c] [windows/nonclient.c]
Bug fixes.
* [misc/shell.c] [resources/*]
New "About" dialog.
Sat Nov 15 17:30:18 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure.in] [Makefile.in]
Replaced --with-library option by --disable-emulator. The default
is now to build both the library and the emulator.
Renamed --with options to --enable to follow autoconf guidelines.
* [loader/main.c] [miscemu/main.c] (New file)
Split initialization in WinelibInit/EmulatorInit.
* [loader/*.c]
Removed all remaining #ifdef's WINELIB.
* [controls/widgets.c] [windows/mdi.c]
Converted MDIClientWndProc to 32-bit.
* [debugger/break.c] [if1632/signal.c] [include/selectors.h]
[scheduler/thread.c]
Code and data selector values are now computed at run-time.
* [library/libres.c]
Moved to loader/ directory.
* [misc/main.c] [misc/version.c] (New file)
Moved all version stuff to version.c. Cleaned up a bit.
* [msdos/dpmi.c]
Update the REALMODECALL structure on return from real-mode
interrupt.
* [windows/event.c] [windows/keyboard.c]
Changed the way event coordinates are determined. Don't rely on
the ConfigureNotify event values. This should fix all problems
with cursor position in -desktop and -managed modes.
Sat Nov 15 16:09:36 1997 Slaven Rezic <eserte@cs.tu-berlin.de>
* [controls/button.c]
(BUTTON_CheckAutoRadioButton): Prevent possible endless loop.
Wed Nov 12 03:42:45 1997 Chris Faherty <chrisf@america.com>
* [misc/ver.c]
Changed VerInstall32A to assume srcdir as destination if destdir
is blank. This was causing alot of DLL installation into SYSTEM
directory to fail.
* [loader/ne_image.c]
NE_LoadSegment buffer[100] was too small and getting overruns.
Changed it to buffer[200].
Sat Nov 8 06:09:57 1997 Len White <phreak@cgocable.net>
* [misc/ddeml.c] [include/ddeml.h] [if1632/ddeml.spec]
Added stub functions DdeConnectList(), DdeQueryNextServer(),
DdeDisconnectList(), DdeSetUserHandle(), DdeAbandonTransaction(),
DdePostAdvise(), DdeCreateDataHandle(), DdeAddData(), DdeGetData(),
DdeAccessData(), DdeUnaccessData(), DdeEnableCallback(),
DdeCmpStringHandles().
Fri Nov 7 19:44:26 1997 Olaf Flebbe <o.flebbe@science-computing.de>
* [files/directory.c]
Fix typo in directory.c [broke loading of cdplayer on nt40]
* [misc/main.c]
Implemented -winver nt40.
* [loader/resource.c] [user32.spec]
Stubs for CopyAcceleratorTable, Destroy AcceleratorTable.
Thu Nov 6 22:37:04 1997 Morten Welinder <welinder@rentec.com>
* [files/drive.c]
(GetDiskFreeSpace32A): Cap at 2GB.
* [include/windows.h]
Prototype DrawIconEx and CreateDIBSection32.
Define OBM_RADIOCHECK.
Add DI_* macros.
* [objects/dib.c] [if1632/gdi.spec]
CreateDIBSection is a WINAPI. Renamed to CreateDIBSection32.
Implement CreateDIBSection16.
* [if1632/user.spec] [if1632/user32.spec]
Add DrawIconEx.
* [objects/cursoricon.c]
(CopyIcon32): Fix bogus implementation.
* [objects/bitmap.c]
(CopyBitmap32): New function.
(CopyImage32): Do bitmaps.
* [graphics/x11drv/text.c]
(X11DRV_ExtTextOut): Change ascent and descent default to avoid
zero-thinkness overstrike line.
* [include/debugstr.h] [misc/debugstr.c]
New files.
* [msdos/dpmi.c]
Don't prototype do_mscdex. In INT_Int31Handler, handle real-mode
int 0x21, ah=0x52.
* [msdos/int2f.c]
Add dummys for 0x1681 and 0x1682.
* [misc/registry.c]
Fix memory leaks in RegDeleteKey32W.
* [objects/text.c]
In TEXT_NextLine, fix another off-by-one bug.
* [include/bitmaps/obm_radiocheck]
New file. (It a small circle used to radio-button menu items
when selected.)
* [objects/oembitmap.c]
Add obm_radiocheck.
* [include/windows.h] [if1632/user32.spec] [controls/menu.c]
[if1632/user.spec]
Define CheckMenuRadioItem{16,32}. Define GetMenuItemRect{16,32}.
Wed Nov 5 11:30:14 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [misc/main.c]
Auto adjust versions depending on binary.
Tue Nov 4 15:21:00 1997 Kristian Nielsen <kristian.nielsen@risoe.dk>
* [controls/listbox.c]
Paint full background in listbox items with tab stops enabled.
* [if1632/thunk.c]
Copy some more message parameter structures (DRAWITEMSTRUCT16,
COMPAREITEMSTRUCT16) to the stack segment to fix broken programs
that need this.
* [windows/dce.c]
Only clip sibling windows when the parent has the WS_CLIPSIBLINGS
style set.
* [windows/focus.c]
Make order of events in FOCUS_SwitchFocus() reflect API docs.
* [windows/defdlg.c]
Fix problem with loss of focus in some dialogs.
* [win32/code_page.c]
Fix return value for MultiByteToWideChar().
* [BUGS]
BCW now works.
diff --git a/controls/Makefile.in b/controls/Makefile.in
index 2974ba5..3a64a7b 100644
--- a/controls/Makefile.in
+++ b/controls/Makefile.in
@@ -1,4 +1,4 @@
-DEFS = -D__WINE__
+DEFS = @DLLFLAGS@ -D__WINE__
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ..
SRCDIR = @srcdir@
diff --git a/controls/button.c b/controls/button.c
index 27e73c4..836070d 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -110,15 +110,16 @@
return 0;
case WM_ERASEBKGND:
- break;
+ return 1;
case WM_PAINT:
if (btnPaintFunc[style])
{
PAINTSTRUCT32 ps;
- HDC32 hdc = BeginPaint32( hWnd, &ps );
+ HDC32 hdc = wParam ? (HDC32)wParam : BeginPaint32( hWnd, &ps );
+ SetBkMode32( hdc, OPAQUE );
(btnPaintFunc[style])( wndPtr, hdc, ODA_DRAWENTIRE );
- EndPaint32( hWnd, &ps );
+ if( !wParam ) EndPaint32( hWnd, &ps );
}
break;
@@ -384,7 +385,15 @@
rbox = rtext = client;
if (infoPtr->hFont) SelectObject32( hDC, infoPtr->hFont );
- hBrush = BUTTON_SEND_CTLCOLOR( wndPtr, hDC );
+
+ /* Something is still not right, checkboxes (and edit controls)
+ * in wsping32 have white backgrounds instead of dark grey.
+ * BUTTON_SEND_CTLCOLOR() is even worse since it returns 0 in this
+ * particular case and the background is not painted at all.
+ */
+
+ hBrush = GetControlBrush( wndPtr->hwndSelf, hDC, CTLCOLOR_BTN );
+
if (wndPtr->dwStyle & BS_LEFTTEXT)
{
/* magic +4 is what CTL3D expects */
@@ -423,6 +432,7 @@
SetTextColor32( hDC, GetSysColor32(COLOR_GRAYTEXT) );
DrawText16( hDC, wndPtr->text, textlen, &rtext,
DT_SINGLELINE | DT_VCENTER );
+ textlen = 0; /* skip DrawText() below */
}
}
@@ -453,14 +463,19 @@
*/
static void BUTTON_CheckAutoRadioButton( WND *wndPtr )
{
- HWND32 parent, sibling;
+ HWND32 parent, sibling, start;
if (!(wndPtr->dwStyle & WS_CHILD)) return;
parent = wndPtr->parent->hwndSelf;
- for(sibling = GetNextDlgGroupItem32( parent, wndPtr->hwndSelf, FALSE );
- sibling != wndPtr->hwndSelf && sibling != 0;
- sibling = GetNextDlgGroupItem32( parent, sibling, FALSE ))
- if((WIN_FindWndPtr(sibling)->dwStyle & 0x0f) == BS_AUTORADIOBUTTON)
- SendMessage32A( sibling, BM_SETCHECK32, BUTTON_UNCHECKED, 0 );
+ /* assure that starting control is not disabled or invisible */
+ start = sibling = GetNextDlgGroupItem32( parent, wndPtr->hwndSelf, TRUE );
+ do
+ {
+ if (!sibling) break;
+ if ((wndPtr->hwndSelf != sibling) &&
+ ((WIN_FindWndPtr(sibling)->dwStyle & 0x0f) == BS_AUTORADIOBUTTON))
+ SendMessage32A( sibling, BM_SETCHECK32, BUTTON_UNCHECKED, 0 );
+ sibling = GetNextDlgGroupItem32( parent, sibling, FALSE );
+ } while (sibling != start);
}
@@ -506,9 +521,9 @@
GetClientRect16( wndPtr->hwndSelf, &rc);
if (infoPtr->hFont) SelectObject32( hDC, infoPtr->hFont );
- hBrush = BUTTON_SEND_CTLCOLOR( wndPtr, hDC );
- FillRect16( hDC, &rc, hBrush );
+ hBrush = GetControlBrush( wndPtr->hwndSelf, hDC, CTLCOLOR_BTN );
+ FillRect16( hDC, &rc, hBrush );
if ((action == ODA_FOCUS) ||
((action == ODA_DRAWENTIRE) && (infoPtr->state & BUTTON_HASFOCUS)))
DrawFocusRect16( hDC, &rc );
diff --git a/controls/edit.c b/controls/edit.c
index c6bcafe..a285895 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -1055,24 +1055,33 @@
dc = GetDC32(wnd->hwndSelf);
if (es->font)
old_font = SelectObject32(dc, es->font);
- if (x < 0) {
- x = -x;
- /* FIXME: inefficient algorithm */
- for (index = es->x_offset ; index ; index--) {
- GetTextExtentPoint32A(dc, text + index,
- es->x_offset - index, &size);
- if (size.cx > x)
- break;
- }
- } else {
- INT32 len = lstrlen32A(es->text);
- /* FIXME: inefficient algorithm */
- for (index = es->x_offset ; index < len ; index++) {
- GetTextExtentPoint32A(dc, text + es->x_offset,
- index - es->x_offset, &size);
- if (size.cx >= x)
- break;
- }
+ if (x < 0)
+ {
+ INT32 low = 0;
+ INT32 high = es->x_offset;
+ while (low < high - 1)
+ {
+ INT32 mid = (low + high) / 2;
+ GetTextExtentPoint32A( dc, text + mid,
+ es->x_offset - mid, &size );
+ if (size.cx > -x) low = mid;
+ else high = mid;
+ }
+ index = low;
+ }
+ else
+ {
+ INT32 low = es->x_offset;
+ INT32 high = lstrlen32A(es->text) + 1;
+ while (low < high - 1)
+ {
+ INT32 mid = (low + high) / 2;
+ GetTextExtentPoint32A( dc, text + es->x_offset,
+ mid - es->x_offset, &size );
+ if (size.cx > x) high = mid;
+ else low = mid;
+ }
+ index = low;
}
if (es->style & ES_PASSWORD)
HeapFree(es->heap, 0 ,text);
diff --git a/controls/listbox.c b/controls/listbox.c
index 165f483..f163c47 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -492,9 +492,14 @@
ETO_OPAQUE | ETO_CLIPPED, rect, item->str,
strlen(item->str), NULL );
else
+ {
+ /* Output empty string to paint background in the full width. */
+ ExtTextOut32A( hdc, rect->left + 1, rect->top + 1,
+ ETO_OPAQUE | ETO_CLIPPED, rect, NULL, 0, NULL );
TabbedTextOut32A( hdc, rect->left + 1 , rect->top + 1,
item->str, strlen(item->str),
descr->nb_tabs, descr->tabs, 0);
+ }
if (item && item->selected)
{
SetBkColor32( hdc, oldBk );
diff --git a/controls/menu.c b/controls/menu.c
index a31b2f1..35a89f1 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -3,6 +3,7 @@
*
* Copyright 1993 Martin Ayotte
* Copyright 1994 Alexandre Julliard
+ * Copyright 1997 Morten Welinder
*/
/*
@@ -142,6 +143,7 @@
static WORD check_bitmap_width = 0, check_bitmap_height = 0;
static WORD arrow_bitmap_width = 0, arrow_bitmap_height = 0;
+static HBITMAP32 hStdRadioCheck = 0;
static HBITMAP32 hStdCheck = 0;
static HBITMAP32 hStdMnArrow = 0;
static HBRUSH32 hShadeBrush = 0;
@@ -316,38 +318,50 @@
*/
BOOL32 MENU_Init()
{
- /* Load menu bitmaps */
+ HBITMAP32 hBitmap;
+ static unsigned char shade_bits[16] = { 0x55, 0, 0xAA, 0,
+ 0x55, 0, 0xAA, 0,
+ 0x55, 0, 0xAA, 0,
+ 0x55, 0, 0xAA, 0 };
- if ((hStdCheck = LoadBitmap32A( 0, (LPSTR)MAKEINTRESOURCE(OBM_CHECK) )))
+ /* Load menu bitmaps */
+ hStdCheck = LoadBitmap32A(0, (LPSTR)MAKEINTRESOURCE(OBM_CHECK));
+ hStdRadioCheck = LoadBitmap32A(0, (LPSTR)MAKEINTRESOURCE(OBM_RADIOCHECK));
+ hStdMnArrow = LoadBitmap32A(0, (LPSTR)MAKEINTRESOURCE(OBM_MNARROW));
+
+ if (hStdCheck)
{
BITMAP32 bm;
-
GetObject32A( hStdCheck, sizeof(bm), &bm );
check_bitmap_width = bm.bmWidth;
check_bitmap_height = bm.bmHeight;
+ } else
+ return FALSE;
- if ((hStdMnArrow = LoadBitmap32A(0,(LPSTR)MAKEINTRESOURCE(OBM_MNARROW))))
+ /* Assume that radio checks have the same size as regular check. */
+ if (!hStdRadioCheck)
+ return FALSE;
+
+ if (hStdMnArrow)
{
- HBITMAP32 hBitmap;
- static unsigned char shade_bits[16] = { 0x55, 0, 0xAA, 0,
- 0x55, 0, 0xAA, 0,
- 0x55, 0, 0xAA, 0,
- 0x55, 0, 0xAA, 0 };
+ BITMAP32 bm;
GetObject32A( hStdMnArrow, sizeof(bm), &bm );
arrow_bitmap_width = bm.bmWidth;
arrow_bitmap_height = bm.bmHeight;
+ } else
+ return FALSE;
- if((hBitmap = CreateBitmap32( 8, 8, 1, 1, shade_bits)))
+ if ((hBitmap = CreateBitmap32( 8, 8, 1, 1, shade_bits)))
{
if((hShadeBrush = CreatePatternBrush32( hBitmap )))
{
DeleteObject32( hBitmap );
- if((MENU_DefSysPopup = MENU_CopySysPopup())) return TRUE;
- }
- }
+ if ((MENU_DefSysPopup = MENU_CopySysPopup()))
+ return TRUE;
}
}
- return FALSE; /* failure */
+
+ return FALSE;
}
/***********************************************************************
@@ -720,7 +734,7 @@
/***********************************************************************
* MENU_MenuBarCalcSize
*
- * FIXME: Word 6 implements it's own MDI and it's 'close window' bitmap
+ * FIXME: Word 6 implements its own MDI and its own 'close window' bitmap
* height is off by 1 pixel which causes lengthy window relocations when
* active document window is maximized/restored.
*
@@ -936,10 +950,16 @@
*/
if (lpitem->fState & MF_CHECKED)
- GRAPH_DrawBitmap( hdc, lpitem->hCheckBit ? lpitem->hCheckBit
- : hStdCheck, rect.left, (y - check_bitmap_height) / 2,
- 0, 0, check_bitmap_width, check_bitmap_height, TRUE );
- else if (lpitem->hUnCheckBit)
+ {
+ HBITMAP32 bm =
+ lpitem->hCheckBit ? lpitem->hCheckBit :
+ ((lpitem->fType & MFT_RADIOCHECK)
+ ? hStdRadioCheck : hStdCheck);
+ GRAPH_DrawBitmap( hdc, bm, rect.left,
+ (y - check_bitmap_height) / 2,
+ 0, 0, check_bitmap_width,
+ check_bitmap_height, TRUE );
+ } else if (lpitem->hUnCheckBit)
GRAPH_DrawBitmap( hdc, lpitem->hUnCheckBit, rect.left,
(y - check_bitmap_height) / 2, 0, 0,
check_bitmap_width, check_bitmap_height, TRUE );
@@ -3872,3 +3892,105 @@
MENUITEM *item = MENU_InsertItem(hMenu, uItem, bypos);
return SetMenuItemInfo32_common(item, (const MENUITEMINFO32A*)lpmii, TRUE);
}
+
+/**********************************************************************
+ * CheckMenuRadioItem32 (USER32.47)
+ */
+
+BOOL32 WINAPI CheckMenuRadioItem32(HMENU32 hMenu,
+ UINT32 first, UINT32 last, UINT32 check,
+ BOOL32 bypos)
+{
+ MENUITEM *mifirst, *milast, *micheck;
+ HMENU32 mfirst = hMenu, mlast = hMenu, mcheck = hMenu;
+
+ dprintf_menu (stddeb,
+ "CheckMenuRadioItem32: ox%x: %d-%d, check %d, bypos=%d\n",
+ hMenu, first, last, check, bypos);
+
+ mifirst = MENU_FindItem (&mfirst, &first, bypos);
+ milast = MENU_FindItem (&mlast, &last, bypos);
+ micheck = MENU_FindItem (&mcheck, &check, bypos);
+
+ if (mifirst == NULL || milast == NULL || micheck == NULL ||
+ mifirst > milast || mfirst != mlast || mfirst != mcheck ||
+ micheck > milast || micheck < mifirst)
+ return FALSE;
+
+ while (mifirst <= milast)
+ {
+ if (mifirst == micheck)
+ {
+ mifirst->fType |= MFT_RADIOCHECK;
+ mifirst->fState |= MFS_CHECKED;
+ } else {
+ mifirst->fType &= ~MFT_RADIOCHECK;
+ mifirst->fState &= ~MFS_CHECKED;
+ }
+ mifirst++;
+ }
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * CheckMenuRadioItem16 (not a Windows API)
+ */
+
+BOOL16 WINAPI CheckMenuRadioItem16(HMENU16 hMenu,
+ UINT16 first, UINT16 last, UINT16 check,
+ BOOL16 bypos)
+{
+ return CheckMenuRadioItem32 (hMenu, first, last, check, bypos);
+}
+
+/**********************************************************************
+ * GetMenuItemRect32 (USER32.266)
+ */
+
+BOOL32 WINAPI GetMenuItemRect32 (HWND32 hwnd, HMENU32 hMenu, UINT32 uItem,
+ LPRECT32 rect)
+{
+ RECT32 saverect, clientrect;
+ BOOL32 barp;
+ HDC32 hdc;
+ WND *wndPtr;
+ MENUITEM *item;
+ HMENU32 orghMenu = hMenu;
+
+ dprintf_menu (stddeb, "GetMenuItemRect32 (0x%x,0x%x,%d,%p)\n",
+ hwnd, hMenu, uItem, rect);
+
+ item = MENU_FindItem (&hMenu, &uItem, MF_BYPOSITION);
+ wndPtr = WIN_FindWndPtr (hwnd);
+ if (!rect || !item || !wndPtr) return FALSE;
+
+ GetClientRect32( hwnd, &clientrect );
+ hdc = GetDCEx32( hwnd, 0, DCX_CACHE | DCX_WINDOW );
+ barp = (hMenu == orghMenu);
+
+ saverect = item->rect;
+ MENU_CalcItemSize (hdc, item, hwnd,
+ clientrect.left, clientrect.top, barp);
+ *rect = item->rect;
+ item->rect = saverect;
+
+ ReleaseDC32( hwnd, hdc );
+ return TRUE;
+}
+
+/**********************************************************************
+ * GetMenuItemRect16 (USER.665)
+ */
+
+BOOL16 WINAPI GetMenuItemRect16 (HWND16 hwnd, HMENU16 hMenu, UINT16 uItem,
+ LPRECT16 rect)
+{
+ RECT32 r32;
+ BOOL32 res;
+
+ if (!rect) return FALSE;
+ res = GetMenuItemRect32 (hwnd, hMenu, uItem, &r32);
+ CONV_RECT32TO16 (&r32, rect);
+ return res;
+}
diff --git a/controls/static.c b/controls/static.c
index 0e565f2..9f1e680 100644
--- a/controls/static.c
+++ b/controls/static.c
@@ -84,7 +84,7 @@
{
HICON16 prevIcon;
STATICINFO *infoPtr = (STATICINFO *)wndPtr->wExtra;
- BITMAPOBJ *info = GDI_HEAP_LOCK(hicon);
+ BITMAPOBJ *info = (BITMAPOBJ *)GDI_HEAP_LOCK(hicon);
if ((wndPtr->dwStyle & SS_TYPEMASK) != SS_BITMAP) return 0;
if (hicon && !info) {
diff --git a/controls/widgets.c b/controls/widgets.c
index 81af00a..acb9560 100644
--- a/controls/widgets.c
+++ b/controls/widgets.c
@@ -32,31 +32,9 @@
extern LRESULT WINAPI IconTitleWndProc( HWND32 hwnd, UINT32 msg,
WPARAM32 wParam, LPARAM lParam );
-/* Win16 class info */
+/* Built-in classes */
-typedef struct
-{
- UINT16 style;
- INT16 wndExtra;
- HBRUSH16 background;
- LPCSTR procName;
- LPCSTR className;
-} BUILTIN_CLASS_INFO16;
-
-/* Win16 built-in classes */
-
-static const BUILTIN_CLASS_INFO16 WIDGETS_BuiltinClasses16[] =
-{
- { CS_GLOBALCLASS, sizeof(MDICLIENTINFO),
- STOCK_LTGRAY_BRUSH, "MDIClientWndProc", "MDIClient" }
-};
-
-#define NB_BUILTIN_CLASSES16 \
- (sizeof(WIDGETS_BuiltinClasses16)/sizeof(WIDGETS_BuiltinClasses16[0]))
-
-/* Win32 built-in classes */
-
-static WNDCLASS32A WIDGETS_BuiltinClasses32[BIC32_NB_CLASSES] =
+static WNDCLASS32A WIDGETS_BuiltinClasses[BIC32_NB_CLASSES] =
{
/* BIC32_BUTTON */
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
@@ -82,6 +60,9 @@
/* BIC32_SCROLL */
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
ScrollBarWndProc, 0, sizeof(SCROLLBAR_INFO), 0, 0, IDC_ARROW, 0, 0, "ScrollBar"},
+ /* BIC32_MDICLIENT */
+ { CS_GLOBALCLASS, MDIClientWndProc,
+ 0, sizeof(MDICLIENTINFO), 0, 0, 0, STOCK_LTGRAY_BRUSH, 0, "MDIClient" },
/* BIC32_DESKTOP */
{ CS_GLOBALCLASS, DesktopWndProc, 0, sizeof(DESKTOPINFO),
0, 0, IDC_ARROW, 0, 0, DESKTOP_CLASS_NAME },
@@ -103,45 +84,22 @@
BOOL32 WIDGETS_Init(void)
{
int i;
- char *name;
- const BUILTIN_CLASS_INFO16 *info16 = WIDGETS_BuiltinClasses16;
- WNDCLASS16 class16;
- WNDCLASS32A *class32 = WIDGETS_BuiltinClasses32;
+ WNDCLASS32A *cls = WIDGETS_BuiltinClasses;
- if (!(name = SEGPTR_ALLOC( 20 * sizeof(char) ))) return FALSE;
+ /* Create builtin classes */
- /* Create 16-bit classes */
-
- class16.cbClsExtra = 0;
- class16.hInstance = 0;
- class16.hIcon = 0;
- class16.hCursor = LoadCursor16( 0, IDC_ARROW );
- class16.lpszMenuName = (SEGPTR)0;
- class16.lpszClassName = SEGPTR_GET(name);
- for (i = 0; i < NB_BUILTIN_CLASSES16; i++, info16++)
+ for (i = 0; i < BIC32_NB_CLASSES; i++, cls++)
{
- class16.style = info16->style;
- class16.lpfnWndProc = (WNDPROC16)MODULE_GetWndProcEntry16( info16->procName );
- class16.cbWndExtra = info16->wndExtra;
- class16.hbrBackground = info16->background;
- strcpy( name, info16->className );
- if (!RegisterClass16( &class16 )) return FALSE;
- }
-
- /* Create 32-bit classes */
-
- for (i = 0; i < BIC32_NB_CLASSES; i++, class32++)
- {
+ char name[20];
/* Just to make sure the string is > 0x10000 */
- strcpy( name, (char *)class32->lpszClassName );
- class32->lpszClassName = name;
- class32->hCursor = LoadCursor16( 0, class32->hCursor );
- if (!(bicAtomTable[i] = RegisterClass32A( class32 ))) return FALSE;
+ strcpy( name, (char *)cls->lpszClassName );
+ cls->lpszClassName = name;
+ cls->hCursor = LoadCursor16( 0, cls->hCursor );
+ if (!(bicAtomTable[i] = RegisterClass32A( cls ))) return FALSE;
}
/* FIXME: hack to enable using built-in controls with Windows COMCTL32 */
InitCommonControls();
- SEGPTR_FREE(name);
return TRUE;
}