To add support for hit testing different vector objects:
1. |
Add the following local variables right under the VECTORPOINT Point; statement in the WndProc function: |
POINT pt;VECTOROBJECT Object;L_TCHAR szBuffer[ 80 ];VECTORPEN Pen;
2. |
Add the following lines right after the break; statement of case WM_KEYDOWN: |
case WM_MOUSEMOVE:// hit test object under mouse cursorpt.x = LOWORD( lParam );pt.y = HIWORD( lParam );nRet = L_VecHitTest( &Vector, &pt, &Object );if( nRet == SUCCESS ){// theres an object, show its type in main window captionswitch( Object.nType ){case VECTOR_VERTEX: lstrcpy( szBuffer, TEXT("Vertex ")); break;case VECTOR_LINE: lstrcpy( szBuffer, TEXT("Line ")); break;case VECTOR_RECTANGLE: lstrcpy( szBuffer, TEXT("Rectangle ")); break;case VECTOR_POLYLINE: lstrcpy( szBuffer, TEXT("Polyline")); break;case VECTOR_POLYBEZIER: lstrcpy( szBuffer, TEXT("Polybezier")); break;case VECTOR_POLYGON: lstrcpy( szBuffer, TEXT("Polygon")); break;case VECTOR_ELLIPSE: lstrcpy( szBuffer, TEXT("Ellipse")); break;case VECTOR_CIRCLE: lstrcpy( szBuffer, TEXT("Circle")); break;case VECTOR_ARC: lstrcpy( szBuffer, TEXT("Arc")); break;case VECTOR_TEXT: lstrcpy( szBuffer, TEXT("Text")); break;case VECTOR_PIE: lstrcpy( szBuffer, TEXT("Pie")); break;case VECTOR_CHORD: lstrcpy( szBuffer, TEXT("Chord")); break;case VECTOR_RASTER: lstrcpy( szBuffer, TEXT("Raster ")); break;}}elselstrcpy( szBuffer, TEXT("No object under mouse cursor"));SetWindowText( hWnd, szBuffer );break;case WM_LBUTTONDOWN:// hit test object under mouse cursorpt.x = LOWORD( lParam );pt.y = HIWORD( lParam );nRet = L_VecHitTest ( &Vector, &pt, &Object );if( nRet == SUCCESS ){// theres an object, flip its pen width between 1 and 4L_VecGetObjectAttributes ( &Vector, &Object, NULL, &Pen, NULL, NULL );Pen.NewPen.LogPen.lopnWidth.x = ( Pen.NewPen.LogPen.lopnWidth.x == 1 ) ? 4 : 1;L_VecSetObjectAttributes ( &Vector, &Object, NULL, &Pen, NULL, NULL, 0L );// reflect our changesInvalidateRect( hWnd, NULL, FALSE );}break;case WM_RBUTTONDOWN:// hit test object under mouse cursorpt.x = LOWORD( lParam );pt.y = HIWORD( lParam );nRet = L_VecHitTest ( &Vector, &pt, &Object );if( nRet == SUCCESS ){// theres an object, delete itL_VecDeleteObject ( &Vector, &Object, 0L );// reflect our changesInvalidateRect( hWnd, NULL, FALSE );}break;
3. |
Compile and run the demo. |
4. |
Select File/Open from the program menu. Browse to c:\lead\images\random.dxf and click OK. |
5. |
You should be able now to see the object type under the mouse cursor on the main window caption. Left click an object to flip its pen width size between 1 and 4. Right click an object to delete it. |