8#include "../macros.hpp"
21hi_export_module(hikogui.win32.base);
23hi_export
namespace hi {
inline namespace v1 {
25enum class win32_error : uint32_t {
39namespace hi {
inline namespace v1 {
42 char const *name()
const noexcept override
51 switch (
static_cast<hi::win32_error
>(code)) {
52 case hi::win32_error::file_not_found:
53 return condition == std::errc::no_such_file_or_directory;
54 case hi::win32_error::more_data:
55 return condition == std::errc::message_size;
56 case hi::win32_error::invalid_data:
57 return condition == std::errc::bad_message;
58 case hi::win32_error::status_pending:
59 return condition == std::errc::interrupted;
60 case hi::win32_error::insufficient_buffer:
61 return condition == std::errc::no_buffer_space;
72 return {
static_cast<int>(code), global_win32_error_category};
94 auto s_len =
static_cast<int>(
static_cast<unsigned int>(s.size()));
100 auto r =
std::string(
static_cast<size_t>(
static_cast<std::make_signed_t<size_t>
>(
r_len)),
'\0');
101 r.resize_and_overwrite(
r_len, [&](
char *p,
size_t count) {
102 return ::WideCharToMultiByte(
code_page, flags, s.data(),
s_len, p,
static_cast<int>(count),
nullptr,
nullptr);
126 auto s_len =
static_cast<int>(
static_cast<unsigned int>(s.size()));
133 r.resize_and_overwrite(
r_len, [&](
wchar_t *p,
size_t count) {
134 return ::MultiByteToWideChar(
code_page, flags, s.data(),
s_len, p,
static_cast<int>(count));
157 while (first != last) {
183[[
nodiscard]] hi_inline std::expected<std::string, win32_error> win32_FormatMessage(win32_error error_code)
noexcept
185 auto const error_code_ =
static_cast<DWORD>(std::to_underlying(error_code));
210 if (
auto msg = win32_FormatMessage(
static_cast<win32_error
>(code))) {
228 auto i = std::bit_cast<uintptr_t>(handle);
232 return static_cast<uint32_t
>(i);
237 return std::bit_cast<HANDLE>(
static_cast<uintptr_t
>(i));
Rules for working with win32 headers.
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
The HikoGUI namespace.
Definition recursive_iterator.hpp:15
hi_inline std::expected< std::vector< std::string >, win32_error > win32_MultiSZToStringVector(wchar_t const *first, wchar_t const *last) noexcept
Convert a win32 zero terminated list of zero terminated strings.
Definition base.hpp:153
hi_inline std::expected< std::wstring, win32_error > win32_MultiByteToWideChar(std::string_view s, unsigned int code_page=CP_UTF8, uint32_t flags=0) noexcept
Convert a win32-API compatible std::wstring to a multi-byte std::string.
Definition base.hpp:119
hi_inline uint32_t win32_HANDLE_to_int(HANDLE handle) noexcept
Convert a HANDLE to a 32-bit unsigned integer.
Definition base.hpp:226
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:378
hi_inline std::expected< std::string, win32_error > win32_WideCharToMultiByte(std::wstring_view s, unsigned int code_page=CP_UTF8, uint32_t flags=0) noexcept
Convert a win32-API compatible std::wstring to a multi-byte std::string.
Definition base.hpp:87