90 lines
1.2 KiB
C++
90 lines
1.2 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include <string>
|
||
|
#include "nt.hpp"
|
||
|
|
||
|
namespace utils::image
|
||
|
{
|
||
|
struct image
|
||
|
{
|
||
|
size_t width;
|
||
|
size_t height;
|
||
|
std::string data;
|
||
|
};
|
||
|
|
||
|
class object
|
||
|
{
|
||
|
public:
|
||
|
object() = default;
|
||
|
|
||
|
object(const HGDIOBJ h)
|
||
|
: handle_(h)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
~object()
|
||
|
{
|
||
|
if (*this)
|
||
|
{
|
||
|
DeleteObject(this->handle_);
|
||
|
this->handle_ = nullptr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
object(const object&) = delete;
|
||
|
object& operator=(const object&) = delete;
|
||
|
|
||
|
object(object&& obj) noexcept
|
||
|
: object()
|
||
|
{
|
||
|
this->operator=(std::move(obj));
|
||
|
}
|
||
|
|
||
|
object& operator=(object&& obj) noexcept
|
||
|
{
|
||
|
if (this != &obj)
|
||
|
{
|
||
|
this->~object();
|
||
|
this->handle_ = obj.handle_;
|
||
|
obj.handle_ = nullptr;
|
||
|
}
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
object& operator=(HANDLE h) noexcept
|
||
|
{
|
||
|
this->~object();
|
||
|
this->handle_ = h;
|
||
|
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
HGDIOBJ get() const
|
||
|
{
|
||
|
return this->handle_;
|
||
|
}
|
||
|
|
||
|
operator bool() const
|
||
|
{
|
||
|
return this->handle_ != nullptr;
|
||
|
}
|
||
|
|
||
|
operator HGDIOBJ() const
|
||
|
{
|
||
|
return this->handle_;
|
||
|
}
|
||
|
|
||
|
operator LPARAM() const
|
||
|
{
|
||
|
return reinterpret_cast<LPARAM>(this->handle_);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
HGDIOBJ handle_{nullptr};
|
||
|
};
|
||
|
|
||
|
image load_image(const std::string& data);
|
||
|
object create_bitmap(const image& img);
|
||
|
}
|