Could it be the reason that you are requesting full screen mode? w = new cog::Window(100, 100, 16, TRUE);
If this helps, this works in my code base:
HWND impl::window_impl::create_window_( window_impl* window // associated window object ) { auto const INSTANCE = ::GetModuleHandleW(L""); WNDCLASSEXW const wc = { sizeof(WNDCLASSEXW), CS_OWNDC | CS_HREDRAW | CS_VREDRAW, window_impl::top_level_wnd_proc_, 0, 0, INSTANCE, nullptr, ::LoadCursorW(nullptr, MAKEINTRESOURCE(IDC_ARROW)), nullptr, nullptr, CLASS_NAME, nullptr }; ::RegisterClassExW(&wc); // ignore return value auto const result = ::CreateWindowExW( 0, CLASS_NAME, L"window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND)nullptr , (HMENU)nullptr, INSTANCE, window ); return result; }
[edit] I think your call to CreateWindowExW has the parameters in the wrong order - in particular, the paramater instance. Do you compile with STRICT? He must detect this problem.
[edit] It is not directly related, but your implementation will not work when compiling as 64-bit code and does not check for possible errors - you should use something like:
//-------------------------------------------------------------------------- //! Get the userdata for the window given by @c hwnd (our window object). //! @throw bklib::platform::windows_exception //-------------------------------------------------------------------------- impl::window_impl* get_window_ptr(HWND hwnd) { ::SetLastError(0); auto const result = ::GetWindowLongPtrW(hwnd, GWLP_USERDATA); if (result == 0) { auto const e = ::GetLastError(); if (e) { BOOST_THROW_EXCEPTION(bklib::platform::windows_exception() << bklib::platform::windows_error_code(e) ); } } return reinterpret_cast<impl::window_impl*>(result); } //-------------------------------------------------------------------------- //! Set the userdata for the window given by @c hwnd to be our //! window object. //! @throw bklib::platform::windows_exception //-------------------------------------------------------------------------- void set_window_ptr(HWND hwnd, impl::window_impl* ptr) { ::SetLastError(0); auto const result = ::SetWindowLongPtrW(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(ptr)); if (result == 0) { auto const e = ::GetLastError(); if (e) { BOOST_THROW_EXCEPTION(bklib::platform::windows_exception() << bklib::platform::windows_error_code(e) ); } } }
[edit] Extra code if it helps
//------------------------------------------------------------------------------ //! Top level window procedure which forwards messages to the appropriate //! impl::window_impl instance. //! @throw noexcept //! Swallows all exceptions at the API boundary. //------------------------------------------------------------------------------ LRESULT CALLBACK impl::window_impl::top_level_wnd_proc_( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) try { // set the instance pointer for the window given by hwnd if it was just created if (msg == WM_NCCREATE) { auto const cs = reinterpret_cast<CREATESTRUCTW const*>(lParam); auto const window_ptr = reinterpret_cast<window_impl*>(cs->lpCreateParams); set_window_ptr(hwnd, window_ptr); } // the window object to forward the message to auto const window = get_window_ptr(hwnd); if (window) { return window->window_proc_(hwnd, msg, wParam, lParam); } else { // it possible we will receive some messages beofre WM_NCCREATE; // use the default handler return ::DefWindowProcW(hwnd, msg, wParam, lParam); } } catch (std::exception&) { ::PostQuitMessage(-1); return 0; } catch (...) { ::PostQuitMessage(-1); return 0; } //------------------------------------------------------------------------------ //! Called by the top level window proc. Dispatches messages to their //! appropriate handler function. //------------------------------------------------------------------------------ LRESULT impl::window_impl::window_proc_( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { return ::DefWindowProcW(hwnd, msg, wParam, lParam); } //------------------------------------------------------------------------------ void impl::window_impl::create() { handle_ = create_window_(this); } //------------------------------------------------------------------------------ void impl::window_impl::show(bool visible) { ::ShowWindow(handle_, SW_SHOWDEFAULT); ::InvalidateRect(handle_, nullptr, FALSE); ::UpdateWindow(handle_); }