aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-11-10 16:36:23 +0800
committercrupest <crupest@outlook.com>2018-11-10 16:36:23 +0800
commita46c8d05392cf07c4897f9856e35bcd3f2382b25 (patch)
treed0c26b2fdddb22f1d59922701fcb7ec7c0df67f1
parent6cc74c662b862599141a624af74a4d5b2881321d (diff)
downloadcru-a46c8d05392cf07c4897f9856e35bcd3f2382b25.tar.gz
cru-a46c8d05392cf07c4897f9856e35bcd3f2382b25.tar.bz2
cru-a46c8d05392cf07c4897f9856e35bcd3f2382b25.zip
Add parent window constructor.
-rw-r--r--src/main.cpp9
-rw-r--r--src/ui/window.cpp14
-rw-r--r--src/ui/window.hpp1
3 files changed, 21 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 264b3c7c..359b511b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -87,6 +87,8 @@ int APIENTRY wWinMain(
//test 2
+ Window child_window(&window);
+
const auto layout = CreateWithLayout<LinearLayout>(LayoutSideParams::Exactly(500), LayoutSideParams::Content());
layout->mouse_click_event.AddHandler([layout](cru::ui::events::MouseButtonEventArgs& args)
@@ -114,7 +116,11 @@ int APIENTRY wWinMain(
{
const auto button = Button::Create();
button->GetLayoutParams()->padding = Thickness(20, 5);
- button->AddChild(TextBlock::Create(L"button"));
+ button->AddChild(TextBlock::Create(L"Show child window."));
+ button->mouse_click_event.AddHandler([&child_window](auto)
+ {
+ child_window.Show();
+ });
layout->AddChild(button);
}
@@ -170,6 +176,7 @@ int APIENTRY wWinMain(
window.AddChild(linear_layout);
*/
+
window.Show();
return application.Run();
diff --git a/src/ui/window.cpp b/src/ui/window.cpp
index 349b78ff..f7506f18 100644
--- a/src/ui/window.cpp
+++ b/src/ui/window.cpp
@@ -113,13 +113,23 @@ namespace cru::ui
}
}
- Window::Window() : Control(WindowConstructorTag{}, this), control_list_({ this }) {
+ Window::Window() : Window(nullptr)
+ {
+
+ }
+
+ Window::Window(Window* parent) : Control(WindowConstructorTag{}, this), control_list_({ this }) {
+
+ if (parent != nullptr && !parent->IsWindowValid())
+ throw std::runtime_error("Parent window is not valid.");
+
const auto window_manager = WindowManager::GetInstance();
hwnd_ = CreateWindowEx(0,
window_manager->GetGeneralWindowClass()->GetName(),
L"", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- nullptr, nullptr, Application::GetInstance()->GetInstanceHandle(), nullptr
+ parent == nullptr ? nullptr : parent->GetWindowHandle(),
+ nullptr, Application::GetInstance()->GetInstanceHandle(), nullptr
);
if (hwnd_ == nullptr)
diff --git a/src/ui/window.hpp b/src/ui/window.hpp
index d3e86f2d..82cbfc4f 100644
--- a/src/ui/window.hpp
+++ b/src/ui/window.hpp
@@ -90,6 +90,7 @@ namespace cru::ui
static constexpr auto control_type = L"Window";
Window();
+ explicit Window(Window* parent);
Window(const Window& other) = delete;
Window(Window&& other) = delete;
Window& operator=(const Window& other) = delete;