//vls-begin// mouse wheel BOOL CMainFrame::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { if (!(GetKeyState(VK_SHIFT)&0x8000 || GetKeyState(VK_CONTROL)&0x8000 || GetKeyState(VK_MENU)&0x8000)) return CFrameWnd::OnMouseWheel(nFlags, zDelta, pt); CWnd* pWnd = m_wndSplitter.GetPane(0, 0 ); WPARAM wParam = MAKELONG(zDelta < 0 ? SB_PAGEDOWN : SB_PAGEUP, 0); if(GetKeyState(VK_SHIFT)&0x8000 || GetKeyState(VK_MENU)&0x8000) wParam = MAKELONG(zDelta < 0 ? SB_LINEDOWN : SB_LINEUP, 0); if (zDelta > 0) if ( m_wndSplitter.GetRowCount() == 1 && pDoc->m_bSplitOnBackscroll ) m_wndSplitter.SplitRow(); if ( pWnd ) pWnd->SendMessage(WM_VSCROLL , wParam, 0); if (zDelta < 0) { int minpos, maxpos, pos; pWnd->GetScrollRange(SB_VERT, &minpos, &maxpos); pos = pWnd->GetScrollPos(SB_VERT); if ( pos == maxpos ) OnUnsplit() ; } return CFrameWnd::OnMouseWheel(nFlags, zDelta, pt); }
void CGuiWorkTab::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if (m_btndesplaza.PtInRect(point) && !bIniciaArrastre) { bIniciaArrastre = TRUE; SetCapture(); InvalidateRect(m_btndesplaza, TRUE); } else { CGuiTabWnd::OnLButtonDown(nFlags, point); CGuiTab* ct = (CGuiTab*) m_pArray[m_iSelectTab]; CWnd* ViewAc = ct->pParent; int rangmin, rangMax; ViewAc->GetScrollRange(SB_HORZ, &rangmin, &rangMax); m_scroll.SetScrollRange(rangmin, rangMax); m_scroll.SetScrollPos(ViewAc->GetScrollPos(SB_HORZ)); } }
void CResizableLayout::ArrangeLayout() { CWnd* pParent = GetResizableWnd(); // get parent window's rect CRect rectParent; GetTotalClientRect(&rectParent); // init some vars BOOL bCallbackPassed = FALSE; int i, count = (int)m_arrLayout.GetSize(); HDWP hdwp = BeginDeferWindowPos(count); for (i=0; i<count; ++i) { LayoutInfo layout = m_arrLayout[i]; if (layout.hWnd == NULL) // callback { if (!bCallbackPassed) // first time only { bCallbackPassed = TRUE; // update previous controls EndDeferWindowPos(hdwp); // start again for callback controls hdwp = BeginDeferWindowPos(count-i); } // callbacks are added at the end, so that // you don't have multiple screen updates if (!ArrangeLayoutCallback(layout)) // request data continue; } CRect rectChild, newrc; CWnd* pWnd = CWnd::FromHandle(layout.hWnd); // temporary solution pWnd->GetWindowRect(&rectChild); pParent->ScreenToClient(&rectChild); // calculate new top-left corner newrc.left = layout.sizeMarginTL.cx + rectParent.Width() * layout.sizeTypeTL.cx / 100; newrc.top = layout.sizeMarginTL.cy + rectParent.Height() * layout.sizeTypeTL.cy / 100; // calculate new bottom-right corner newrc.right = layout.sizeMarginBR.cx + rectParent.Width() * layout.sizeTypeBR.cx / 100; newrc.bottom = layout.sizeMarginBR.cy + rectParent.Height() * layout.sizeTypeBR.cy / 100; if (!newrc.EqualRect(&rectChild)) { if (layout.bAdjHScroll) { // needs repainting, due to horiz scrolling int diff = newrc.Width() - rectChild.Width(); int max = pWnd->GetScrollLimit(SB_HORZ); layout.bNeedRefresh = FALSE; if (max > 0 && pWnd->GetScrollPos(SB_HORZ) > max - diff) { layout.bNeedRefresh = TRUE; } } // set flags DWORD flags = SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOREPOSITION; //if (layout.bNeedRefresh) // flags |= SWP_NOCOPYBITS; if (newrc.TopLeft() == rectChild.TopLeft()) flags |= SWP_NOMOVE; if (newrc.Size() == rectChild.Size()) flags |= SWP_NOSIZE; hdwp = DeferWindowPos(hdwp, layout.hWnd, NULL, newrc.left, newrc.top, newrc.Width(), newrc.Height(), flags); } } // go re-arrange child windows EndDeferWindowPos(hdwp); // refresh those that need for (i=0; i<count; ++i) { LayoutInfo& layout = m_arrLayout[i]; if (layout.bNeedRefresh) { ::RedrawWindow(layout.hWnd, NULL, NULL, RDW_INVALIDATE|RDW_NOFRAME); // ::InvalidateRect(layout.hWnd, NULL, TRUE); // ::UpdateWindow(layout.hWnd); } } }
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { if ( pMsg->message == WM_KEYDOWN ) { switch ( pMsg->wParam ) { case VK_PAUSE: { OnUnsplit(); } return TRUE; case VK_ESCAPE: { if ( m_wndSplitter.GetRowCount() == 1 ) { CEdit* pEdit = (CEdit*)m_editBar.GetDlgItem(IDC_EDIT); pEdit->SetWindowText(""); } else OnUnsplit(); } break; case VK_PRIOR: { CSmcDoc* pDoc = (CSmcDoc*)GetActiveDocument(); // first check second pane exist etc if ( m_wndSplitter.GetRowCount() == 1 && pDoc->m_bSplitOnBackscroll ) { m_wndSplitter.SplitRow(); } else { CWnd* pWnd = m_wndSplitter.GetPane(0, 0 ); if ( pWnd ) pWnd->PostMessage(WM_VSCROLL , MAKELONG(SB_PAGEUP, 0), 0); } } return TRUE; case VK_NEXT: { CWnd* pWnd = m_wndSplitter.GetPane(0, 0 ); if ( pWnd ) { pWnd->SendMessage(WM_VSCROLL , MAKELONG(SB_PAGEDOWN, 0), 0); int minpos, maxpos, pos; pWnd->GetScrollRange(SB_VERT, &minpos, &maxpos); pos = pWnd->GetScrollPos(SB_VERT); if ( pos == maxpos ) OnUnsplit() ; } } return TRUE; case VK_UP: if ( GetKeyState(VK_CONTROL) < 0 ) { CSmcDoc* pDoc = (CSmcDoc*)GetActiveDocument(); // first check second pane exist etc if ( m_wndSplitter.GetRowCount() == 1 && pDoc->m_bSplitOnBackscroll ) { m_wndSplitter.SplitRow(); } else { CWnd* pWnd = m_wndSplitter.GetPane(0, 0 ); if ( pWnd ) pWnd->PostMessage(WM_VSCROLL , MAKELONG(SB_LINEUP, 0), 0); } } return TRUE; case VK_DOWN: if ( GetKeyState(VK_CONTROL) < 0 ) { CWnd* pWnd = m_wndSplitter.GetPane(0, 0 ); if ( pWnd ) { pWnd->SendMessage(WM_VSCROLL , MAKELONG(SB_LINEDOWN, 0), 0); int minpos, maxpos, pos; pWnd->GetScrollRange(SB_VERT, &minpos, &maxpos); pos = pWnd->GetScrollPos(SB_VERT); if ( pos == maxpos ) OnUnsplit() ; } } return TRUE; default: break; } } return CFrameWnd::PreTranslateMessage(pMsg); }
void CResizablePage::ArrangeLayout() { // init some vars CRect wndrc; GetClientRect(&wndrc); Layout *pl; POSITION pos = m_plLayoutList.GetHeadPosition(); HDWP hdwp = BeginDeferWindowPos(m_plLayoutList.GetCount()); while (pos != NULL) { pl = (Layout*)m_plLayoutList.GetNext(pos); CRect objrc, newrc; CWnd* wnd = CWnd::FromHandle(pl->hwnd); // temporary solution wnd->GetWindowRect(&objrc); ScreenToClient(&objrc); // calculate new top-left corner newrc.left = pl->tl_margin.cx + wndrc.Width() * pl->tl_type.cx / 100; newrc.top = pl->tl_margin.cy + wndrc.Height() * pl->tl_type.cy / 100; // calculate new bottom-right corner newrc.right = pl->br_margin.cx + wndrc.Width() * pl->br_type.cx / 100; newrc.bottom = pl->br_margin.cy + wndrc.Height() * pl->br_type.cy / 100; if (!newrc.EqualRect(&objrc)) { BOOL add = TRUE; if (pl->adj_hscroll) { // needs repainting, due to horiz scrolling int diff = newrc.Width() - objrc.Width(); int max = wnd->GetScrollLimit(SB_HORZ); if (max > 0 && wnd->GetScrollPos(SB_HORZ) > max - diff) { wnd->MoveWindow(&newrc); wnd->Invalidate(); wnd->UpdateWindow(); add = FALSE; } } if (pl->need_refresh) { wnd->MoveWindow(&newrc); wnd->Invalidate(); wnd->UpdateWindow(); add = FALSE; } if (add) DeferWindowPos(hdwp, pl->hwnd, NULL, newrc.left, newrc.top, newrc.Width(), newrc.Height(), SWP_NOZORDER | SWP_NOACTIVATE); } } // go re-arrange child windows EndDeferWindowPos(hdwp); }