Beispiel #1
0
void CxStatic::OnRButtonDown(UINT nFlags, CPoint point)
{

	if (IsMoveable() == TRUE)
	{
		m_point = point;
		CRect rect;
		GetWindowRect( rect );
		ScreenToClient( rect );
		m_pTrack = new CRectTracker(&rect, CRectTracker::dottedLine |
								CRectTracker::resizeInside |
								CRectTracker::hatchedBorder);
		// RIGHT-CLICK + CONTROL
		if (nFlags & MK_CONTROL){
			GetWindowRect(rect);
			GetParent()->ScreenToClient(rect);
			m_pTrack->TrackRubberBand(GetParent(), rect.TopLeft());
			m_pTrack->m_rect.NormalizeRect();
		}
		else {
			m_pTrack->Track(GetParent(), point);
		}
		rect = LPRECT(m_pTrack->m_rect);
		MoveWindow(&rect,TRUE);//Move Window to our new position
		
		
		// Clean our mess
		if (m_pTrack)
			delete m_pTrack;

		rect = NULL;
	}

	CStatic::OnRButtonDown(nFlags, point);
}
	void SwapLeftRight() { SwapLeftRight(LPRECT(this)); }
Beispiel #3
0
LRESULT CALLBACK Dialog::DialogProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	Dialog* pDlg = (Dialog*) GetWindowLong(hwnd, GWL_USERDATA);

	try {
		if (message == WM_INITDIALOG)
		{
			// get the dialog<> pointer as the creation param
			pDlg = reinterpret_cast<Dialog*> (lParam);
			pDlg->_hWnd = hwnd;

			// set the dialog pointer
			SetWindowLong(hwnd, GWL_USERDATA, (LONG) pDlg);

			pDlg->OnInit();		// send the init dialog message

			return TRUE;

		} else if (pDlg == 0) {
			return FALSE;
		}

		switch (message)
		{
		case WM_CLOSE:
			pDlg->OnClose();
			return TRUE;
		case WM_DESTROY:
			pDlg->OnDestroy();
			pDlg->_hWnd = 0;

			// clear the dialog pointer
			SetWindowLong(hwnd, GWL_USERDATA, 0);

			return TRUE;
		case WM_MOUSEMOVE:
			pDlg->OnMouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam);
			break;
		case WM_LBUTTONDOWN:
			pDlg->OnLButtonDown(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam);
			break;
		case WM_LBUTTONUP:
			pDlg->OnLButtonUp(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam);
			break;
		case WM_SIZE:
			pDlg->OnSize(LOWORD(lParam), HIWORD(lParam), wParam);
			break;
		case WM_SIZING:
			pDlg->OnSizing(int(wParam), LPRECT(lParam));
			break;
		case WM_TIMER:
			pDlg->OnTimer(wParam);
			break;
		case WM_MOUSEWHEEL:
			pDlg->OnMouseWheel(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), GET_WHEEL_DELTA_WPARAM(wParam), wParam);
			return TRUE;
		case WM_COMMAND:

			if (HIWORD(wParam) == 0  &&  lParam == 0)
				pDlg->OnMenu(LOWORD(lParam));
			else if (HIWORD(wParam) == 1  &&  lParam == 0)
				pDlg->OnAccelerator(LOWORD(wParam));
			else
				pDlg->OnControl(LOWORD(wParam), HIWORD(wParam), (HWND) lParam);

			return TRUE;

		case WM_SYSCOMMAND:
			if (pDlg->OnSysCommand(wParam & 0xfff0))
				return TRUE;
			break;
		case WM_TRAYNOTIFY:
			pDlg->OnTrayNotify(lParam);
			return TRUE;
		case WM_INPUT:
			pDlg->OnRawInput(wParam, (HRAWINPUT) lParam);
			return 0;
		case WM_HSCROLL:
		case WM_VSCROLL:

			HWND hCtrl = HWND(lParam);

			// we are translating the SliderBar notification messages to OnControl calls
			if (GetWinClassName(hCtrl) == L"msctls_trackbar32")
			{
				pDlg->OnControl(GetDlgCtrlID(hCtrl), 0, hCtrl);
				return 0;
			}
		}

	} catch (std::wstring& e) {
		if (pDlg != 0)
			pDlg->OnException(e);
		else
			MessageBox(hwnd, e.c_str(), L"Exception", MB_OK | MB_ICONERROR);
	}

	return FALSE;
}