GUIFramework 1.1.0
Framework for desktop GUI applications in C++.
Loading...
Searching...
No Matches
IResizableComponent.cpp
Go to the documentation of this file.
2
3#pragma warning(disable: 6387)
4
5using namespace std;
6
7namespace gui_framework
8{
9 namespace interfaces
10 {
11 IResizableComponent::IResizableComponent(HWND resizeableHandle, HWND parent, bool autoResize, bool blockResize) :
12 resizeableHandle(resizeableHandle),
13 parent(parent),
14 autoResize(autoResize),
15 blockResize(blockResize)
16 {
17 RECT sizes;
18
19 GetClientRect(parent ? parent : HWND_DESKTOP, &sizes);
20
21 parentWidth = static_cast<uint16_t>(sizes.right) - static_cast<uint16_t>(sizes.left);
22 parentHeight = static_cast<uint16_t>(sizes.bottom) - static_cast<uint16_t>(sizes.top);
23
24 GetWindowRect(resizeableHandle, &sizes);
25
26 initWidth = static_cast<uint16_t>(sizes.right) - static_cast<uint16_t>(sizes.left);
27 initHeight = static_cast<uint16_t>(sizes.bottom) - static_cast<uint16_t>(sizes.top);
28
29 MapWindowPoints(HWND_DESKTOP, parent ? parent : HWND_DESKTOP, reinterpret_cast<POINT*>(&sizes), 2);
30
31 initX = sizes.left;
32 initY = sizes.top;
33 }
34
35 void IResizableComponent::resize(uint16_t width, uint16_t height)
36 {
37 if (autoResize && !blockResize)
38 {
39 RECT newSizes = this->calculateNewSizes(width, height);
40
41 MoveWindow
42 (
43 resizeableHandle,
44 newSizes.left,
45 newSizes.top,
46 newSizes.right - newSizes.left,
47 newSizes.bottom - newSizes.top,
48 true
49 );
50
51 ShowWindow(resizeableHandle, SW_SHOW);
52 }
53 }
54
55 RECT IResizableComponent::calculateNewSizes(uint16_t width, uint16_t height)
56 {
57 RECT result;
58
59 double widthCoefficient = static_cast<double>(width) / parentWidth;
60 double heightCoefficient = static_cast<double>(height) / parentHeight;
61
62 result.left = static_cast<int>(widthCoefficient * initX);
63 result.top = static_cast<int>(heightCoefficient * initY);
64
65 result.right = static_cast<int>(result.left + widthCoefficient * initWidth);
66 result.bottom = static_cast<int>(result.top + heightCoefficient * initHeight);
67
68 return result;
69 }
70
72 {
73 this->blockResize = blockResize;
74 }
75
77 {
78 this->autoResize = autoResize;
79 }
80
82 {
83 return blockResize;
84 }
85
87 {
88 return autoResize;
89 }
90 }
91}
virtual void resize(uint16_t width, uint16_t height)
Resize component.
virtual RECT calculateNewSizes(uint16_t width, uint16_t height) final
virtual void setBlockResize(bool blockResize) final
IResizableComponent(HWND resizeableHandle, HWND parent, bool autoResize=false, bool blockResize=false)
virtual void setAutoResize(bool autoResize) final