h1-mod/src/client/launcher/window.hpp
2022-02-03 11:05:24 -08:00

45 lines
986 B
C++

#pragma once
#define WM_KILL_WINDOW (WM_USER+0)
class window
{
public:
window();
virtual ~window();
void create(const std::string& title, int width, int height,
long flags = (WS_OVERLAPPEDWINDOW & ~(WS_THICKFRAME | WS_MAXIMIZEBOX)));
void close();
void show() const;
void hide() const;
void set_callback(const std::function<LRESULT(window*, UINT, WPARAM, LPARAM)>& callback);
operator HWND() const;
static void run();
static void close_all();
protected:
virtual LRESULT processor(UINT message, WPARAM w_param, LPARAM l_param);
private:
uint32_t last_dpi_ = 96;
WNDCLASSEX wc_{};
HWND handle_ = nullptr;
std::string classname_;
std::function<LRESULT(window*, UINT, WPARAM, LPARAM)> callback_;
static LRESULT CALLBACK static_processor(HWND hwnd, UINT message, WPARAM w_param, LPARAM l_param);
static std::mutex mutex_;
static std::vector<window*> windows_;
static void remove_window(const window* window);
static int get_window_count();
};