Managing Window Input Focus

Creating a Resizable Window in SDL

How do I create a resizable window in SDL?

Abstract art representing computer programming

To create a resizable window in SDL, you need to use the SDL_WINDOW_RESIZABLE flag when you call the SDL_CreateWindow() function. This flag allows the window to be resized by the user after it has been created.

Here's a simple example to demonstrate how to create a resizable window in SDL:

#include <SDL.h>

class Window {
public:
  Window() {
    SDL_Init(SDL_INIT_VIDEO);

    SDLWindow = SDL_CreateWindow(
      "Resizable Window",
      100, 100, 800, 600,
      SDL_WINDOW_RESIZABLE 
    );
  }

  ~Window() {
    SDL_DestroyWindow(SDLWindow);
    SDL_Quit();
  }

  SDL_Window* SDLWindow{nullptr};
};

int main(int argc, char** argv) {
  Window GameWindow;
  SDL_Event Event;

  while (true) {
    while (SDL_PollEvent(&Event)) {
      if (Event.type == SDL_QUIT) {
        return 0;
      }
    }
  }
  
  return 0;
}

In this example, we create a window titled "Resizable Window" with a size of 800x600 pixels. The SDL_WINDOW_RESIZABLE flag makes the window resizable.

Combining Flags

You can combine the SDL_WINDOW_RESIZABLE flag with other window flags using the bitwise OR operator (|). For example, to create a window that is both resizable and has input focus, you can do the following:

SDLWindow = SDL_CreateWindow(
  "Resizable and Focused Window",
  100, 100, 800, 600,
  SDL_WINDOW_RESIZABLE | SDL_WINDOW_INPUT_FOCUS 
);

Handling Resize Events

To handle the window resize events, you can check for SDL_WINDOWEVENT_RESIZED in your event loop. Here's an example:

#include <SDL.h>
#include <iostream>
#include "Window.h"

void HandleWindowEvent(SDL_WindowEvent& E) {
  if (E.event == SDL_WINDOWEVENT_RESIZED) {
    std::cout << "Window resized to "
      << E.data1 << "x" << E.data2 << "\n";  
  }
}

int main(int argc, char** argv) {
  Window GameWindow;
  SDL_Event Event;

  while (true) {
    while (SDL_PollEvent(&Event)) {
      if (Event.type == SDL_QUIT) {
        return 0;
      }
      if (Event.type == SDL_WINDOWEVENT) {
        HandleWindowEvent(Event.window);
      }
    }
  }
  
  return 0;
}

This code will output the new dimensions of the window whenever it is resized. Handling resize events is important for updating your game's rendering logic to fit the new window size.

Window resized to 1024x768

Creating resizable windows in SDL is straightforward and allows for more dynamic and user-friendly applications. Don't forget to handle resize events appropriately to ensure your application behaves as expected when the window size changes.

This Question is from the Lesson:

Managing Window Input Focus

Learn how to manage and control window input focus in SDL applications, including how to create, detect, and manipulate window focus states.

Answers to questions are automatically generated and may not have been reviewed.

This Question is from the Lesson:

Managing Window Input Focus

Learn how to manage and control window input focus in SDL applications, including how to create, detect, and manipulate window focus states.

sdl2-promo.jpg
Part of the course:

Game Dev with SDL2

Learn C++ and SDL development by creating hands on, practical projects inspired by classic retro games

Free, unlimited access

This course includes:

  • 55 Lessons
  • 100+ Code Samples
  • 91% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved