From b52072a7f8d7abc4e9aefc1f8c045f9a63840365 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Sat, 21 Aug 1999 00:41:24 +0000 Subject: [PATCH] Improvements by Hans Breuer: * gdk/win32/gdkwindow.c (RegisterGdkClass): New function * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the CS_?REDRAW flags as they cause lots of (late) redraws when "show window contents while dragging" is turned on. Allocate at least one unique class for every GdkWindowType. If support for single window-specific icons is ever needed (eg. Dialog specific), every such window should get its own class. --- ChangeLog | 13 +++ ChangeLog.pre-2-0 | 13 +++ ChangeLog.pre-2-10 | 13 +++ ChangeLog.pre-2-2 | 13 +++ ChangeLog.pre-2-4 | 13 +++ ChangeLog.pre-2-6 | 13 +++ ChangeLog.pre-2-8 | 13 +++ gdk/win32/gdkwindow-win32.c | 200 ++++++++++++++++++++++-------------- gdk/win32/gdkwindow.c | 200 ++++++++++++++++++++++-------------- 9 files changed, 335 insertions(+), 156 deletions(-) diff --git a/ChangeLog b/ChangeLog index fb29e87ea3..3eecbed996 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +1999-08-21 Tor Lillqvist + + Improvements by Hans Breuer: + + * gdk/win32/gdkwindow.c (RegisterGdkClass): New function + + * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the + CS_?REDRAW flags as they cause lots of (late) redraws when "show + window contents while dragging" is turned on. Allocate at least + one unique class for every GdkWindowType. If support for single + window-specific icons is ever needed (eg. Dialog specific), every + such window should get its own class. + 1999-08-19 Tor Lillqvist * gdk/win32/gdkgc.c (gdk_gc_new_with_values): Fix a cut&paste diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index fb29e87ea3..3eecbed996 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,16 @@ +1999-08-21 Tor Lillqvist + + Improvements by Hans Breuer: + + * gdk/win32/gdkwindow.c (RegisterGdkClass): New function + + * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the + CS_?REDRAW flags as they cause lots of (late) redraws when "show + window contents while dragging" is turned on. Allocate at least + one unique class for every GdkWindowType. If support for single + window-specific icons is ever needed (eg. Dialog specific), every + such window should get its own class. + 1999-08-19 Tor Lillqvist * gdk/win32/gdkgc.c (gdk_gc_new_with_values): Fix a cut&paste diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index fb29e87ea3..3eecbed996 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,16 @@ +1999-08-21 Tor Lillqvist + + Improvements by Hans Breuer: + + * gdk/win32/gdkwindow.c (RegisterGdkClass): New function + + * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the + CS_?REDRAW flags as they cause lots of (late) redraws when "show + window contents while dragging" is turned on. Allocate at least + one unique class for every GdkWindowType. If support for single + window-specific icons is ever needed (eg. Dialog specific), every + such window should get its own class. + 1999-08-19 Tor Lillqvist * gdk/win32/gdkgc.c (gdk_gc_new_with_values): Fix a cut&paste diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index fb29e87ea3..3eecbed996 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,16 @@ +1999-08-21 Tor Lillqvist + + Improvements by Hans Breuer: + + * gdk/win32/gdkwindow.c (RegisterGdkClass): New function + + * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the + CS_?REDRAW flags as they cause lots of (late) redraws when "show + window contents while dragging" is turned on. Allocate at least + one unique class for every GdkWindowType. If support for single + window-specific icons is ever needed (eg. Dialog specific), every + such window should get its own class. + 1999-08-19 Tor Lillqvist * gdk/win32/gdkgc.c (gdk_gc_new_with_values): Fix a cut&paste diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index fb29e87ea3..3eecbed996 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,16 @@ +1999-08-21 Tor Lillqvist + + Improvements by Hans Breuer: + + * gdk/win32/gdkwindow.c (RegisterGdkClass): New function + + * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the + CS_?REDRAW flags as they cause lots of (late) redraws when "show + window contents while dragging" is turned on. Allocate at least + one unique class for every GdkWindowType. If support for single + window-specific icons is ever needed (eg. Dialog specific), every + such window should get its own class. + 1999-08-19 Tor Lillqvist * gdk/win32/gdkgc.c (gdk_gc_new_with_values): Fix a cut&paste diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index fb29e87ea3..3eecbed996 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,16 @@ +1999-08-21 Tor Lillqvist + + Improvements by Hans Breuer: + + * gdk/win32/gdkwindow.c (RegisterGdkClass): New function + + * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the + CS_?REDRAW flags as they cause lots of (late) redraws when "show + window contents while dragging" is turned on. Allocate at least + one unique class for every GdkWindowType. If support for single + window-specific icons is ever needed (eg. Dialog specific), every + such window should get its own class. + 1999-08-19 Tor Lillqvist * gdk/win32/gdkgc.c (gdk_gc_new_with_values): Fix a cut&paste diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index fb29e87ea3..3eecbed996 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,16 @@ +1999-08-21 Tor Lillqvist + + Improvements by Hans Breuer: + + * gdk/win32/gdkwindow.c (RegisterGdkClass): New function + + * gdk/win32/gdkwindow.c (gdk_window_new): Use it. Don't set the + CS_?REDRAW flags as they cause lots of (late) redraws when "show + window contents while dragging" is turned on. Allocate at least + one unique class for every GdkWindowType. If support for single + window-specific icons is ever needed (eg. Dialog specific), every + such window should get its own class. + 1999-08-19 Tor Lillqvist * gdk/win32/gdkgc.c (gdk_gc_new_with_values): Fix a cut&paste diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index 2a306987bd..32c8336405 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -126,6 +126,124 @@ gdk_window_init (void) gdk_xid_table_insert (&gdk_root_window, &gdk_root_parent); } +/* RegisterGdkClass + * is a wrapper function for RegisterWindowClassEx. + * It creates at least one unique class for every + * GdkWindowType. If support for single window-specific icons + * is ever needed (e.g Dialog specific), every such window should + * get its own class + */ +ATOM +RegisterGdkClass(GdkWindowType wtype) +{ + static ATOM klassTOPLEVEL = 0; + static ATOM klassDIALOG = 0; + static ATOM klassCHILD = 0; + static ATOM klassTEMP = 0; + static HICON hAppIcon = NULL; + static WNDCLASSEX wcl; + ATOM klass = 0; + +#ifdef MULTIPLE_WINDOW_CLASSES +Error: Not yet implemented! +#endif + + wcl.cbSize = sizeof(WNDCLASSEX); + wcl.style = 0; /* DON'T set CS_REDRAW. It causes total redraw + * on WM_SIZE and WM_MOVE. Flicker, Performance! + */ + wcl.lpfnWndProc = gdk_WindowProc; + wcl.cbClsExtra = 0; + wcl.cbWndExtra = 0; + wcl.hInstance = gdk_ProgInstance; + wcl.hIcon = 0; + /* initialize once! */ + if (0 == hAppIcon) + { + gchar sLoc [_MAX_PATH+1]; + HINSTANCE hInst = GetModuleHandle(NULL); + + if (0 != GetModuleFileName(hInst, sLoc, _MAX_PATH)) + { + hAppIcon = ExtractIcon(hInst, sLoc, 0); + if (0 == hAppIcon) + { + char *gdklibname = g_strdup_printf ("gdk-%s.dll", GDK_VERSION); + + hAppIcon = ExtractIcon(hInst, gdklibname, 0); + g_free (gdklibname); + } + + if (0 == hAppIcon) + hAppIcon = LoadIcon (NULL, IDI_APPLICATION); + } + } + + wcl.lpszMenuName = NULL; + wcl.hIconSm = 0; + + /* initialize once per class */ +#define ONCE_PER_CLASS() \ + wcl.hIcon = CopyIcon (hAppIcon); \ + wcl.hIconSm = CopyIcon (hAppIcon); \ + wcl.hbrBackground = CreateSolidBrush( RGB(0,0,0)); \ + wcl.hCursor = LoadCursor (NULL, IDC_ARROW); + + switch (wtype) + { + case GDK_WINDOW_TOPLEVEL: + if (0 == klassTOPLEVEL) + { + wcl.lpszClassName = "gdkWindowToplevel"; + + ONCE_PER_CLASS(); + klassTOPLEVEL = RegisterClassEx(&wcl); + } + klass = klassTOPLEVEL; + break; + case GDK_WINDOW_CHILD: + if (0 == klassCHILD) + { + wcl.lpszClassName = "gdkWindowChild"; + + wcl.style |= CS_PARENTDC; /* MSDN: ... enhances system performance. */ + ONCE_PER_CLASS(); + klassCHILD = RegisterClassEx(&wcl); + } + klass = klassCHILD; + break; + case GDK_WINDOW_DIALOG: + if (0 == klassDIALOG) + { + wcl.lpszClassName = "gdkWindowDialog"; + wcl.style |= CS_SAVEBITS; + ONCE_PER_CLASS(); + klassDIALOG = RegisterClassEx(&wcl); + } + klass = klassDIALOG; + break; + case GDK_WINDOW_TEMP: + if (0 == klassTEMP) + { + wcl.lpszClassName = "gdkWindowTemp"; + wcl.style |= CS_SAVEBITS; + ONCE_PER_CLASS(); + klassTEMP = RegisterClassEx(&wcl); + } + klass = klassTEMP; + break; + case GDK_WINDOW_ROOT: + g_error ("cannot make windows of type GDK_WINDOW_ROOT"); + break; + case GDK_WINDOW_PIXMAP: + g_error ("cannot make windows of type GDK_WINDOW_PIXMAP (use gdk_pixmap_new)"); + break; + } + + return klass; +} /* RegisterGdkClass */ + + GdkWindow* gdk_window_new (GdkWindow *parent, GdkWindowAttr *attributes, @@ -137,16 +255,7 @@ gdk_window_new (GdkWindow *parent, GdkVisual *visual; HANDLE xparent; Visual *xvisual; -#ifdef MULTIPLE_WINDOW_CLASSES - WNDCLASSEX wcl; - ATOM klass; - char wcl_name_buf[20]; - static int wcl_cnt = 0; -#else - static WNDCLASSEX wcl; - static ATOM klass = 0; -#endif - static HICON hAppIcon = NULL; + ATOM klass = 0; DWORD dwStyle, dwExStyle; RECT rect; int width, height; @@ -203,68 +312,7 @@ gdk_window_new (GdkWindow *parent, private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask; private->bg_type = GDK_WIN32_BG_NORMAL; private->hint_flags = 0; - -#ifndef MULTIPLE_WINDOW_CLASSES - if (klass == 0) - { -#endif - wcl.cbSize = sizeof (WNDCLASSEX); -#if 1 - wcl.style = CS_HREDRAW | CS_VREDRAW; -#else - wcl.style = 0; -#endif - wcl.lpfnWndProc = gdk_WindowProc; - wcl.cbClsExtra = 0; - wcl.cbWndExtra = 0; - wcl.hInstance = gdk_ProgInstance; - wcl.hCursor = LoadCursor (NULL, IDC_ARROW); - -#if 0 /* tml: orig -> generates SetClassLong errors in set background */ - wcl.hIcon = LoadIcon (NULL, IDI_APPLICATION); - wcl.hbrBackground = NULL; -#else - /* initialize once! */ - if (0 == hAppIcon) - { - gchar sLoc [_MAX_PATH+1]; - HINSTANCE hInst = GetModuleHandle(NULL); - - if (0 != GetModuleFileName(hInst, sLoc, _MAX_PATH)) - { - hAppIcon = ExtractIcon(hInst, sLoc, 0); - if (0 == hAppIcon) - { - char *gdklibname = g_strdup_printf ("gdk-%s.dll", GDK_VERSION); - - hAppIcon = ExtractIcon(hInst, gdklibname, 0); - g_free (gdklibname); - } - - if (0 == hAppIcon) - hAppIcon = LoadIcon (NULL, IDI_APPLICATION); - } - } - wcl.hIcon = CopyIcon (hAppIcon); - wcl.hIconSm = CopyIcon (hAppIcon); - /* HB: starting with black to have something to release ... */ - wcl.hbrBackground = CreateSolidBrush( RGB(0,0,0)); -#endif - - wcl.lpszMenuName = NULL; -#ifdef MULTIPLE_WINDOW_CLASSES - sprintf (wcl_name_buf, "gdk-wcl-%d", wcl_cnt++); - wcl.lpszClassName = g_strdup (wcl_name_buf); - /* wcl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); */ -#else - wcl.lpszClassName = "GDK-window-class"; - klass = RegisterClassEx (&wcl); - if (!klass) - g_error ("RegisterClassEx failed"); - } - private->xcursor = NULL; -#endif if (parent_private && parent_private->guffaw_gravity) { @@ -313,13 +361,11 @@ gdk_window_new (GdkWindow *parent, break; case GDK_WINDOW_DIALOG: dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN; + dwExStyle |= WS_EX_TOPMOST; /* //HB: want this? */ xparent = gdk_root_window; break; case GDK_WINDOW_TEMP: dwStyle = WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; -#ifdef MULTIPLE_WINDOW_CLASSES - wcl.style |= CS_SAVEBITS; -#endif dwExStyle |= WS_EX_TOOLWINDOW; break; case GDK_WINDOW_ROOT: @@ -330,11 +376,9 @@ gdk_window_new (GdkWindow *parent, break; } -#ifdef MULTIPLE_WINDOW_CLASSES - klass = RegisterClassEx (&wcl); + klass = RegisterGdkClass (private->window_type); if (!klass) g_error ("RegisterClassEx failed"); -#endif if (private->window_type != GDK_WINDOW_CHILD) { @@ -371,7 +415,7 @@ gdk_window_new (GdkWindow *parent, private->xwindow = CreateWindowEx (dwExStyle, - wcl.lpszClassName, + MAKEINTRESOURCE(klass), title, dwStyle, x, y, diff --git a/gdk/win32/gdkwindow.c b/gdk/win32/gdkwindow.c index 2a306987bd..32c8336405 100644 --- a/gdk/win32/gdkwindow.c +++ b/gdk/win32/gdkwindow.c @@ -126,6 +126,124 @@ gdk_window_init (void) gdk_xid_table_insert (&gdk_root_window, &gdk_root_parent); } +/* RegisterGdkClass + * is a wrapper function for RegisterWindowClassEx. + * It creates at least one unique class for every + * GdkWindowType. If support for single window-specific icons + * is ever needed (e.g Dialog specific), every such window should + * get its own class + */ +ATOM +RegisterGdkClass(GdkWindowType wtype) +{ + static ATOM klassTOPLEVEL = 0; + static ATOM klassDIALOG = 0; + static ATOM klassCHILD = 0; + static ATOM klassTEMP = 0; + static HICON hAppIcon = NULL; + static WNDCLASSEX wcl; + ATOM klass = 0; + +#ifdef MULTIPLE_WINDOW_CLASSES +Error: Not yet implemented! +#endif + + wcl.cbSize = sizeof(WNDCLASSEX); + wcl.style = 0; /* DON'T set CS_REDRAW. It causes total redraw + * on WM_SIZE and WM_MOVE. Flicker, Performance! + */ + wcl.lpfnWndProc = gdk_WindowProc; + wcl.cbClsExtra = 0; + wcl.cbWndExtra = 0; + wcl.hInstance = gdk_ProgInstance; + wcl.hIcon = 0; + /* initialize once! */ + if (0 == hAppIcon) + { + gchar sLoc [_MAX_PATH+1]; + HINSTANCE hInst = GetModuleHandle(NULL); + + if (0 != GetModuleFileName(hInst, sLoc, _MAX_PATH)) + { + hAppIcon = ExtractIcon(hInst, sLoc, 0); + if (0 == hAppIcon) + { + char *gdklibname = g_strdup_printf ("gdk-%s.dll", GDK_VERSION); + + hAppIcon = ExtractIcon(hInst, gdklibname, 0); + g_free (gdklibname); + } + + if (0 == hAppIcon) + hAppIcon = LoadIcon (NULL, IDI_APPLICATION); + } + } + + wcl.lpszMenuName = NULL; + wcl.hIconSm = 0; + + /* initialize once per class */ +#define ONCE_PER_CLASS() \ + wcl.hIcon = CopyIcon (hAppIcon); \ + wcl.hIconSm = CopyIcon (hAppIcon); \ + wcl.hbrBackground = CreateSolidBrush( RGB(0,0,0)); \ + wcl.hCursor = LoadCursor (NULL, IDC_ARROW); + + switch (wtype) + { + case GDK_WINDOW_TOPLEVEL: + if (0 == klassTOPLEVEL) + { + wcl.lpszClassName = "gdkWindowToplevel"; + + ONCE_PER_CLASS(); + klassTOPLEVEL = RegisterClassEx(&wcl); + } + klass = klassTOPLEVEL; + break; + case GDK_WINDOW_CHILD: + if (0 == klassCHILD) + { + wcl.lpszClassName = "gdkWindowChild"; + + wcl.style |= CS_PARENTDC; /* MSDN: ... enhances system performance. */ + ONCE_PER_CLASS(); + klassCHILD = RegisterClassEx(&wcl); + } + klass = klassCHILD; + break; + case GDK_WINDOW_DIALOG: + if (0 == klassDIALOG) + { + wcl.lpszClassName = "gdkWindowDialog"; + wcl.style |= CS_SAVEBITS; + ONCE_PER_CLASS(); + klassDIALOG = RegisterClassEx(&wcl); + } + klass = klassDIALOG; + break; + case GDK_WINDOW_TEMP: + if (0 == klassTEMP) + { + wcl.lpszClassName = "gdkWindowTemp"; + wcl.style |= CS_SAVEBITS; + ONCE_PER_CLASS(); + klassTEMP = RegisterClassEx(&wcl); + } + klass = klassTEMP; + break; + case GDK_WINDOW_ROOT: + g_error ("cannot make windows of type GDK_WINDOW_ROOT"); + break; + case GDK_WINDOW_PIXMAP: + g_error ("cannot make windows of type GDK_WINDOW_PIXMAP (use gdk_pixmap_new)"); + break; + } + + return klass; +} /* RegisterGdkClass */ + + GdkWindow* gdk_window_new (GdkWindow *parent, GdkWindowAttr *attributes, @@ -137,16 +255,7 @@ gdk_window_new (GdkWindow *parent, GdkVisual *visual; HANDLE xparent; Visual *xvisual; -#ifdef MULTIPLE_WINDOW_CLASSES - WNDCLASSEX wcl; - ATOM klass; - char wcl_name_buf[20]; - static int wcl_cnt = 0; -#else - static WNDCLASSEX wcl; - static ATOM klass = 0; -#endif - static HICON hAppIcon = NULL; + ATOM klass = 0; DWORD dwStyle, dwExStyle; RECT rect; int width, height; @@ -203,68 +312,7 @@ gdk_window_new (GdkWindow *parent, private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask; private->bg_type = GDK_WIN32_BG_NORMAL; private->hint_flags = 0; - -#ifndef MULTIPLE_WINDOW_CLASSES - if (klass == 0) - { -#endif - wcl.cbSize = sizeof (WNDCLASSEX); -#if 1 - wcl.style = CS_HREDRAW | CS_VREDRAW; -#else - wcl.style = 0; -#endif - wcl.lpfnWndProc = gdk_WindowProc; - wcl.cbClsExtra = 0; - wcl.cbWndExtra = 0; - wcl.hInstance = gdk_ProgInstance; - wcl.hCursor = LoadCursor (NULL, IDC_ARROW); - -#if 0 /* tml: orig -> generates SetClassLong errors in set background */ - wcl.hIcon = LoadIcon (NULL, IDI_APPLICATION); - wcl.hbrBackground = NULL; -#else - /* initialize once! */ - if (0 == hAppIcon) - { - gchar sLoc [_MAX_PATH+1]; - HINSTANCE hInst = GetModuleHandle(NULL); - - if (0 != GetModuleFileName(hInst, sLoc, _MAX_PATH)) - { - hAppIcon = ExtractIcon(hInst, sLoc, 0); - if (0 == hAppIcon) - { - char *gdklibname = g_strdup_printf ("gdk-%s.dll", GDK_VERSION); - - hAppIcon = ExtractIcon(hInst, gdklibname, 0); - g_free (gdklibname); - } - - if (0 == hAppIcon) - hAppIcon = LoadIcon (NULL, IDI_APPLICATION); - } - } - wcl.hIcon = CopyIcon (hAppIcon); - wcl.hIconSm = CopyIcon (hAppIcon); - /* HB: starting with black to have something to release ... */ - wcl.hbrBackground = CreateSolidBrush( RGB(0,0,0)); -#endif - - wcl.lpszMenuName = NULL; -#ifdef MULTIPLE_WINDOW_CLASSES - sprintf (wcl_name_buf, "gdk-wcl-%d", wcl_cnt++); - wcl.lpszClassName = g_strdup (wcl_name_buf); - /* wcl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); */ -#else - wcl.lpszClassName = "GDK-window-class"; - klass = RegisterClassEx (&wcl); - if (!klass) - g_error ("RegisterClassEx failed"); - } - private->xcursor = NULL; -#endif if (parent_private && parent_private->guffaw_gravity) { @@ -313,13 +361,11 @@ gdk_window_new (GdkWindow *parent, break; case GDK_WINDOW_DIALOG: dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN; + dwExStyle |= WS_EX_TOPMOST; /* //HB: want this? */ xparent = gdk_root_window; break; case GDK_WINDOW_TEMP: dwStyle = WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; -#ifdef MULTIPLE_WINDOW_CLASSES - wcl.style |= CS_SAVEBITS; -#endif dwExStyle |= WS_EX_TOOLWINDOW; break; case GDK_WINDOW_ROOT: @@ -330,11 +376,9 @@ gdk_window_new (GdkWindow *parent, break; } -#ifdef MULTIPLE_WINDOW_CLASSES - klass = RegisterClassEx (&wcl); + klass = RegisterGdkClass (private->window_type); if (!klass) g_error ("RegisterClassEx failed"); -#endif if (private->window_type != GDK_WINDOW_CHILD) { @@ -371,7 +415,7 @@ gdk_window_new (GdkWindow *parent, private->xwindow = CreateWindowEx (dwExStyle, - wcl.lpszClassName, + MAKEINTRESOURCE(klass), title, dwStyle, x, y,