예제 #1
0
void CXySlider::DoDrag(CPoint point)
{
    CPoint pt0 = point;

    HighlightGripper(true);

    CSize inGripper = pt0 - GetGripperRect().CenterPoint();
    CPoint ptMin(m_zero - m_range + inGripper);
    CPoint ptMax(m_zero + m_range + inGripper);

    SetCapture();
    while(true)
    {
        MSG msg;
        if(!GetMessage(&msg, NULL, 0, 0))
        {
            break;
        }

        if(msg.message == WM_LBUTTONUP)
        {
            break;
        }

        if(GetCapture() != this)
        {
            break;
        }

        if(msg.message == WM_MOUSEMOVE)
        {
            CPoint pt = msg.pt;
            ScreenToClient(&pt);

            CheckMinMax(pt.x, ptMin.x, ptMax.x);
            CheckMinMax(pt.y, ptMin.y, ptMax.y);

            int dx = pt.x - pt0.x;
            int dy = pt.y - pt0.y;

            DoMoveBy(dx, dy);

            pt0 = pt;
        }
        else
        {
            DispatchMessage(&msg);
        }
    }
    ReleaseCapture();

    HighlightGripper(false);
}
예제 #2
0
void CXySlider::DoMoveBy(int cx, int cy)
{
    m_pos.x += cx;
    CheckMinMax(m_pos.x, -m_range.cx, m_range.cx);

    m_pos.y += cy;
    CheckMinMax(m_pos.y, - m_range.cy, m_range.cy);

    RedrawWindow();

    CPoint oldpos = m_externalPos;
    InternToExtern();
    if(m_externalPos != oldpos)
    {
        NotifyParent();
    }
}
예제 #3
0
파일: box.cpp 프로젝트: CRAVA/crava
CBox::CBox(int iMin, int jMin, int kMin, int iMax, int jMax, int kMax, const Simbox* pSBox) {
  CheckMinMax(iMin, jMin, kMin, iMax, jMax, kMax);

  if (!pSBox)
    return;

  TruncateIndex(iMin_, jMin_, kMin_, pSBox);
  TruncateIndex(iMax_, jMax_, kMax_, pSBox);

}