You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.1 KiB
96 lines
3.1 KiB
#ifndef WIN32_WINDOW_H_ |
|
#define WIN32_WINDOW_H_ |
|
|
|
#include <Windows.h> |
|
#include <Windowsx.h> |
|
|
|
#include <functional> |
|
#include <memory> |
|
#include <string> |
|
|
|
// A class abstraction for a high DPI-aware Win32 Window. Intended to be |
|
// inherited from by classes that wish to specialize with custom |
|
// rendering and input handling |
|
class Win32Window { |
|
public: |
|
struct Point { |
|
unsigned int x; |
|
unsigned int y; |
|
Point(unsigned int x, unsigned int y) : x(x), y(y) {} |
|
}; |
|
|
|
struct Size { |
|
unsigned int width; |
|
unsigned int height; |
|
Size(unsigned int width, unsigned int height) |
|
: width(width), height(height) {} |
|
}; |
|
|
|
Win32Window(); |
|
virtual ~Win32Window(); |
|
|
|
// Creates and shows a win32 window with |title| and position and size using |
|
// |origin| and |size|. New windows are created on the default monitor. Window |
|
// sizes are specified to the OS in physical pixels, hence to ensure a |
|
// consistent size to will treat the width height passed in to this function |
|
// as logical pixels and scale to appropriate for the default monitor. Returns |
|
// true if the window was created successfully. |
|
bool CreateAndShow(const std::wstring& title, |
|
const Point& origin, |
|
const Size& size); |
|
|
|
// Release OS resources associated with window. |
|
void Destroy(); |
|
|
|
// Inserts |content| into the window tree. |
|
void SetChildContent(HWND content); |
|
|
|
// Returns the backing Window handle to enable clients to set icon and other |
|
// window properties. Returns nullptr if the window has been destroyed. |
|
HWND GetHandle(); |
|
|
|
// If true, closing this window will quit the application. |
|
void SetQuitOnClose(bool quit_on_close); |
|
|
|
protected: |
|
// Processes and route salient window messages for mouse handling, |
|
// size change and DPI. Delegates handling of these to member overloads that |
|
// inheriting classes can handle. |
|
virtual LRESULT MessageHandler(HWND window, |
|
UINT const message, |
|
WPARAM const wparam, |
|
LPARAM const lparam) noexcept; |
|
|
|
// Called when CreateAndShow is called, allowing subclass window-related |
|
// setup. |
|
virtual void OnCreate(); |
|
|
|
// Called when Destroy is called. |
|
virtual void OnDestroy(); |
|
|
|
private: |
|
friend class WindowClassRegistrar; |
|
|
|
// OS callback called by message pump. Handles the WM_NCCREATE message which |
|
// is passed when the non-client area is being created and enables automatic |
|
// non-client DPI scaling so that the non-client area automatically |
|
// responsponds to changes in DPI. All other messages are handled by |
|
// MessageHandler. |
|
static LRESULT CALLBACK WndProc(HWND const window, |
|
UINT const message, |
|
WPARAM const wparam, |
|
LPARAM const lparam) noexcept; |
|
|
|
// Retrieves a class instance pointer for |window| |
|
static Win32Window* GetThisFromHandle(HWND const window) noexcept; |
|
|
|
bool quit_on_close_ = false; |
|
|
|
// window handle for top level window. |
|
HWND window_handle_ = nullptr; |
|
|
|
// window handle for hosted content. |
|
HWND child_content_ = nullptr; |
|
}; |
|
|
|
#endif // WIN32_WINDOW_H_
|
|
|