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)); }
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; }