Start with the project you created in Using the Camera.
Take the following steps to add support for hit testing different vector objects:
1. |
Click the "Class View" tab of the project workspace. |
2. |
Select the CMainFrame() branch. |
3. |
Right click, and choose "Add Function". |
4. |
For the return type enter "void". |
5. |
For the Function name enter "StatusBarDisplay", and add the following parameter (LPCTSTR pszMsg)". |
6. |
Keep it Public in the Access combo box. |
7. |
Click Finish button. |
8. |
Add the following code to the newly created member function StatusBarDisplay(): |
void CMainFrame::StatusBarDisplay(LPCTSTR pszMsg){m_wndStatusBar.SetPaneText(0, pszMsg, TRUE);}
9. |
Click to open the "MyVectorWindow" branch in the project workspace. |
10. |
Double click any of the MyVectorWindow member functions to open the file "MyVectorWindow.cpp". |
11. |
Add the following two lines after #include "StdAfx.h": |
#include "tutorial.h"#include "MainFrm.h"extern CTutorialApp theApp;
12. |
Click the "Class View" tab of the project workspace. |
13. |
Double click the MsgProcCallBack () member function of the MyVectorWindow class. |
14. |
Add the following variables local to MsgProcCallBack (): |
POINT pt;L_INT nRet;LVectorObject Object;L_TCHAR szBuffer[200];VECTORPEN Pen;
15. |
Immediately before the "case WM_CHAR" line, add the following code: |
case WM_MOUSEMOVE:// hit test object under mouse cursorpt.x = LOWORD( lParam );pt.y = HIWORD( lParam );nRet = HitTest(&pt, &Object );if( nRet == SUCCESS ){// theres an object, show its type in main window captionswitch( Object.GetType() ){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") );((CMainFrame *)(theApp.GetMainWnd()))->StatusBarDisplay(szBuffer);break;case WM_LBUTTONDOWN:// hit test object under mouse cursorpt.x = LOWORD( lParam );pt.y = HIWORD( lParam );nRet = HitTest(&pt, &Object );if( nRet == SUCCESS ){// theres an object, flip its pen width between 1 and 4Object.GetObjectAttributes(NULL, &Pen, NULL, NULL );Pen.NewPen.LogPen.lopnWidth.x = ( Pen.NewPen.LogPen.lopnWidth.x == 1 ) ? 4 : 1;Object.SetObjectAttributes(NULL, &Pen, NULL, NULL);}break;case WM_RBUTTONDOWN:// hit test object under mouse cursorpt.x = LOWORD( lParam );pt.y = HIWORD( lParam );nRet = HitTest(&pt, &Object );if( nRet == SUCCESS ){// there is an object, delete itObject.DeleteObject();}break;
16. |
Compile and run the demo. |
17. |
From the program menu, browse to the "images" folder of your LEAD installation. Open the image random.dxf and click OK. |
18. |
You should be able now to see the object type under mouse cursor in the status bar. Left click an object to flip its pen width size between 1 and 4. Right click an object to delete it. |