aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/PlatWin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/PlatWin.cxx')
-rw-r--r--win32/PlatWin.cxx57
1 files changed, 31 insertions, 26 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx
index 71e31e59d..57ef26e6c 100644
--- a/win32/PlatWin.cxx
+++ b/win32/PlatWin.cxx
@@ -1787,23 +1787,31 @@ Surface *Surface::Allocate(int technology) {
#endif
}
+namespace {
+
+HWND HwndFromWindowID(WindowID wid) {
+ return static_cast<HWND>(wid);
+}
+
+}
+
Window::~Window() {
}
void Window::Destroy() {
if (wid)
- ::DestroyWindow(static_cast<HWND>(wid));
- wid = 0;
+ ::DestroyWindow(HwndFromWindowID(wid));
+ wid = nullptr;
}
PRectangle Window::GetPosition() {
RECT rc;
- ::GetWindowRect(static_cast<HWND>(wid), &rc);
+ ::GetWindowRect(HwndFromWindowID(wid), &rc);
return PRectangle::FromInts(rc.left, rc.top, rc.right, rc.bottom);
}
void Window::SetPosition(PRectangle rc) {
- ::SetWindowPos(static_cast<HWND>(wid),
+ ::SetWindowPos(HwndFromWindowID(wid),
0, static_cast<int>(rc.left), static_cast<int>(rc.top),
static_cast<int>(rc.Width()), static_cast<int>(rc.Height()), SWP_NOZORDER | SWP_NOACTIVATE);
}
@@ -1829,10 +1837,10 @@ static RECT RectFromMonitor(HMONITOR hMonitor) {
}
void Window::SetPositionRelative(PRectangle rc, Window relativeTo) {
- const LONG style = ::GetWindowLong(static_cast<HWND>(wid), GWL_STYLE);
+ const LONG style = ::GetWindowLong(HwndFromWindowID(wid), GWL_STYLE);
if (style & WS_POPUP) {
POINT ptOther = {0, 0};
- ::ClientToScreen(static_cast<HWND>(relativeTo.GetID()), &ptOther);
+ ::ClientToScreen(HwndFromWindowID(relativeTo.GetID()), &ptOther);
rc.Move(static_cast<XYPOSITION>(ptOther.x), static_cast<XYPOSITION>(ptOther.y));
const RECT rcMonitor = RectFromPRectangle(rc);
@@ -1862,28 +1870,28 @@ void Window::SetPositionRelative(PRectangle rc, Window relativeTo) {
PRectangle Window::GetClientPosition() {
RECT rc={0,0,0,0};
if (wid)
- ::GetClientRect(static_cast<HWND>(wid), &rc);
+ ::GetClientRect(HwndFromWindowID(wid), &rc);
return PRectangle::FromInts(rc.left, rc.top, rc.right, rc.bottom);
}
void Window::Show(bool show) {
if (show)
- ::ShowWindow(static_cast<HWND>(wid), SW_SHOWNOACTIVATE);
+ ::ShowWindow(HwndFromWindowID(wid), SW_SHOWNOACTIVATE);
else
- ::ShowWindow(static_cast<HWND>(wid), SW_HIDE);
+ ::ShowWindow(HwndFromWindowID(wid), SW_HIDE);
}
void Window::InvalidateAll() {
- ::InvalidateRect(static_cast<HWND>(wid), NULL, FALSE);
+ ::InvalidateRect(HwndFromWindowID(wid), NULL, FALSE);
}
void Window::InvalidateRectangle(PRectangle rc) {
const RECT rcw = RectFromPRectangle(rc);
- ::InvalidateRect(static_cast<HWND>(wid), &rcw, FALSE);
+ ::InvalidateRect(HwndFromWindowID(wid), &rcw, FALSE);
}
void Window::SetFont(Font &font) {
- ::SendMessage(static_cast<HWND>(wid), WM_SETFONT,
+ ::SendMessage(HwndFromWindowID(wid), WM_SETFONT,
reinterpret_cast<WPARAM>(font.GetID()), 0);
}
@@ -2128,7 +2136,7 @@ void ListBoxX::Create(Window &parent_, int ctrlID_, Point location_, int lineHei
lineHeight = lineHeight_;
unicodeMode = unicodeMode_;
technology = technology_;
- HWND hwndParent = static_cast<HWND>(parent->GetID());
+ HWND hwndParent = HwndFromWindowID(parent->GetID());
HINSTANCE hinstanceParent = GetWindowInstance(hwndParent);
// Window created as popup so not clipped within parent client area
wid = ::CreateWindowEx(
@@ -2169,7 +2177,7 @@ int ListBoxX::GetVisibleRows() const {
}
HWND ListBoxX::GetHWND() const {
- return static_cast<HWND>(GetID());
+ return HwndFromWindowID(GetID());
}
PRectangle ListBoxX::GetDesiredRect() {
@@ -2610,11 +2618,9 @@ void ListBoxX::OnSelChange() {
}
POINT ListBoxX::GetClientExtent() const {
- Window win = *this; // Copy HWND to avoid const problems
- const PRectangle rc = win.GetPosition();
- POINT ret;
- ret.x = static_cast<LONG>(rc.Width());
- ret.y = static_cast<LONG>(rc.Height());
+ RECT rc;
+ ::GetWindowRect(HwndFromWindowID(wid), &rc);
+ POINT ret { rc.right - rc.left, rc.bottom - rc.top };
return ret;
}
@@ -2655,6 +2661,7 @@ void ListBoxX::Paint(HDC hDC) {
LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {
try {
+ ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd)));
switch (iMessage) {
case WM_ERASEBKGND:
return TRUE;
@@ -2662,9 +2669,9 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam,
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hDC = ::BeginPaint(hWnd, &ps);
- ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd)));
- if (lbx)
+ if (lbx) {
lbx->Paint(hDC);
+ }
::EndPaint(hWnd, &ps);
}
return 0;
@@ -2680,7 +2687,6 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam,
const int item = LOWORD(lResult);
if (HIWORD(lResult) == 0 && item >= 0) {
::SendMessage(hWnd, LB_SETCURSEL, item, 0);
- ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd)));
if (lbx) {
lbx->OnSelChange();
}
@@ -2692,7 +2698,6 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam,
return 0;
case WM_LBUTTONDBLCLK: {
- ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd)));
if (lbx) {
lbx->OnDoubleClick();
}
@@ -2718,7 +2723,7 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam,
LRESULT ListBoxX::WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {
switch (iMessage) {
case WM_CREATE: {
- HINSTANCE hinstanceParent = GetWindowInstance(static_cast<HWND>(parent->GetID()));
+ HINSTANCE hinstanceParent = GetWindowInstance(HwndFromWindowID(parent->GetID()));
// Note that LBS_NOINTEGRALHEIGHT is specified to fix cosmetic issue when resizing the list
// but has useful side effect of speeding up list population significantly
lb = ::CreateWindowEx(
@@ -2754,7 +2759,7 @@ LRESULT ListBoxX::WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam
case WM_COMMAND:
// This is not actually needed now - the registered double click action is used
// directly to action a choice from the list.
- ::SendMessage(static_cast<HWND>(parent->GetID()), iMessage, wParam, lParam);
+ ::SendMessage(HwndFromWindowID(parent->GetID()), iMessage, wParam, lParam);
break;
case WM_MEASUREITEM: {
@@ -2905,7 +2910,7 @@ void Menu::Destroy() {
void Menu::Show(Point pt, Window &w) {
::TrackPopupMenu(static_cast<HMENU>(mid),
TPM_RIGHTBUTTON, static_cast<int>(pt.x - 4), static_cast<int>(pt.y), 0,
- static_cast<HWND>(w.GetID()), NULL);
+ HwndFromWindowID(w.GetID()), NULL);
Destroy();
}