Changeset 294 for trunk/Utilities/DirectionControl
- Timestamp:
- Jun 13, 2014, 11:21:15 PM (10 years ago)
- Location:
- trunk/Utilities/DirectionControl
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Utilities/DirectionControl/DirectionControl.rc
r293 r294 138 138 139 139 VS_VERSION_INFO VERSIONINFO 140 FILEVERSION 1, 0, 0, 95140 FILEVERSION 1, 0, 0, 103 141 141 PRODUCTVERSION 1,0,0,1 142 142 FILEFLAGSMASK 0x3fL … … 157 157 VALUE "CompanyName", "Roman Ryltsov" 158 158 VALUE "FileDescription", "Alax.Info Custom Control Host Module" 159 VALUE "FileVersion", "1, 0, 0, 95\0"159 VALUE "FileVersion", "1, 0, 0, 103\0" 160 160 VALUE "InternalName", "DirectionControl.exe" 161 161 VALUE "LegalCopyright", "Copyright © Alax.Info, Roman Ryltsov, 2013-2014" -
trunk/Utilities/DirectionControl/MainDialog.h
r293 r294 82 82 _A((GetStyle() & SS_TYPEMASK) == SS_LEFT); //_A((UINT) ((GetStyle() & SS_TYPEMASK) - SS_LEFT) < (SS_RIGHT - SS_LEFT + 1)); 83 83 //ModifyStyle(0, SS_NOTIFY); 84 _A(GetExStyle() & WS_EX_TRANSPARENT); 84 85 CWindow Parent = GetParent(); 85 86 pT->UpdateLayout(); … … 137 138 return; 138 139 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); 142 143 } 143 144 VOID EraseBackground(CDCHandle Dc) … … 223 224 Dc.Ellipse(m_CenterPosition.x - D, m_CenterPosition.y - D, m_CenterPosition.x + D + F, m_CenterPosition.y + D + F); 224 225 } 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; 227 230 return (PositionA.x - PositionB.x) * (PositionA.x - PositionB.x) + (PositionA.y - PositionB.y) * (PositionA.y - PositionB.y) < (nDistanceThreshold * nDistanceThreshold); 228 231 } 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 } 229 248 DOUBLE GetAngle() const 230 249 { … … 234 253 { 235 254 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(); 236 279 } 237 280 … … 326 369 { 327 370 _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) 329 373 { 330 374 ::SetCursor(AtlLoadSysCursor(IDC_SIZEALL)); … … 352 396 CPoint AlignPosition = Position - m_DragRelativeButtonDownPosition; 353 397 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; 355 403 m_nVersion++; 356 404 } … … 360 408 CPoint AlignPosition = Position - m_DragRelativeButtonDownPosition; 361 409 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; 363 415 m_nVersion++; 364 416 } … … 384 436 if(!(nButton & MK_LBUTTON)) 385 437 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) 400 441 return 0; 442 m_DragButtonDownPosition = Position; 443 m_DragRelativeButtonDownPosition = RelativePosition; 401 444 m_nDragVersion = m_nVersion; 402 m_DragButtonDownPosition = Position;403 445 SetCapture(); 404 446 ::SetCursor(AtlLoadSysCursor(IDC_SIZEALL));
Note: See TracChangeset
for help on using the changeset viewer.