-#ifdef WIN32
- static bool wndclass_created = false;
-
- if(!wndclass_created)
- {
- WNDCLASSEX wndcl;
-
- wndcl.cbSize = sizeof(WNDCLASSEX);
- wndcl.style = 0;
- wndcl.lpfnWndProc = &wndproc_;
- wndcl.cbClsExtra = 0;
- wndcl.cbWndExtra = sizeof(Window *);
- wndcl.hInstance = reinterpret_cast<HINSTANCE>(Application::get_data());
- wndcl.hIcon = 0;
- wndcl.hCursor = LoadCursor(0, IDC_ARROW);
- wndcl.hbrBackground = 0;
- wndcl.lpszMenuName = 0;
- wndcl.lpszClassName = "mspgui";
- wndcl.hIconSm = 0;
-
- if(!RegisterClassEx(&wndcl))
- throw system_error("RegisterClassEx");
-
- wndclass_created = true;
- }
-
- RECT rect;
- SetRect(&rect, 0, 0, options.width, options.height);
-
- int style = (options.fullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW);
- if(!options.resizable)
- style &= ~WS_THICKFRAME;
- int exstyle = (options.fullscreen ? WS_EX_APPWINDOW : WS_EX_OVERLAPPEDWINDOW);
- AdjustWindowRectEx(&rect, style, false, exstyle);
-
- priv->window = CreateWindowEx(exstyle,
- "mspgui",
- "Window",
- style,
- CW_USEDEFAULT, CW_USEDEFAULT,
- rect.right-rect.left, rect.bottom-rect.top,
- 0,
- 0,
- reinterpret_cast<HINSTANCE>(Application::get_data()),
- this);
- if(!priv->window)
- throw system_error("CreateWindowEx");
-
-#else
- ::Display *dpy = display.get_private().display;
-
- priv->wm_delete_window = XInternAtom(dpy, "WM_DELETE_WINDOW", true);
- priv->invisible_cursor = 0;
-
- XSetWindowAttributes attr;
- attr.override_redirect = options.fullscreen;
- attr.event_mask = ButtonPressMask|ButtonReleaseMask|PointerMotionMask|KeyPressMask|KeyReleaseMask|StructureNotifyMask|EnterWindowMask;
-
- priv->window = XCreateWindow(dpy,
- DefaultRootWindow(dpy),
- 0, 0,
- options.width, options.height,
- 0,
- CopyFromParent,
- InputOutput,
- CopyFromParent,
- CWOverrideRedirect|CWEventMask, &attr);
-
- XSetWMProtocols(dpy, priv->window, &priv->wm_delete_window, 1);
-
- if(!options.resizable)
- {
- XSizeHints hints;
- hints.flags = PMinSize|PMaxSize;
- hints.min_width=hints.max_width = options.width;
- hints.min_height=hints.max_height = options.height;
- XSetWMNormalHints(dpy, priv->window, &hints);
- }
-
-#endif