GteMSWWindow.cpp
Go to the documentation of this file.
1 // David Eberly, Geometric Tools, Redmond WA 98052
2 // Copyright (c) 1998-2017
3 // Distributed under the Boost Software License, Version 1.0.
4 // http://www.boost.org/LICENSE_1_0.txt
5 // http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
6 // File Version: 3.0.0 (2016/06/19)
7 
8 #include <GTEnginePCH.h>
10 using namespace gte;
11 
13  :
14  handle(nullptr),
15  hscrollBar(false),
16  vscrollBar(false)
17 {
18 }
19 
20 MSWWindow::Parameters::Parameters(std::wstring const& inTitle,
21  int inXOrigin, int inYOrigin, int inXSize, int inYSize)
22  :
23  WindowBase::Parameters(inTitle, inXOrigin, inYOrigin, inXSize, inYSize),
24  handle(nullptr),
25  hscrollBar(false),
26  vscrollBar(false)
27 {
28 }
29 
31 {
32 }
33 
35  :
36  WindowBase(parameters),
37  mHandle(parameters.handle)
38 {
39  // If scroll bars are requested, the MSWWindow-derived class constructor
40  // should call the function MSWWindow::SetScrollInterval(...) to set the
41  // scroll bar range. Increments and decrements may be set separately
42  // directly via class members.
43  mHasScroll[0] = parameters.hscrollBar;
44  mHasScroll[1] = parameters.vscrollBar;
45  for (int i = 0; i < 2; ++i)
46  {
47  ZeroMemory(&mScrollInfo[i], sizeof(SCROLLINFO));
48  mScrollInfo[i].cbSize = sizeof(SCROLLINFO);
49  mScrollInfo[i].fMask = SIF_ALL;
50  GetScrollInfo(mHandle, i, &mScrollInfo[i]);
51  mScrollLoResDelta[i] = 1;
52  mScrollHiResDelta[i] = 1;
53  }
54 }
55 
56 void MSWWindow::SetTitle(std::wstring const& title)
57 {
58  WindowBase::SetTitle(title);
59  SetWindowText(mHandle, title.c_str());
60 }
61 
63 {
64  POINT point = { static_cast<LONG>(x), static_cast<LONG>(y) };
65  ClientToScreen(mHandle, &point);
66  SetCursorPos(point.x, point.y);
67 }
68 
69 void MSWWindow::GetMousePosition(int& x, int& y) const
70 {
71  POINT point;
72  GetCursorPos(&point);
73  ScreenToClient(mHandle, &point);
74  x = static_cast<int>(point.x);
75  y = static_cast<int>(point.y);
76 }
77 
79 {
80  PostQuitMessage(0);
81 }
82 
83 void MSWWindow::SetScrollInterval(int bar, int minValue, int maxValue)
84 {
85  mScrollInfo[bar].fMask = SIF_RANGE;
86  mScrollInfo[bar].nMin = minValue;
87  mScrollInfo[bar].nMax = maxValue;
88  SetScrollInfo(mHandle, bar, &mScrollInfo[bar], FALSE);
89 }
90 
91 void MSWWindow::GetScrollInterval(int bar, int& minValue, int& maxValue) const
92 {
93  mScrollInfo[bar].fMask = SIF_RANGE;
94  GetScrollInfo(mHandle, bar, &mScrollInfo[bar]);
95  minValue = mScrollInfo[bar].nMin;
96  maxValue = mScrollInfo[bar].nMax;
97 }
98 
100 {
101  mScrollInfo[bar].fMask = SIF_POS;
102  mScrollInfo[bar].nPos = value;
103  return SetScrollInfo(mHandle, bar, &mScrollInfo[bar], FALSE);
104 }
105 
107 {
108  mScrollInfo[bar].fMask = SIF_POS;
109  GetScrollInfo(mHandle, bar, &mScrollInfo[bar]);
110  return mScrollInfo[bar].nPos;
111 }
112 
114 {
115  SCROLLINFO& info = mScrollInfo[bar];
116  info.fMask = SIF_POS;
117  GetScrollInfo(mHandle, bar, &info);
118  int delta = info.nMax - info.nPos;
119  if (delta > 0)
120  {
121  delta = std::min(delta, mScrollLoResDelta[bar]);
122  info.nPos += delta;
123  SetScrollInfo(mHandle, bar, &info, TRUE);
124  }
125  return delta;
126 }
127 
129 {
130  SCROLLINFO& info = mScrollInfo[bar];
131  info.fMask = SIF_POS;
132  GetScrollInfo(mHandle, bar, &info);
133  int delta = info.nPos - info.nMin;
134  if (delta > 0)
135  {
136  delta = std::min(delta, mScrollLoResDelta[bar]);
137  info.nPos -= delta;
138  SetScrollInfo(mHandle, bar, &info, TRUE);
139  }
140  return delta;
141 }
142 
144 {
145  SCROLLINFO& info = mScrollInfo[bar];
146  info.fMask = SIF_POS;
147  GetScrollInfo(mHandle, bar, &info);
148  int delta = info.nMax - info.nPos;
149  if (delta > 0)
150  {
151  delta = std::min(delta, mScrollHiResDelta[bar]);
152  info.nPos += delta;
153  SetScrollInfo(mHandle, bar, &info, TRUE);
154  }
155  return delta;
156 }
157 
159 {
160  SCROLLINFO& info = mScrollInfo[bar];
161  info.fMask = SIF_POS;
162  GetScrollInfo(mHandle, bar, &info);
163  int delta = info.nPos - info.nMin;
164  if (delta > 0)
165  {
166  delta = std::min(delta, mScrollHiResDelta[bar]);
167  info.nPos -= delta;
168  SetScrollInfo(mHandle, bar, &info, TRUE);
169  }
170  return delta;
171 }
172 
174 {
175  SCROLLINFO& info = mScrollInfo[bar];
176  info.fMask = SIF_TRACKPOS;
177  GetScrollInfo(mHandle, bar, &info);
178  return info.nTrackPos;
179 }
180 
182 {
183  SCROLLINFO& info = mScrollInfo[bar];
184  info.fMask = SIF_TRACKPOS;
185  GetScrollInfo(mHandle, bar, &info);
186  info.fMask = SIF_POS;
187  info.nPos = info.nTrackPos;
188  SetScrollInfo(mHandle, bar, &info, TRUE);
189  return info.nTrackPos;
190 }
191 
192 // Named class-static constants are shared between DX11 and WGL.
193 int const WindowBase::KEY_ESCAPE = VK_ESCAPE;
194 int const WindowBase::KEY_LEFT = VK_LEFT;
195 int const WindowBase::KEY_RIGHT = VK_RIGHT;
196 int const WindowBase::KEY_UP = VK_UP;
197 int const WindowBase::KEY_DOWN = VK_DOWN;
198 int const WindowBase::KEY_HOME = VK_HOME;
199 int const WindowBase::KEY_END = VK_END;
200 int const WindowBase::KEY_PAGE_UP = VK_PRIOR;
201 int const WindowBase::KEY_PAGE_DOWN = VK_NEXT;
202 int const WindowBase::KEY_INSERT = VK_INSERT;
203 int const WindowBase::KEY_DELETE = VK_DELETE;
204 int const WindowBase::KEY_F1 = VK_F1;
205 int const WindowBase::KEY_F2 = VK_F2;
206 int const WindowBase::KEY_F3 = VK_F3;
207 int const WindowBase::KEY_F4 = VK_F4;
208 int const WindowBase::KEY_F5 = VK_F5;
209 int const WindowBase::KEY_F6 = VK_F6;
210 int const WindowBase::KEY_F7 = VK_F7;
211 int const WindowBase::KEY_F8 = VK_F8;
212 int const WindowBase::KEY_F9 = VK_F9;
213 int const WindowBase::KEY_F10 = VK_F10;
214 int const WindowBase::KEY_F11 = VK_F11;
215 int const WindowBase::KEY_F12 = VK_F12;
216 int const WindowBase::KEY_BACKSPACE = VK_BACK;
217 int const WindowBase::KEY_TAB = VK_TAB;
218 int const WindowBase::KEY_ENTER = VK_RETURN;
219 int const WindowBase::KEY_RETURN = VK_RETURN;
220 
221 int const WindowBase::KEY_SHIFT = VK_SHIFT;
222 int const WindowBase::KEY_CONTROL = VK_CONTROL;
223 int const WindowBase::KEY_ALT = 0; // not currently handled
224 int const WindowBase::KEY_COMMAND = 0; // not currently handled
225 
226 int const WindowBase::MOUSE_NONE = 0;
227 int const WindowBase::MOUSE_LEFT = 1;
228 int const WindowBase::MOUSE_MIDDLE = 2;
229 int const WindowBase::MOUSE_RIGHT= 3;
230 int const WindowBase::MOUSE_UP = 0;
231 int const WindowBase::MOUSE_DOWN = 1;
232 
233 int const WindowBase::MODIFIER_CONTROL = MK_CONTROL;
234 int const WindowBase::MODIFIER_LBUTTON = MK_LBUTTON;
235 int const WindowBase::MODIFIER_MBUTTON = MK_MBUTTON;
236 int const WindowBase::MODIFIER_RBUTTON = MK_RBUTTON;
237 int const WindowBase::MODIFIER_SHIFT = MK_SHIFT;
static int const KEY_LEFT
Definition: GteWindowBase.h:90
static int const MODIFIER_SHIFT
static int const MOUSE_MIDDLE
static int const KEY_F1
int OnScrollEndTracking(int bar)
void GetScrollInterval(int bar, int &minValue, int &maxValue) const
int OnScrollIncrementHiRes(int bar)
static int const MODIFIER_RBUTTON
static int const KEY_COMMAND
static int const KEY_F10
static int const KEY_ALT
int GetScrollPosition(int bar) const
int SetScrollPosition(int bar, int value)
int mScrollHiResDelta[2]
Definition: GteMSWWindow.h:74
static int const KEY_PAGE_UP
Definition: GteWindowBase.h:96
static int const MODIFIER_LBUTTON
static int const KEY_HOME
Definition: GteWindowBase.h:94
static int const KEY_RETURN
static int const KEY_F7
static int const MOUSE_RIGHT
GLsizei const GLfloat * value
Definition: glcorearb.h:819
GLint GLenum GLint x
Definition: glcorearb.h:404
static int const KEY_TAB
static int const MOUSE_UP
static int const KEY_F3
static int const MODIFIER_CONTROL
static int const KEY_F11
int OnScrollDecrementHiRes(int bar)
virtual void SetMousePosition(int x, int y) override
static int const KEY_F4
static int const KEY_BACKSPACE
static int const MOUSE_DOWN
static int const KEY_DELETE
Definition: GteWindowBase.h:99
static int const MOUSE_NONE
static int const KEY_ENTER
static int const KEY_F5
int OnScrollDecrementLoRes(int bar)
int OnScrollTracking(int bar)
static int const KEY_F12
static int const KEY_INSERT
Definition: GteWindowBase.h:98
static int const KEY_PAGE_DOWN
Definition: GteWindowBase.h:97
static int const KEY_F6
int mScrollLoResDelta[2]
Definition: GteMSWWindow.h:73
static int const MOUSE_LEFT
static int const KEY_RIGHT
Definition: GteWindowBase.h:91
virtual void GetMousePosition(int &x, int &y) const override
bool mHasScroll[2]
Definition: GteMSWWindow.h:71
MSWWindow(Parameters &parameters)
virtual void SetTitle(std::wstring const &title)
virtual void SetTitle(std::wstring const &title) override
int OnScrollIncrementLoRes(int bar)
static int const KEY_END
Definition: GteWindowBase.h:95
static int const KEY_ESCAPE
Definition: GteWindowBase.h:89
virtual void OnClose() override
SCROLLINFO mScrollInfo[2]
Definition: GteMSWWindow.h:72
static int const KEY_SHIFT
static int const KEY_UP
Definition: GteWindowBase.h:92
static int const KEY_DOWN
Definition: GteWindowBase.h:93
virtual ~MSWWindow()
static int const KEY_F8
static int const KEY_CONTROL
static int const KEY_F2
static int const MODIFIER_MBUTTON
GLint y
Definition: glcorearb.h:98
void SetScrollInterval(int bar, int minValue, int maxValue)
static int const KEY_F9


geometric_tools_engine
Author(s): Yijiang Huang
autogenerated on Thu Jul 18 2019 04:00:01