diff options
| -rw-r--r-- | win32/PlatWin.cxx | 57 | 
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();  } | 
