Ejemplo n.º 1
0
//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);
}
Ejemplo n.º 2
0
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));
	}
}
Ejemplo n.º 3
0
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);
		}
	}
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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);
}