Ignore:
Timestamp:
Jun 13, 2014, 11:21:15 PM (10 years ago)
Author:
roman
Message:
 
Location:
trunk/Utilities/DirectionControl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Utilities/DirectionControl/DirectionControl.rc

    r293 r294  
    138138
    139139VS_VERSION_INFO VERSIONINFO
    140  FILEVERSION  1, 0, 0, 95
     140 FILEVERSION  1, 0, 0, 103
    141141 PRODUCTVERSION 1,0,0,1
    142142 FILEFLAGSMASK 0x3fL
     
    157157            VALUE "CompanyName", "Roman Ryltsov"
    158158            VALUE "FileDescription", "Alax.Info Custom Control Host Module"
    159             VALUE "FileVersion",  "1, 0, 0, 95\0"
     159            VALUE "FileVersion",  "1, 0, 0, 103\0"
    160160            VALUE "InternalName", "DirectionControl.exe"
    161161            VALUE "LegalCopyright", "Copyright © Alax.Info, Roman Ryltsov, 2013-2014"
  • trunk/Utilities/DirectionControl/MainDialog.h

    r293 r294  
    8282                _A((GetStyle() & SS_TYPEMASK) == SS_LEFT); //_A((UINT) ((GetStyle() & SS_TYPEMASK) - SS_LEFT) < (SS_RIGHT - SS_LEFT + 1));
    8383                //ModifyStyle(0, SS_NOTIFY);
     84                _A(GetExStyle() & WS_EX_TRANSPARENT);
    8485                CWindow Parent = GetParent();
    8586                pT->UpdateLayout();
     
    137138                        return;
    138139                m_nToleranceArrowSize = m_nArrowSize * 3 / 4;
    139                 m_ArrowHandlePosition = Transform(0, m_nArrowSize - 5, m_fAngle);
    140                 m_ToleranceArrowHandlePositionA = Transform(0, m_nToleranceArrowSize - 4, m_fAngle - m_fToleranceAngle / 2);
    141                 m_ToleranceArrowHandlePositionB = Transform(0, m_nToleranceArrowSize - 4, m_fAngle + m_fToleranceAngle / 2);
     140                m_ArrowHandlePosition = Transform(0, m_nArrowSize - 6, m_fAngle);
     141                m_ToleranceArrowHandlePositionA = Transform(0, m_nToleranceArrowSize - 6, m_fAngle - m_fToleranceAngle / 2);
     142                m_ToleranceArrowHandlePositionB = Transform(0, m_nToleranceArrowSize - 6, m_fAngle + m_fToleranceAngle / 2);
    142143        }
    143144        VOID EraseBackground(CDCHandle Dc)
     
    223224                Dc.Ellipse(m_CenterPosition.x - D, m_CenterPosition.y - D, m_CenterPosition.x + D + F, m_CenterPosition.y + D + F);
    224225        }
    225         static BOOL Close(POINT PositionA, POINT PositionB, LONG nDistanceThreshold = 6)
    226         {
     226        static BOOL Close(CPoint PositionA, CPoint PositionB, LONG nDistanceThreshold, CPoint* pRelativePosition = NULL)
     227        {
     228                if(pRelativePosition)
     229                        *pRelativePosition = PositionA - PositionB;
    227230                return (PositionA.x - PositionB.x) * (PositionA.x - PositionB.x) + (PositionA.y - PositionB.y) * (PositionA.y - PositionB.y) < (nDistanceThreshold * nDistanceThreshold);
    228231        }
     232        UINT DragModeFromPosition(CPoint Position, CPoint* pRelativePosition = NULL) const
     233        {
     234                if(Close(m_ToleranceArrowHandlePositionA, Position, 6, pRelativePosition))
     235                        return 2;
     236                if(Close(m_ToleranceArrowHandlePositionB, Position, 6, pRelativePosition))
     237                        return 3;
     238                if(Close(m_ArrowHandlePosition, Position, 6, pRelativePosition))
     239                        return 1;
     240                if(Close(m_ToleranceArrowHandlePositionA, Position, 10, pRelativePosition))
     241                        return 2;
     242                if(Close(m_ToleranceArrowHandlePositionB, Position, 10, pRelativePosition))
     243                        return 3;
     244                if(Close(m_ArrowHandlePosition, Position, 10, pRelativePosition))
     245                        return 1;
     246                return 0;
     247        }
    229248        DOUBLE GetAngle() const
    230249        {
     
    234253        {
    235254                return m_fToleranceAngle;
     255        }
     256        VOID SetAngle(DOUBLE fAngle)
     257        {
     258                T* pT = static_cast<T*>(this);
     259                if(m_fAngle == fAngle)
     260                        return;
     261                m_fAngle = fAngle;
     262                m_nVersion++;
     263                if(!pT->IsWindow())
     264                        return;
     265                pT->UpdateLayout();
     266                pT->Invalidate();
     267        }
     268        VOID SetToleranceAngle(DOUBLE fToleranceAngle)
     269        {
     270                T* pT = static_cast<T*>(this);
     271                if(m_fToleranceAngle == fToleranceAngle)
     272                        return;
     273                m_fToleranceAngle = fToleranceAngle;
     274                m_nVersion++;
     275                if(!pT->IsWindow())
     276                        return;
     277                pT->UpdateLayout();
     278                pT->Invalidate();
    236279        }
    237280
     
    326369                        {
    327370                                _W(ScreenToClient(&Position));
    328                                 if(Close(m_ArrowHandlePosition, Position) || Close(m_ToleranceArrowHandlePositionA, Position) || Close(m_ToleranceArrowHandlePositionB, Position))
     371                                const UINT nDragMode = DragModeFromPosition(Position);
     372                                if(nDragMode)
    329373                                {
    330374                                        ::SetCursor(AtlLoadSysCursor(IDC_SIZEALL));
     
    352396                                CPoint AlignPosition = Position - m_DragRelativeButtonDownPosition;
    353397                                const DOUBLE fAngle = atan2((DOUBLE) (Position.y - m_CenterPosition.y), (DOUBLE) (Position.x - m_CenterPosition.x)) + M_PI / 2;
    354                                 m_fToleranceAngle = 2 * abs(fAngle - m_fAngle);
     398                                DOUBLE fToleranceAngle = abs(fAngle - m_fAngle);
     399                                if(fToleranceAngle > M_PI)
     400                                        fToleranceAngle = 2 * M_PI - fToleranceAngle;
     401                                _A(fToleranceAngle >= 0 && fToleranceAngle <= M_PI);
     402                                m_fToleranceAngle = 2 * fToleranceAngle;
    355403                                m_nVersion++;
    356404                        }
     
    360408                                CPoint AlignPosition = Position - m_DragRelativeButtonDownPosition;
    361409                                const DOUBLE fAngle = atan2((DOUBLE) (Position.y - m_CenterPosition.y), (DOUBLE) (Position.x - m_CenterPosition.x)) + M_PI / 2;
    362                                 m_fToleranceAngle = 2 * abs(fAngle - m_fAngle);
     410                                DOUBLE fToleranceAngle = abs(fAngle - m_fAngle);
     411                                if(fToleranceAngle > M_PI)
     412                                        fToleranceAngle = 2 * M_PI - fToleranceAngle;
     413                                _A(fToleranceAngle >= 0 && fToleranceAngle <= M_PI);
     414                                m_fToleranceAngle = 2 * fToleranceAngle;
    363415                                m_nVersion++;
    364416                        }
     
    384436                if(!(nButton & MK_LBUTTON))
    385437                        return 0;
    386                 m_nDragMode = 0;
    387                 if(Close(m_ToleranceArrowHandlePositionA, Position))
    388                 {
    389                         m_nDragMode = 2;
    390                         m_DragRelativeButtonDownPosition = Position - m_ToleranceArrowHandlePositionA;
    391                 } else if(Close(m_ToleranceArrowHandlePositionB, Position))
    392                 {
    393                         m_nDragMode = 3;
    394                         m_DragRelativeButtonDownPosition = Position - m_ToleranceArrowHandlePositionB;
    395                 } else if(Close(m_ArrowHandlePosition, Position))
    396                 {
    397                         m_nDragMode = 1;
    398                         m_DragRelativeButtonDownPosition = Position - m_ArrowHandlePosition;
    399                 } else
     438                CPoint RelativePosition;
     439                m_nDragMode = DragModeFromPosition(Position, &RelativePosition);
     440                if(!m_nDragMode)
    400441                        return 0;
     442                m_DragButtonDownPosition = Position;
     443                m_DragRelativeButtonDownPosition = RelativePosition;
    401444                m_nDragVersion = m_nVersion;
    402                 m_DragButtonDownPosition = Position;
    403445                SetCapture();
    404446                ::SetCursor(AtlLoadSysCursor(IDC_SIZEALL));
Note: See TracChangeset for help on using the changeset viewer.