#include <memory>
#include <iostream>

	enum class WindowShowMode
	{
		Hide = 0, // SW_HIDE,
		Show = 1, // SW_SHOWNORMAL,
		Minimize = 6, // SW_MINIMIZE,
		Maximize = 3, // SW_SHOWMAXIMIZED,
	};
	
class Window {
public:
    Window();
    ~Window();
    void show();
    void hide();
private:
    class NativeControl;
    std::unique_ptr<NativeControl> _window;
};

class Window::NativeControl {
	public:
		void show(WindowShowMode showMode)
		{
			std::cout << "I'm a window!";
		}
	};

Window::Window()
    : _window(std::make_unique<Window::NativeControl>()) {
}

Window::~Window() {
}

void Window::show() 
{
    _window->show(WindowShowMode::Show);
}

void Window::hide()
{
    _window->show(WindowShowMode::Hide);
}

int main()
{
	Window window;

	window.show();
}