diff options
author | crupest <crupest@outlook.com> | 2019-04-01 16:00:29 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-04-01 16:00:29 +0800 |
commit | 0a429ee13c9fb9a9da6df62b1ebae101180278f5 (patch) | |
tree | 7c6f34ca466e19e423d54178825b517e94663f8d | |
parent | 9e382d2175c6706e69b734480e26032e16d0bde4 (diff) | |
download | cru-0a429ee13c9fb9a9da6df62b1ebae101180278f5.tar.gz cru-0a429ee13c9fb9a9da6df62b1ebae101180278f5.tar.bz2 cru-0a429ee13c9fb9a9da6df62b1ebae101180278f5.zip |
...
-rw-r--r-- | include/cru/platform/ui_applicaition.hpp | 2 | ||||
-rw-r--r-- | include/cru/platform/win/win_application.hpp | 3 | ||||
-rw-r--r-- | src/platform_win/win_application.cpp | 22 |
3 files changed, 26 insertions, 1 deletions
diff --git a/include/cru/platform/ui_applicaition.hpp b/include/cru/platform/ui_applicaition.hpp index 1f30ce17..16739f9d 100644 --- a/include/cru/platform/ui_applicaition.hpp +++ b/include/cru/platform/ui_applicaition.hpp @@ -25,7 +25,7 @@ struct UiApplication : public virtual Interface { virtual void CancelTimer(unsigned long id) = 0; virtual std::vector<NativeWindow*> GetAllWindow() = 0; - virtual NativeWindow* CreateWindow() = 0; + virtual NativeWindow* CreateWindow(NativeWindow* parent) = 0; virtual GraphFactory* GetGraphFactory() = 0; }; diff --git a/include/cru/platform/win/win_application.hpp b/include/cru/platform/win/win_application.hpp index 7defa703..f8150aed 100644 --- a/include/cru/platform/win/win_application.hpp +++ b/include/cru/platform/win/win_application.hpp @@ -41,6 +41,9 @@ class WinApplication : public Object, public virtual UiApplication { const std::function<void()>& action) override; void CancelTimer(unsigned long id) override; + std::vector<NativeWindow*> GetAllWindow() override; + NativeWindow* CreateWindow(NativeWindow* parent) override; + GraphFactory* GetGraphFactory() override; diff --git a/src/platform_win/win_application.cpp b/src/platform_win/win_application.cpp index ce85dc67..31d8c990 100644 --- a/src/platform_win/win_application.cpp +++ b/src/platform_win/win_application.cpp @@ -4,11 +4,13 @@ #include "cru/platform/win/god_window.hpp" #include "cru/platform/win/graph_manager.hpp" #include "cru/platform/win/win_graph_factory.hpp" +#include "cru/platform/win/win_native_window.hpp" #include "god_window_message.hpp" #include "timer.hpp" #include "window_manager.hpp" #include <VersionHelpers.h> +#include <cassert> namespace cru::platform { UiApplication* UiApplication::GetInstance() { @@ -79,5 +81,25 @@ unsigned long WinApplication::SetInterval( void WinApplication::CancelTimer(unsigned long id) { timer_manager_->KillTimer(static_cast<UINT_PTR>(id)); } + +std::vector<NativeWindow*> WinApplication::GetAllWindow() { + const auto&& windows = window_manager_->GetAllWindows(); + std::vector<NativeWindow*> result; + for (const auto w : windows) { + result.push_back(static_cast<NativeWindow*>(w)); + } + return result; +} + +NativeWindow* WinApplication::CreateWindow(NativeWindow* parent) { + WinNativeWindow* p = nullptr; + if (parent != nullptr) { + p = dynamic_cast<WinNativeWindow*>(parent); + assert(p); + } + return new WinNativeWindow(this, window_manager_->GetGeneralWindowClass(), + WS_OVERLAPPEDWINDOW, p); +} + GraphFactory* WinApplication::GetGraphFactory() { return graph_factory_.get(); } } // namespace cru::platform::win |