/* ======================= GLW_CreateWindow Responsible for creating the Win32 window. If fullscreen, it won't have a border ======================= */ static bool GLW_CreateWindow( glimpParms_t parms ) { int x, y, w, h; if( !GLW_GetWindowDimensions( parms, x, y, w, h ) ) { return false; } int stylebits; int exstyle; if( parms.fullScreen != 0 ) { exstyle = WS_EX_TOPMOST; stylebits = WS_POPUP | WS_VISIBLE | WS_SYSMENU; } else { exstyle = 0; stylebits = WINDOW_STYLE | WS_SYSMENU; } win32.hWnd = CreateWindowEx( exstyle, WIN32_WINDOW_CLASS_NAME, GAME_NAME, stylebits, x, y, w, h, NULL, NULL, win32.hInstance, NULL ); if( !win32.hWnd ) { common->Printf( "^3GLW_CreateWindow() - Couldn't create window^0\n" ); return false; } ::SetTimer( win32.hWnd, 0, 100, NULL ); ShowWindow( win32.hWnd, SW_SHOW ); UpdateWindow( win32.hWnd ); common->Printf( "...created window @ %d,%d (%dx%d)\n", x, y, w, h ); // makeCurrent NULL frees the DC, so get another win32.hDC = GetDC( win32.hWnd ); if( !win32.hDC ) { common->Printf( "^3GLW_CreateWindow() - GetDC()failed^0\n" ); return false; } // Check to see if we can get a stereo pixel format, even if we aren't going to use it, // so the menu option can be if( GLW_ChoosePixelFormat( win32.hDC, parms.multiSamples, true ) != -1 ) { glConfig.stereoPixelFormatAvailable = true; } else { glConfig.stereoPixelFormatAvailable = false; } if( !GLW_InitDriver( parms ) ) { ShowWindow( win32.hWnd, SW_HIDE ); DestroyWindow( win32.hWnd ); win32.hWnd = NULL; return false; } SetForegroundWindow( win32.hWnd ); SetFocus( win32.hWnd ); glConfig.isFullscreen = parms.fullScreen; return true; }
static qbool GLW_CreateWindow( int width, int height, int colorbits ) { static qbool s_classRegistered = qfalse; if ( !s_classRegistered ) { WNDCLASS wc; memset( &wc, 0, sizeof( wc ) ); wc.style = CS_OWNDC; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = g_wv.hInstance; wc.hIcon = LoadIcon( g_wv.hInstance, MAKEINTRESOURCE(IDI_ICON1)); wc.hCursor = LoadCursor (NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)COLOR_GRAYTEXT; wc.lpszMenuName = 0; wc.lpszClassName = CLIENT_WINDOW_TITLE; if ( !RegisterClass( &wc ) ) ri.Error( ERR_FATAL, "GLW_CreateWindow: could not register window class" ); s_classRegistered = qtrue; ri.Printf( PRINT_DEVELOPER, "...registered window class\n" ); } // // create the HWND if one does not already exist // if ( !g_wv.hWnd ) { RECT r; int x, y, w, h; // // compute width and height // r.left = 0; r.top = 0; r.right = width; r.bottom = height; int style = WS_VISIBLE | WS_SYSMENU; int exstyle; if ( glInfo.isFullscreen ) { style |= WS_POPUP; exstyle = WS_EX_TOPMOST; } else { style |= WS_OVERLAPPED | WS_BORDER | WS_CAPTION; exstyle = 0; AdjustWindowRect( &r, style, FALSE ); } w = r.right - r.left; h = r.bottom - r.top; if ( glInfo.isFullscreen ) { x = 0; y = 0; } else { const cvar_t* vid_xpos = ri.Cvar_Get( "vid_xpos", "", CVAR_ARCHIVE ); const cvar_t* vid_ypos = ri.Cvar_Get( "vid_ypos", "", CVAR_ARCHIVE ); x = vid_xpos->integer; y = vid_ypos->integer; } g_wv.hWnd = CreateWindowEx( exstyle, CLIENT_WINDOW_TITLE, CLIENT_WINDOW_TITLE, style, x, y, w, h, NULL, NULL, g_wv.hInstance, NULL ); if ( !g_wv.hWnd ) ri.Error( ERR_FATAL, "GLW_CreateWindow() - Couldn't create window" ); ShowWindow( g_wv.hWnd, SW_SHOW ); UpdateWindow( g_wv.hWnd ); ri.Printf( PRINT_DEVELOPER, "...created window@%d,%d (%dx%d)\n", x, y, w, h ); } else { ri.Printf( PRINT_DEVELOPER, "...window already present, CreateWindowEx skipped\n" ); } if ( !GLW_InitDriver( colorbits ) ) { ShowWindow( g_wv.hWnd, SW_HIDE ); DestroyWindow( g_wv.hWnd ); g_wv.hWnd = NULL; return qfalse; } SetForegroundWindow( g_wv.hWnd ); SetFocus( g_wv.hWnd ); return qtrue; }
// Responsible for creating the Win32 window and initializing the OpenGL driver. static bool GLW_CreateWindow( int width, int height, int colorbits, bool fullscreen ) { // // register the window class if necessary // if ( !s_classRegistered ) { vid_xpos = Cvar_Get( "vid_xpos", "3", CVAR_ARCHIVE ); vid_ypos = Cvar_Get( "vid_ypos", "22", CVAR_ARCHIVE ); WNDCLASS wc; Com_Memset( &wc, 0, sizeof ( wc ) ); wc.style = 0; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = global_hInstance; wc.hIcon = LoadIcon( global_hInstance, MAKEINTRESOURCE( IDI_ICON1 ) ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = ( HBRUSH )COLOR_GRAYTEXT; wc.lpszMenuName = 0; wc.lpszClassName = WINDOW_CLASS_NAME; if ( !RegisterClass( &wc ) ) { common->FatalError( "GLW_CreateWindow: could not register window class" ); } s_classRegistered = true; common->Printf( "...registered window class\n" ); } // // create the HWND if one does not already exist // if ( !GMainWindow ) { // // compute width and height // RECT r; r.left = 0; r.top = 0; r.right = width; r.bottom = height; int exstyle; int stylebits; if ( fullscreen ) { exstyle = WS_EX_TOPMOST; stylebits = WS_POPUP | WS_VISIBLE | WS_SYSMENU; } else { exstyle = 0; stylebits = WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_VISIBLE | WS_SYSMENU; // | WS_MINIMIZEBOX AdjustWindowRect( &r, stylebits, FALSE ); } int w = r.right - r.left; int h = r.bottom - r.top; int x, y; if ( fullscreen ) { x = 0; y = 0; } else { x = vid_xpos->integer; y = vid_ypos->integer; // adjust window coordinates if necessary // so that the window is completely on screen if ( x < 0 ) { x = 0; } if ( y < 0 ) { y = 0; } if ( w < desktopWidth && h < desktopHeight ) { if ( x + w > desktopWidth ) { x = ( desktopWidth - w ); } if ( y + h > desktopHeight ) { y = ( desktopHeight - h ); } } } GMainWindow = CreateWindowEx( exstyle, WINDOW_CLASS_NAME, R_GetTitleForWindow(), stylebits, x, y, w, h, NULL, NULL, global_hInstance, NULL ); if ( !GMainWindow ) { common->FatalError( "GLW_CreateWindow() - Couldn't create window" ); } ShowWindow( GMainWindow, SW_SHOW ); UpdateWindow( GMainWindow ); common->Printf( "...created window@%d,%d (%dx%d)\n", x, y, w, h ); } else { common->Printf( "...window already present, CreateWindowEx skipped\n" ); } if ( !GLW_InitDriver( colorbits ) ) { ShowWindow( GMainWindow, SW_HIDE ); DestroyWindow( GMainWindow ); GMainWindow = NULL; return false; } SetForegroundWindow( GMainWindow ); SetFocus( GMainWindow ); WG_CheckHardwareGamma(); // initialise default lists GLW_GenDefaultLists(); return true; }
static qboolean GLW_CreateWindow( const char *drivername, int width, int height, int colorbits, qboolean cdsFullscreen ) { RECT r; cvar_t *vid_xpos, *vid_ypos; int stylebits; int x, y, w, h; int exstyle; // // register the window class if necessary // if ( !s_classRegistered ) { WNDCLASS wc; memset( &wc, 0, sizeof( wc ) ); wc.style = 0; wc.lpfnWndProc = (WNDPROC) glw_state.wndproc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = g_wv.hInstance; wc.hIcon = LoadIcon( g_wv.hInstance, MAKEINTRESOURCE(IDI_ICON1)); wc.hCursor = LoadCursor (NULL,IDC_ARROW); wc.hbrBackground = (void *)COLOR_GRAYTEXT; wc.lpszMenuName = 0; wc.lpszClassName = CLIENT_WINDOW_TITLE; if ( !RegisterClass( &wc ) ) { ri.Error( ERR_FATAL, "GLW_CreateWindow: could not register window class" ); } s_classRegistered = qtrue; ri.Printf( PRINT_ALL, "...registered window class\n" ); } // // create the HWND if one does not already exist // if ( !g_wv.hWnd ) { // // compute width and height // r.left = 0; r.top = 0; r.right = width; r.bottom = height; if ( cdsFullscreen || !Q_stricmp( _3DFX_DRIVER_NAME, drivername ) ) { exstyle = WS_EX_TOPMOST; stylebits = WS_POPUP|WS_VISIBLE|WS_SYSMENU; } else { exstyle = 0; stylebits = WINDOW_STYLE|WS_SYSMENU; AdjustWindowRect (&r, stylebits, FALSE); } w = r.right - r.left; h = r.bottom - r.top; if ( cdsFullscreen || !Q_stricmp( _3DFX_DRIVER_NAME, drivername ) ) { x = 0; y = 0; } else { vid_xpos = ri.Cvar_Get ("vid_xpos", "", 0); vid_ypos = ri.Cvar_Get ("vid_ypos", "", 0); x = vid_xpos->integer; y = vid_ypos->integer; // adjust window coordinates if necessary // so that the window is completely on screen if ( x < 0 ) x = 0; if ( y < 0 ) y = 0; if ( w < glw_state.desktopWidth && h < glw_state.desktopHeight ) { if ( x + w > glw_state.desktopWidth ) x = ( glw_state.desktopWidth - w ); if ( y + h > glw_state.desktopHeight ) y = ( glw_state.desktopHeight - h ); } } g_wv.hWnd = CreateWindowEx ( exstyle, CLIENT_WINDOW_TITLE, CLIENT_WINDOW_TITLE, stylebits, x, y, w, h, NULL, NULL, g_wv.hInstance, NULL); if ( !g_wv.hWnd ) { ri.Error (ERR_FATAL, "GLW_CreateWindow() - Couldn't create window"); } ShowWindow( g_wv.hWnd, SW_SHOW ); UpdateWindow( g_wv.hWnd ); ri.Printf( PRINT_ALL, "...created window@%d,%d (%dx%d)\n", x, y, w, h ); } else { ri.Printf( PRINT_ALL, "...window already present, CreateWindowEx skipped\n" ); } if ( !GLW_InitDriver( drivername, colorbits ) ) { ShowWindow( g_wv.hWnd, SW_HIDE ); DestroyWindow( g_wv.hWnd ); g_wv.hWnd = NULL; return qfalse; } SetForegroundWindow( g_wv.hWnd ); SetFocus( g_wv.hWnd ); return qtrue; }
/* ======================= GLW_CreateWindow Responsible for creating the Win32 window. If cdsFullscreen is true, it won't have a border ======================= */ static bool GLW_CreateWindow( glimpParms_t parms ) { int stylebits; int x, y, w, h; int exstyle; // // compute width and height // if ( parms.fullScreen ) { exstyle = WS_EX_TOPMOST; stylebits = WS_POPUP|WS_VISIBLE|WS_SYSMENU; x = 0; y = 0; w = parms.width; h = parms.height; } else { RECT r; // adjust width and height for window border r.bottom = parms.height; r.left = 0; r.top = 0; r.right = parms.width; exstyle = 0; stylebits = WINDOW_STYLE|WS_SYSMENU; AdjustWindowRect (&r, stylebits, FALSE); w = r.right - r.left; h = r.bottom - r.top; x = win32.win_xpos.GetInteger(); y = win32.win_ypos.GetInteger(); // adjust window coordinates if necessary // so that the window is completely on screen if ( x + w > win32.desktopWidth ) { x = ( win32.desktopWidth - w ); } if ( y + h > win32.desktopHeight ) { y = ( win32.desktopHeight - h ); } if ( x < 0 ) { x = 0; } if ( y < 0 ) { y = 0; } } win32.hWnd = CreateWindowEx ( exstyle, WIN32_WINDOW_CLASS_NAME, GAME_NAME, stylebits, x, y, w, h, NULL, NULL, win32.hInstance, NULL); if ( !win32.hWnd ) { common->Printf( "^3GLW_CreateWindow() - Couldn't create window^0\n" ); return false; } ::SetTimer( win32.hWnd, 0, 100, NULL ); ShowWindow( win32.hWnd, SW_SHOW ); UpdateWindow( win32.hWnd ); common->Printf( "...created window @ %d,%d (%dx%d)\n", x, y, w, h ); if ( !GLW_InitDriver( parms ) ) { ShowWindow( win32.hWnd, SW_HIDE ); DestroyWindow( win32.hWnd ); win32.hWnd = NULL; return false; } SetForegroundWindow( win32.hWnd ); SetFocus( win32.hWnd ); glConfig.isFullscreen = parms.fullScreen; return true; }