aboutsummaryrefslogtreecommitdiff
path: root/c/common.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c/common.cpp')
-rw-r--r--c/common.cpp166
1 files changed, 0 insertions, 166 deletions
diff --git a/c/common.cpp b/c/common.cpp
deleted file mode 100644
index 0a54f69..0000000
--- a/c/common.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-#include <utility>
-#include <windows.h>
-
-#include "common.h"
-
-wchar_ptr::wchar_ptr() noexcept {}
-
-wchar_ptr::wchar_ptr(wchar_t* const s) noexcept : m_p(s) {}
-
-wchar_ptr& wchar_ptr::operator=(wchar_t* const s) noexcept
-{
- if (m_p != s) {
- delete m_p;
- m_p = s;
- }
- return *this;
-}
-
-wchar_ptr::wchar_ptr(wchar_ptr&& other) noexcept : m_p(std::exchange(other.m_p, nullptr)) {}
-
-wchar_ptr& wchar_ptr::operator=(wchar_ptr&& other) noexcept
-{
- std::swap(m_p, other.m_p);
- return *this;
-}
-
-wchar_ptr::operator wchar_t*() noexcept
-{
- return m_p;
-}
-
-wchar_t* wchar_ptr::release() noexcept
-{
- wchar_t* p2 = m_p;
- m_p = nullptr;
- return p2;
-}
-
-wchar_ptr::~wchar_ptr() noexcept
-{
- delete m_p;
-}
-
-wchar_ptr wchar_ptr::from_narrow(const char* const src, const int cp)
-{
- int cbMultiByte = strlen(src)+1;
- int cchWideChar = MultiByteToWideChar(cp, 0, src, cbMultiByte, NULL, 0);
- wchar_t* dst = new wchar_t[cchWideChar];
- if (!MultiByteToWideChar(cp, 0, src, cbMultiByte, dst, cchWideChar)) {
- delete dst;
- throw Win32Error();
- }
- return dst;
-}
-
-wchar_ptr wchar_ptr::copy(const wchar_t* const src)
-{
- const int cb = wcslen(src)+1;
- wchar_t* dst = new wchar_t[cb];
- memcpy(dst, src, cb*sizeof(wchar_t));
- return dst;
-}
-
-Win32Error::Win32Error() : code(GetLastError()) {}
-Win32Error::Win32Error(const DWORD code) : code(code) {}
-
-Win32Error::~Win32Error()
-{
- if (m_szMsg)
- HeapFree(GetProcessHeap(), 0, m_szMsg);
- if (m_wszMsg)
- HeapFree(GetProcessHeap(), 0, m_wszMsg);
-}
-
-const char* Win32Error::what() const noexcept
-{
- if (!m_szMsg)
- FormatMessageA(
- FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- code,
- MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
- (char*)&m_szMsg,
- 0, NULL);
- return m_szMsg;
-}
-
-const wchar_t* Win32Error::What() const noexcept
-{
- if (!m_wszMsg)
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- code,
- MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
- (wchar_t*)&m_wszMsg,
- 0, NULL);
- return m_wszMsg;
-}
-
-std::optional<Library> Library::Maybe(const wchar_t* const lib)
-{
- HMODULE hModule = LoadLibrary(lib);
- if (!hModule) return {};
- return Library(hModule);
-}
-
-Library::Library(const HMODULE hModule) : m_hModule(hModule) {}
-
-Library::Library(const wchar_t* const lib)
-{
- m_hModule = LoadLibrary(lib);
- if (!m_hModule)
- throw Win32Error();
-}
-
-Library::~Library()
-{
- FreeLibrary(m_hModule);
-}
-
-int EBMessageBox(const wchar_t* const wszText, const wchar_t* const wszCaption, const unsigned uType)
-{
- extern HWND g_hWnd;
-
- auto proc = [](const int nCode, const WPARAM wParam, const LPARAM lParam) noexcept
- -> LRESULT CALLBACK
- {
- if (!g_hWnd || nCode < 0 || nCode != HCBT_ACTIVATE)
- return CallNextHookEx(0, nCode, wParam, lParam);
-
- HWND hWnd = (HWND)wParam;
- long lStyle = GetWindowLong(hWnd, GWL_STYLE);
- if (!(lStyle & WS_POPUP)) return 0;
-
- RECT rcMain, rcMsg;
- GetWindowRect(g_hWnd, &rcMain);
- GetWindowRect(hWnd, &rcMsg);
- SetWindowPos(hWnd, NULL,
- rcMain.left+(rcMain.right-rcMain.left)/2-(rcMsg.right-rcMsg.left)/2,
- rcMain.top+(rcMain.bottom-rcMain.top)/2-(rcMsg.bottom-rcMsg.top)/2,
- -1, -1,
- SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
-
- return 0;
- };
-
- HHOOK hHook = require(SetWindowsHookEx(WH_CBT, proc, (HINSTANCE)NULL, GetCurrentThreadId()));
- int r = MessageBox(g_hWnd, wszText, wszCaption, uType);
- require(UnhookWindowsHookEx(hHook));
- return r;
-}
-
-int GetRelativeCursorPos(HWND hWnd, POINT* pt)
-{
- RECT rc;
- if (!GetClientRect(hWnd, &rc)) return 0;
- SetLastError(ERROR_SUCCESS);
- if (!MapWindowPoints(hWnd, NULL, (POINT*)&rc, 2)) return 0;
-
- POINT ptMouse;
- if (!GetCursorPos(&ptMouse)) return 0;
- pt->x = ptMouse.x-rc.left;
- pt->y = ptMouse.y-rc.top;
- return 1;
-}