diff options
35 files changed, 132 insertions, 78 deletions
diff --git a/include/cru/win/Base.hpp b/include/cru/win/Base.hpp new file mode 100644 index 00000000..d78f2538 --- /dev/null +++ b/include/cru/win/Base.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "WinPreConfig.hpp" + +#ifdef CRU_PLATFORM_WINDOWS +#ifdef CRU_WIN_EXPORT_API +#define CRU_WIN_API __declspec(dllexport) +#else +#define CRU_WIN_API __declspec(dllimport) +#endif +#else +#define CRU_WIN_API +#endif diff --git a/src/win/DebugLogger.hpp b/include/cru/win/DebugLogger.hpp index 5e78af22..05793607 100644 --- a/src/win/DebugLogger.hpp +++ b/include/cru/win/DebugLogger.hpp @@ -1,10 +1,11 @@ -#include "cru/win/WinPreConfig.hpp" +#pragma once +#include "Base.hpp" #include "cru/common/Logger.hpp" namespace cru::platform::win { -class WinDebugLoggerSource : public ::cru::log::ILogSource { +class CRU_WIN_API WinDebugLoggerSource : public ::cru::log::ILogSource { public: WinDebugLoggerSource() = default; diff --git a/src/win/StdOutLogger.hpp b/include/cru/win/StdOutLogger.hpp index b3a22dd5..cfda0a85 100644 --- a/src/win/StdOutLogger.hpp +++ b/include/cru/win/StdOutLogger.hpp @@ -1,12 +1,10 @@ -#include "cru/common/Base.hpp" -#include "cru/win/WinPreConfig.hpp" +#pragma once +#include "Base.hpp" #include "cru/common/Logger.hpp" -#include <cwchar> - namespace cru::platform::win { -class WinStdOutLoggerSource : public ::cru::log::ILogSource { +class CRU_WIN_API WinStdOutLoggerSource : public ::cru::log::ILogSource { public: WinStdOutLoggerSource() = default; diff --git a/include/cru/win/graphics/direct/Base.hpp b/include/cru/win/graphics/direct/Base.hpp new file mode 100644 index 00000000..b25a1c14 --- /dev/null +++ b/include/cru/win/graphics/direct/Base.hpp @@ -0,0 +1,12 @@ +#pragma once +#include "../../WinPreConfig.hpp" + +#ifdef CRU_PLATFORM_WINDOWS +#ifdef CRU_WIN_GRAPHICS_DIRECT_EXPORT_API +#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllexport) +#else +#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllimport) +#endif +#else +#define CRU_WIN_GRAPHICS_DIRECT_API +#endif diff --git a/include/cru/win/graphics/direct/Brush.hpp b/include/cru/win/graphics/direct/Brush.hpp index 9d8e5384..22b0a8af 100644 --- a/include/cru/win/graphics/direct/Brush.hpp +++ b/include/cru/win/graphics/direct/Brush.hpp @@ -5,14 +5,15 @@ #include "cru/platform/graphics/Brush.hpp" namespace cru::platform::graphics::win::direct { -struct ID2DBrush : virtual IBrush { +struct CRU_WIN_GRAPHICS_DIRECT_API ID2DBrush : virtual IBrush { virtual ID2D1Brush* GetD2DBrushInterface() const = 0; }; -class D2DSolidColorBrush : public DirectGraphicsResource, - public virtual ISolidColorBrush, - public virtual ID2DBrush, - public virtual IComResource<ID2D1SolidColorBrush> { +class CRU_WIN_GRAPHICS_DIRECT_API D2DSolidColorBrush + : public DirectGraphicsResource, + public virtual ISolidColorBrush, + public virtual ID2DBrush, + public virtual IComResource<ID2D1SolidColorBrush> { public: explicit D2DSolidColorBrush(DirectGraphicsFactory* factory); diff --git a/include/cru/win/graphics/direct/ComResource.hpp b/include/cru/win/graphics/direct/ComResource.hpp index 34ea39ed..f8738f6e 100644 --- a/include/cru/win/graphics/direct/ComResource.hpp +++ b/include/cru/win/graphics/direct/ComResource.hpp @@ -1,11 +1,11 @@ #pragma once -#include "../../WinPreConfig.hpp" +#include "Base.hpp" #include "cru/common/Base.hpp" namespace cru::platform::graphics::win::direct { template <typename TInterface> -struct IComResource : virtual Interface { +struct CRU_WIN_GRAPHICS_DIRECT_API IComResource : virtual Interface { virtual TInterface* GetComInterface() const = 0; }; } // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/ConvertUtil.hpp b/include/cru/win/graphics/direct/ConvertUtil.hpp index 0d8da8a1..963b22f3 100644 --- a/include/cru/win/graphics/direct/ConvertUtil.hpp +++ b/include/cru/win/graphics/direct/ConvertUtil.hpp @@ -1,5 +1,5 @@ #pragma once -#include "../../WinPreConfig.hpp" +#include "Base.hpp" #include "cru/platform/graphics/Base.hpp" diff --git a/include/cru/win/graphics/direct/Factory.hpp b/include/cru/win/graphics/direct/Factory.hpp index efcebba7..932d302b 100644 --- a/include/cru/win/graphics/direct/Factory.hpp +++ b/include/cru/win/graphics/direct/Factory.hpp @@ -4,8 +4,9 @@ #include "cru/platform/graphics/Factory.hpp" namespace cru::platform::graphics::win::direct { -class DirectGraphicsFactory : public DirectResource, - public virtual IGraphicsFactory { +class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory + : public DirectResource, + public virtual IGraphicsFactory { public: DirectGraphicsFactory(); diff --git a/include/cru/win/graphics/direct/Font.hpp b/include/cru/win/graphics/direct/Font.hpp index 3cd94f82..3bf423a0 100644 --- a/include/cru/win/graphics/direct/Font.hpp +++ b/include/cru/win/graphics/direct/Font.hpp @@ -7,9 +7,10 @@ #include <string_view> namespace cru::platform::graphics::win::direct { -class DWriteFont : public DirectGraphicsResource, - public virtual IFont, - public virtual IComResource<IDWriteTextFormat> { +class CRU_WIN_GRAPHICS_DIRECT_API DWriteFont + : public DirectGraphicsResource, + public virtual IFont, + public virtual IComResource<IDWriteTextFormat> { public: DWriteFont(DirectGraphicsFactory* factory, String font_family, float font_size); diff --git a/include/cru/win/graphics/direct/Geometry.hpp b/include/cru/win/graphics/direct/Geometry.hpp index b3b82f9c..3849045e 100644 --- a/include/cru/win/graphics/direct/Geometry.hpp +++ b/include/cru/win/graphics/direct/Geometry.hpp @@ -5,8 +5,9 @@ #include "cru/platform/graphics/Geometry.hpp" namespace cru::platform::graphics::win::direct { -class D2DGeometryBuilder : public DirectGraphicsResource, - public virtual IGeometryBuilder { +class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometryBuilder + : public DirectGraphicsResource, + public virtual IGeometryBuilder { public: explicit D2DGeometryBuilder(DirectGraphicsFactory* factory); @@ -33,9 +34,10 @@ class D2DGeometryBuilder : public DirectGraphicsResource, Microsoft::WRL::ComPtr<ID2D1GeometrySink> geometry_sink_; }; -class D2DGeometry : public DirectGraphicsResource, - public virtual IGeometry, - public IComResource<ID2D1Geometry> { +class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometry + : public DirectGraphicsResource, + public virtual IGeometry, + public IComResource<ID2D1Geometry> { public: D2DGeometry(DirectGraphicsFactory* factory, Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry); diff --git a/include/cru/win/graphics/direct/Painter.hpp b/include/cru/win/graphics/direct/Painter.hpp index d7b90d19..81d102f1 100644 --- a/include/cru/win/graphics/direct/Painter.hpp +++ b/include/cru/win/graphics/direct/Painter.hpp @@ -7,9 +7,10 @@ #include <vector> namespace cru::platform::graphics::win::direct { -class D2DPainter : public DirectResource, - public virtual IPainter, - public virtual IComResource<ID2D1RenderTarget> { +class CRU_WIN_GRAPHICS_DIRECT_API D2DPainter + : public DirectResource, + public virtual IPainter, + public virtual IComResource<ID2D1RenderTarget> { public: explicit D2DPainter(ID2D1RenderTarget* render_target); diff --git a/include/cru/win/graphics/direct/Resource.hpp b/include/cru/win/graphics/direct/Resource.hpp index c376628d..112af26f 100644 --- a/include/cru/win/graphics/direct/Resource.hpp +++ b/include/cru/win/graphics/direct/Resource.hpp @@ -1,5 +1,5 @@ #pragma once -#include "../../WinPreConfig.hpp" +#include "Base.hpp" #include "cru/platform/graphics/Resource.hpp" @@ -8,7 +8,9 @@ namespace cru::platform::graphics::win::direct { class DirectGraphicsFactory; -class DirectResource : public Object, public virtual IPlatformResource { +class CRU_WIN_GRAPHICS_DIRECT_API DirectResource + : public Object, + public virtual IPlatformResource { public: static String kPlatformId; @@ -25,8 +27,9 @@ class DirectResource : public Object, public virtual IPlatformResource { String GetPlatformId() const final { return kPlatformId; } }; -class DirectGraphicsResource : public DirectResource, - public virtual IGraphicsResource { +class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsResource + : public DirectResource, + public virtual IGraphicsResource { protected: // Param factory can't be null. explicit DirectGraphicsResource(DirectGraphicsFactory* factory); diff --git a/include/cru/win/graphics/direct/TextLayout.hpp b/include/cru/win/graphics/direct/TextLayout.hpp index b1843dd7..41698862 100644 --- a/include/cru/win/graphics/direct/TextLayout.hpp +++ b/include/cru/win/graphics/direct/TextLayout.hpp @@ -10,9 +10,10 @@ namespace cru::platform::graphics::win::direct { class DWriteFont; -class DWriteTextLayout : public DirectGraphicsResource, - public virtual ITextLayout, - public virtual IComResource<IDWriteTextLayout> { +class CRU_WIN_GRAPHICS_DIRECT_API DWriteTextLayout + : public DirectGraphicsResource, + public virtual ITextLayout, + public virtual IComResource<IDWriteTextLayout> { public: DWriteTextLayout(DirectGraphicsFactory* factory, std::shared_ptr<IFont> font, String text); diff --git a/include/cru/win/graphics/direct/WindowPainter.hpp b/include/cru/win/graphics/direct/WindowPainter.hpp index b5faf7b5..a39bc2b7 100644 --- a/include/cru/win/graphics/direct/WindowPainter.hpp +++ b/include/cru/win/graphics/direct/WindowPainter.hpp @@ -3,7 +3,8 @@ #include "WindowRenderTarget.hpp" namespace cru::platform::graphics::win::direct { -class D2DWindowPainter : public graphics::win::direct::D2DPainter { +class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowPainter + : public graphics::win::direct::D2DPainter { public: explicit D2DWindowPainter(D2DWindowRenderTarget* window); diff --git a/include/cru/win/graphics/direct/WindowRenderTarget.hpp b/include/cru/win/graphics/direct/WindowRenderTarget.hpp index c197841d..4774a1d3 100644 --- a/include/cru/win/graphics/direct/WindowRenderTarget.hpp +++ b/include/cru/win/graphics/direct/WindowRenderTarget.hpp @@ -3,9 +3,10 @@ namespace cru::platform::graphics::win::direct { // Represents a window render target. -class D2DWindowRenderTarget : public Object { +class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowRenderTarget : public Object { public: - D2DWindowRenderTarget(gsl::not_null<DirectGraphicsFactory*> factory, HWND hwnd); + D2DWindowRenderTarget(gsl::not_null<DirectGraphicsFactory*> factory, + HWND hwnd); CRU_DELETE_COPY(D2DWindowRenderTarget) CRU_DELETE_MOVE(D2DWindowRenderTarget) diff --git a/include/cru/win/gui/Base.hpp b/include/cru/win/gui/Base.hpp index 00782663..e6807710 100644 --- a/include/cru/win/gui/Base.hpp +++ b/include/cru/win/gui/Base.hpp @@ -3,6 +3,16 @@ #include "cru/common/Base.hpp" +#ifdef CRU_PLATFORM_WINDOWS +#ifdef CRU_WIN_GUI_EXPORT_API +#define CRU_WIN_GUI_API __declspec(dllexport) +#else +#define CRU_WIN_GUI_API __declspec(dllimport) +#endif +#else +#define CRU_WIN_GUI_API +#endif + namespace cru::platform::gui::win { class GodWindow; class TimerManager; diff --git a/include/cru/win/gui/Cursor.hpp b/include/cru/win/gui/Cursor.hpp index e7c76879..89f61db9 100644 --- a/include/cru/win/gui/Cursor.hpp +++ b/include/cru/win/gui/Cursor.hpp @@ -6,7 +6,8 @@ #include <memory> namespace cru::platform::gui::win { -class WinCursor : public WinNativeResource, public virtual ICursor { +class CRU_WIN_GUI_API WinCursor : public WinNativeResource, + public virtual ICursor { CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::WinCursor") public: diff --git a/include/cru/win/gui/GodWindow.hpp b/include/cru/win/gui/GodWindow.hpp index d9a128e6..fa69cb84 100644 --- a/include/cru/win/gui/GodWindow.hpp +++ b/include/cru/win/gui/GodWindow.hpp @@ -8,7 +8,7 @@ #include <memory> namespace cru::platform::gui::win { -class GodWindow : public Object { +class CRU_WIN_GUI_API GodWindow : public Object { CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::GodWindow") public: diff --git a/include/cru/win/gui/InputMethod.hpp b/include/cru/win/gui/InputMethod.hpp index 3784dcda..0f50c0aa 100644 --- a/include/cru/win/gui/InputMethod.hpp +++ b/include/cru/win/gui/InputMethod.hpp @@ -11,7 +11,7 @@ #include <imm.h> namespace cru::platform::gui::win { -class AutoHIMC : public Object { +class CRU_WIN_GUI_API AutoHIMC : public Object { CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::AutoHIMC") public: @@ -33,8 +33,9 @@ class AutoHIMC : public Object { HIMC handle_; }; -class WinInputMethodContext : public WinNativeResource, - public virtual IInputMethodContext { +class CRU_WIN_GUI_API WinInputMethodContext + : public WinNativeResource, + public virtual IInputMethodContext { CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::WinInputMethodContext") public: diff --git a/include/cru/win/gui/Keyboard.hpp b/include/cru/win/gui/Keyboard.hpp index 5b98833c..d736966a 100644 --- a/include/cru/win/gui/Keyboard.hpp +++ b/include/cru/win/gui/Keyboard.hpp @@ -4,6 +4,6 @@ #include "cru/platform/gui/Keyboard.hpp" namespace cru::platform::gui::win { -KeyCode VirtualKeyToKeyCode(int virtual_key); -KeyModifier RetrieveKeyMofifier(); +KeyCode CRU_WIN_GUI_API VirtualKeyToKeyCode(int virtual_key); +KeyModifier CRU_WIN_GUI_API RetrieveKeyMofifier(); } // namespace cru::platform::gui::win diff --git a/include/cru/win/gui/Resource.hpp b/include/cru/win/gui/Resource.hpp index 4215de69..34c4fc1b 100644 --- a/include/cru/win/gui/Resource.hpp +++ b/include/cru/win/gui/Resource.hpp @@ -4,7 +4,8 @@ #include "cru/platform/Resource.hpp" namespace cru::platform::gui::win { -class WinNativeResource : public Object, public virtual IPlatformResource { +class CRU_WIN_GUI_API WinNativeResource : public Object, + public virtual IPlatformResource { public: static String kPlatformId; diff --git a/include/cru/win/gui/UiApplication.hpp b/include/cru/win/gui/UiApplication.hpp index 4b972fee..a13dc932 100644 --- a/include/cru/win/gui/UiApplication.hpp +++ b/include/cru/win/gui/UiApplication.hpp @@ -11,8 +11,8 @@ class DirectGraphicsFactory; } namespace cru::platform::gui::win { -class WinUiApplication : public WinNativeResource, - public virtual IUiApplication { +class CRU_WIN_GUI_API WinUiApplication : public WinNativeResource, + public virtual IUiApplication { public: static WinUiApplication* GetInstance() { return instance; } diff --git a/include/cru/win/gui/Window.hpp b/include/cru/win/gui/Window.hpp index 41eac5fa..baca8f00 100644 --- a/include/cru/win/gui/Window.hpp +++ b/include/cru/win/gui/Window.hpp @@ -9,7 +9,8 @@ #include <memory> namespace cru::platform::gui::win { -class WinNativeWindow : public WinNativeResource, public virtual INativeWindow { +class CRU_WIN_GUI_API WinNativeWindow : public WinNativeResource, + public virtual INativeWindow { CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::WinNativeWindow") public: diff --git a/include/cru/win/gui/WindowClass.hpp b/include/cru/win/gui/WindowClass.hpp index 2c07b68f..ab55b214 100644 --- a/include/cru/win/gui/WindowClass.hpp +++ b/include/cru/win/gui/WindowClass.hpp @@ -4,7 +4,7 @@ #include <string> namespace cru::platform::gui::win { -class WindowClass : public Object { +class CRU_WIN_GUI_API WindowClass : public Object { public: WindowClass(std::wstring name, WNDPROC window_proc, HINSTANCE h_instance); diff --git a/include/cru/win/gui/WindowNativeMessageEventArgs.hpp b/include/cru/win/gui/WindowNativeMessageEventArgs.hpp index 834ba3c2..7e62c19d 100644 --- a/include/cru/win/gui/WindowNativeMessageEventArgs.hpp +++ b/include/cru/win/gui/WindowNativeMessageEventArgs.hpp @@ -1,17 +1,17 @@ #pragma once -#include "../WinPreConfig.hpp" +#include "Base.hpp" #include "cru/common/Base.hpp" namespace cru::platform::gui::win { -struct WindowNativeMessage { +struct CRU_WIN_GUI_API WindowNativeMessage { HWND hwnd; UINT msg; WPARAM w_param; LPARAM l_param; }; -class WindowNativeMessageEventArgs : public Object { +class CRU_WIN_GUI_API WindowNativeMessageEventArgs : public Object { public: WindowNativeMessageEventArgs(const WindowNativeMessage& message) : message_(message) {} diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt index e190e9a0..ff3d6f96 100644 --- a/src/win/CMakeLists.txt +++ b/src/win/CMakeLists.txt @@ -1,8 +1,8 @@ -add_library(cru_win_base STATIC - DebugLogger.hpp - StdOutLogger.hpp +add_library(cru_win_base SHARED + ForDllExport.cpp ) target_compile_definitions(cru_win_base PUBLIC UNICODE _UNICODE) # use unicode +target_compile_definitions(cru_win_base PRIVATE CRU_WIN_EXPORT_API) target_link_libraries(cru_win_base PUBLIC cru_base) add_subdirectory(graphics) diff --git a/src/win/ForDllExport.cpp b/src/win/ForDllExport.cpp new file mode 100644 index 00000000..4662461b --- /dev/null +++ b/src/win/ForDllExport.cpp @@ -0,0 +1,2 @@ +#include "cru/win/DebugLogger.hpp" +#include "cru/win/StdOutLogger.hpp" diff --git a/src/win/graphics/direct/CMakeLists.txt b/src/win/graphics/direct/CMakeLists.txt index ecd72b13..84c2af61 100644 --- a/src/win/graphics/direct/CMakeLists.txt +++ b/src/win/graphics/direct/CMakeLists.txt @@ -1,4 +1,4 @@ -add_library(cru_win_graphics_direct STATIC +add_library(cru_win_graphics_direct SHARED Brush.cpp Font.cpp Geometry.cpp @@ -11,3 +11,4 @@ add_library(cru_win_graphics_direct STATIC ) target_link_libraries(cru_win_graphics_direct PUBLIC D3D11 D2d1 DWrite) target_link_libraries(cru_win_graphics_direct PUBLIC cru_win_base cru_platform_graphics) +target_compile_definitions(cru_win_graphics_direct PRIVATE CRU_WIN_GRAPHICS_DIRECT_EXPORT_API) diff --git a/src/win/graphics/direct/Font.cpp b/src/win/graphics/direct/Font.cpp index ffc16214..39ba2d8b 100644 --- a/src/win/graphics/direct/Font.cpp +++ b/src/win/graphics/direct/Font.cpp @@ -16,7 +16,7 @@ DWriteFont::DWriteFont(DirectGraphicsFactory* factory, String font_family, if (!::GetUserDefaultLocaleName(buffer.data(), static_cast<int>(buffer.size()))) throw platform::win::Win32Error( - ::GetLastError(), "Failed to get locale when create dwrite font."); + ::GetLastError(), u"Failed to get locale when create dwrite font."); ThrowIfFailed(factory->GetDWriteFactory()->CreateTextFormat( reinterpret_cast<const wchar_t*>(font_family_.c_str()), nullptr, diff --git a/src/win/gui/CMakeLists.txt b/src/win/gui/CMakeLists.txt index 2c8d1aab..b9d2862f 100644 --- a/src/win/gui/CMakeLists.txt +++ b/src/win/gui/CMakeLists.txt @@ -1,4 +1,4 @@ -add_library(cru_win_gui STATIC +add_library(cru_win_gui SHARED TimerManager.hpp WindowManager.hpp @@ -15,3 +15,4 @@ add_library(cru_win_gui STATIC ) target_link_libraries(cru_win_gui PUBLIC imm32) target_link_libraries(cru_win_gui PUBLIC cru_win_graphics_direct cru_platform_gui) +target_compile_definitions(cru_win_gui PRIVATE CRU_WIN_GUI_EXPORT_API) diff --git a/src/win/gui/Cursor.cpp b/src/win/gui/Cursor.cpp index 80e8a749..a3a7f824 100644 --- a/src/win/gui/Cursor.cpp +++ b/src/win/gui/Cursor.cpp @@ -27,7 +27,7 @@ WinCursor* LoadWinCursor(const wchar_t* name) { const auto handle = static_cast<HCURSOR>(::LoadImageW( NULL, name, IMAGE_CURSOR, SM_CYCURSOR, SM_CYCURSOR, LR_SHARED)); if (handle == NULL) { - throw Win32Error(::GetLastError(), "Failed to load system cursor."); + throw Win32Error(::GetLastError(), u"Failed to load system cursor."); } return new WinCursor(handle, false); } diff --git a/src/win/gui/TimerManager.cpp b/src/win/gui/TimerManager.cpp index fc26b6c4..f3da1f09 100644 --- a/src/win/gui/TimerManager.cpp +++ b/src/win/gui/TimerManager.cpp @@ -26,7 +26,7 @@ long long TimerManager::SetTimer(TimerType type, int period, gsl::narrow<UINT_PTR>(id), 0)) { throw Win32Error( ::GetLastError(), - "Failed to post window message to god window for set immediate."); + u"Failed to post window message to god window for set immediate."); } } else { CreateNativeTimer(&timer_info); diff --git a/src/win/gui/UiApplication.cpp b/src/win/gui/UiApplication.cpp index cb0f0a4c..dadcfc75 100644 --- a/src/win/gui/UiApplication.cpp +++ b/src/win/gui/UiApplication.cpp @@ -1,11 +1,11 @@ #include "cru/win/gui/UiApplication.hpp" -#include "../DebugLogger.hpp" -#include "../StdOutLogger.hpp" #include "TimerManager.hpp" #include "WindowManager.hpp" #include "cru/common/Logger.hpp" #include "cru/platform/Check.hpp" +#include "cru/win/DebugLogger.hpp" +#include "cru/win/StdOutLogger.hpp" #include "cru/win/graphics/direct/Factory.hpp" #include "cru/win/gui/Cursor.hpp" #include "cru/win/gui/Exception.hpp" @@ -27,7 +27,7 @@ WinUiApplication::WinUiApplication() { instance_handle_ = ::GetModuleHandleW(nullptr); if (!instance_handle_) - throw Win32Error("Failed to get module(instance) handle."); + throw Win32Error(u"Failed to get module(instance) handle."); ::SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE); diff --git a/src/win/gui/Window.cpp b/src/win/gui/Window.cpp index 7ee2fb71..b3cf7065 100644 --- a/src/win/gui/Window.cpp +++ b/src/win/gui/Window.cpp @@ -42,7 +42,7 @@ Rect CalcWindowRectFromClient(const Rect& rect, WindowStyleFlag style_flag, r.right = DipToPixel(rect.GetRight(), dpi); r.bottom = DipToPixel(rect.GetBottom(), dpi); if (!AdjustWindowRectEx(&r, CalcWindowStyle(style_flag), FALSE, 0)) - throw Win32Error(::GetLastError(), "Failed to invoke AdjustWindowRectEx."); + throw Win32Error(::GetLastError(), u"Failed to invoke AdjustWindowRectEx."); Rect result = Rect::FromVertices(PixelToDip(r.left, dpi), PixelToDip(r.top, dpi), @@ -55,7 +55,7 @@ Rect CalcClientRectFromWindow(const Rect& rect, WindowStyleFlag style_flag, RECT o{100, 100, 500, 500}; RECT s = o; if (!AdjustWindowRectEx(&s, CalcWindowStyle(style_flag), FALSE, 0)) - throw Win32Error(::GetLastError(), "Failed to invoke AdjustWindowRectEx."); + throw Win32Error(::GetLastError(), u"Failed to invoke AdjustWindowRectEx."); Rect result = rect; result.Shrink(Thickness(PixelToDip(s.left - o.left, dpi), @@ -125,7 +125,7 @@ void WinNativeWindow::SetClientSize(const Size& size) { if (!SetWindowPos(hwnd_, nullptr, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER | SWP_NOMOVE)) - throw Win32Error(::GetLastError(), "Failed to invoke SetWindowPos."); + throw Win32Error(::GetLastError(), u"Failed to invoke SetWindowPos."); } } @@ -140,7 +140,7 @@ void WinNativeWindow::SetClientRect(const Rect& rect) { if (!SetWindowPos(hwnd_, nullptr, 0, 0, r.right - r.left, r.bottom - r.top, SWP_NOZORDER | SWP_NOMOVE)) - throw Win32Error(::GetLastError(), "Failed to invoke SetWindowPos."); + throw Win32Error(::GetLastError(), u"Failed to invoke SetWindowPos."); } } @@ -148,7 +148,7 @@ Rect WinNativeWindow::GetWindowRect() { if (hwnd_) { RECT rect; if (!::GetWindowRect(hwnd_, &rect)) - throw Win32Error(::GetLastError(), "Failed to invoke GetWindowRect."); + throw Win32Error(::GetLastError(), u"Failed to invoke GetWindowRect."); return Rect::FromVertices(PixelToDip(rect.left), PixelToDip(rect.top), PixelToDip(rect.right), PixelToDip(rect.bottom)); @@ -164,7 +164,7 @@ void WinNativeWindow::SetWindowRect(const Rect& rect) { if (!SetWindowPos(hwnd_, nullptr, DipToPixel(rect.left), DipToPixel(rect.top), DipToPixel(rect.GetRight()), DipToPixel(rect.GetBottom()), SWP_NOZORDER)) - throw Win32Error(::GetLastError(), "Failed to invoke SetWindowPos."); + throw Win32Error(::GetLastError(), u"Failed to invoke SetWindowPos."); } } @@ -179,9 +179,9 @@ bool WinNativeWindow::RequestFocus() { Point WinNativeWindow::GetMousePosition() { POINT p; if (!::GetCursorPos(&p)) - throw Win32Error(::GetLastError(), "Failed to get cursor position."); + throw Win32Error(::GetLastError(), u"Failed to get cursor position."); if (!::ScreenToClient(hwnd_, &p)) - throw Win32Error(::GetLastError(), "Failed to call ScreenToClient."); + throw Win32Error(::GetLastError(), u"Failed to call ScreenToClient."); return PixelToDip(p); } @@ -200,9 +200,9 @@ void WinNativeWindow::RequestRepaint() { log::TagDebug(log_tag, u"A repaint is requested."); } if (!::InvalidateRect(hwnd_, nullptr, FALSE)) - throw Win32Error(::GetLastError(), "Failed to invalidate window."); + throw Win32Error(::GetLastError(), u"Failed to invalidate window."); if (!::UpdateWindow(hwnd_)) - throw Win32Error(::GetLastError(), "Failed to update window."); + throw Win32Error(::GetLastError(), u"Failed to update window."); } std::unique_ptr<graphics::IPainter> WinNativeWindow::BeginPaint() { @@ -438,7 +438,7 @@ bool WinNativeWindow::HandleNativeWindowMessage(HWND hwnd, UINT msg, RECT WinNativeWindow::GetClientRectPixel() { RECT rect; if (!::GetClientRect(hwnd_, &rect)) - throw Win32Error(::GetLastError(), "Failed to invoke GetClientRect."); + throw Win32Error(::GetLastError(), u"Failed to invoke GetClientRect."); return rect; } @@ -453,11 +453,11 @@ void WinNativeWindow::RecreateWindow() { nullptr, application_->GetInstanceHandle(), nullptr); if (hwnd_ == nullptr) - throw Win32Error(::GetLastError(), "Failed to create window."); + throw Win32Error(::GetLastError(), u"Failed to create window."); auto dpi = ::GetDpiForWindow(hwnd_); if (dpi == 0) - throw Win32Error(::GetLastError(), "Failed to get dpi of window."); + throw Win32Error(::GetLastError(), u"Failed to get dpi of window."); dpi_ = static_cast<float>(dpi); log::Debug(u"Dpi of window is {}.", dpi_); diff --git a/src/win/gui/WindowClass.cpp b/src/win/gui/WindowClass.cpp index a033d091..9d86d791 100644 --- a/src/win/gui/WindowClass.cpp +++ b/src/win/gui/WindowClass.cpp @@ -23,6 +23,6 @@ WindowClass::WindowClass(std::wstring name, WNDPROC window_proc, atom_ = ::RegisterClassExW(&window_class); if (atom_ == 0) - throw Win32Error(::GetLastError(), "Failed to create window class."); + throw Win32Error(::GetLastError(), u"Failed to create window class."); } } // namespace cru::platform::gui::win |