Windows themselves can be configured quite in-depth. You can set the title, size, position, background color, whether or not it can be resized, whether or not it should render synchronized with the monitor (vsync), and much more.
In the code below, you'll find a few common things you can do with a Window object.
This spawns a blank window with a red background color with the title Hello world! at (x, y) = (100, 100), a width and height of 400x400 that cannot be resized, and with the icon located at icon.png.
The Initialize() function must be called after a window has been created, and before the window is used in a viewport/sprite. It takes two arguments: HardwareAcceleration, defaulting to true, and VSync, defaulting to false.
Hardware Acceleration means that the window will be rendered using the dedicated GPU (hardware rendering), rather than the CPU (software rendering). Hardware Acceleration is great, however as a program with hardware acceleration enabled uses the GPU, that means less GPU-power will be available to other programs or games. If you plan on making a background application or something that overlays on top of other GPU-hogging programs/games, you will likely want to disabled your program's Hardware Acceleration.
VSync means that the window's rendering will be synchronized with the refresh rate of the monitor it's on. If your monitor has a refresh rate of 59 Hz, or 59 times per second, vsync will make your program refresh 59 times per second too. VSync is recommended for applications that have animations or are input-based - so, largely game applications. If you intend to use the window as more of an editor program than a game, for instance, you will likely want to leave VSync disabled. This will make the program refresh as fast as it possibly can.
A Window object also receives several events, such as when it's moved, resized, updated, and more. These events follow the OnXXX naming scheme, and take a BaseEvent (or derived) delegate which takes a BaseEventArgs argument. See some examples below.
All these events are triggered when appropriate. Special is OnClosing, which takes a BoolEventArgs rather than a BaseEventArgs. By setting its Value property, e.Value to false, you can prevent the user from closing the window with the red X button. This can be useful if, for instance, you want to make sure the user has saved before they close the window.
You can force the window to close at any time using Window.Close().
Mouse and keyboard input will be covered later in this GitBook.
I recommend looking through the methods and events implemented on the Window object and playing around with what they do and how they work. That's the best way to get a feel for how it works.