home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 February / Chip_2001-02_cd1.bin / sharewar / vecad / source / Vecad.cpp < prev    next >
C/C++ Source or Header  |  2000-08-13  |  31KB  |  1,195 lines

  1. /********************************************************************
  2. * Project: VeCAD ver.5.1
  3. * Copyright (C) 1999-2000 by Oleg Kolbaskin.
  4. * All rights reserved.
  5. *
  6. * Main module
  7. * Defines the entry point for the application.
  8. ********************************************************************/
  9. #include <windows.h>
  10. #include <tchar.h>
  11. #include <process.h>
  12. #include "resource.h"
  13. #include "vecres.h"
  14. #include "config.h"
  15. #include "mru.h"
  16. #include "extapp.h"
  17.  
  18.  
  19. // Global Variables:
  20. HINSTANCE ghInst = 0;             // app instance
  21. HWND      ghwMain = NULL;    // Main App window
  22. HWND      ghwVec = NULL;     // Drawing's window
  23. CConfig   gConfig;
  24. CMruList  gMruList;
  25. CAppList  gAppList;
  26.  
  27. // Global Functions
  28. int CALLBACK DwgProc (int iDwg, UINT Msg, int Prm1, int Prm2, double Prm3, double Prm4, void* Prm5);
  29. void OnCmFileNew  ();
  30. void OnCmFileOpen ();
  31. int  DlgAbout     (HWND hw);  // defined in 'DgAbout.cpp'
  32.  
  33.  
  34. // Variables, used in this code module:
  35. static TCHAR* szVecWndClass = _T("VeCAD_MainWindow");   
  36. static int  VecX0 = 0;
  37. static int  VecY0 = 0;
  38. static int  SBarH = 0;  // height of status bar
  39.  
  40.  
  41.  
  42. // Foward declarations of functions included in this code module:
  43. static ATOM MyRegisterClass (HINSTANCE hInstance);
  44. static BOOL InitInstance    (HINSTANCE, int);
  45. static void CreateVecWindow ();
  46. static bool OnCommand       (HWND hWnd, int Cmd);
  47. static void UpdateMenu (HMENU hMenu);
  48. static void CfgSave    ();
  49. static void CfgLoad    ();
  50.  
  51. static LRESULT CALLBACK    WndProc (HWND, UINT, WPARAM, LPARAM);
  52.  
  53.  
  54. //*******************************************************************
  55. int APIENTRY WinMain(HINSTANCE hInstance,
  56.                      HINSTANCE hPrevInstance,
  57.                      LPSTR     lpCmdLine,
  58.                      int       nCmdShow)
  59. {
  60.   MSG msg;
  61.   HACCEL hAccelTable;
  62.  
  63.   // Perform application initialization:
  64.   MyRegisterClass( hInstance );
  65.   if (!InitInstance (hInstance, nCmdShow)) {
  66.     return FALSE;
  67.   }
  68.   
  69.   // load config from ini file,
  70.   // config will be saved in response to WM_DESTROY message of main window
  71.   CfgLoad();  
  72.  
  73.   hAccelTable = LoadAccelerators( hInstance, (LPCTSTR)ACC_TABLE );
  74.  
  75.   // Main message loop:
  76.   while (GetMessage(&msg, NULL, 0, 0)) {
  77.     if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {
  78.       TranslateMessage(&msg);
  79.       DispatchMessage(&msg);
  80.     }
  81.   }
  82.   return msg.wParam;
  83. }
  84.  
  85.  
  86. //-----------------------------------------------
  87. // Registers the main window class.
  88. //-----------------------------------------------
  89. static ATOM MyRegisterClass(HINSTANCE hInstance)
  90. {
  91.   WNDCLASSEX wc;
  92.   ZeroMemory( &wc, sizeof(wc) );
  93.   wc.cbSize        = sizeof(WNDCLASSEX); 
  94.   wc.style         = CS_HREDRAW | CS_VREDRAW;
  95.   wc.lpfnWndProc   = (WNDPROC)WndProc;
  96.   wc.cbClsExtra    = 0;
  97.   wc.cbWndExtra    = 0;
  98.   wc.hInstance     = hInstance;
  99.   wc.hIcon         = LoadIcon( hInstance, (LPCTSTR)ICON_VECAD );
  100.   wc.hCursor       = LoadCursor( NULL, IDC_ARROW );
  101.   wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
  102.   wc.lpszMenuName  = (LPCSTR)MENU_MAIN;
  103.   wc.lpszClassName = szVecWndClass;
  104.   wc.hIconSm       = LoadIcon( hInstance, (LPCTSTR)ICON_VECADSM);
  105.  
  106.   return RegisterClassEx( &wc );
  107. }
  108.  
  109.  
  110. //-----------------------------------------------
  111. // Saves instance handle and creates main window
  112. // In this function, we save the instance handle in a global variable and
  113. // create and display the main program window.
  114. //-----------------------------------------------
  115. static BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
  116. {
  117.   ghInst = hInstance; // Store instance handle in our global variable
  118.  
  119.   TCHAR szTitle[64];
  120.   ZeroMemory( szTitle, sizeof(szTitle) );
  121.   LoadString( hInstance, STR_APP_TITLE, szTitle, 62 );
  122.  
  123.   ghwMain = CreateWindow( szVecWndClass, szTitle, WS_OVERLAPPEDWINDOW,
  124.                           CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 
  125.                           NULL, NULL, hInstance, NULL );
  126.   if (!ghwMain){
  127.     return FALSE;
  128.   }
  129.  
  130.   // Create window to view VeCAD drawings
  131.   CreateVecWindow();
  132.   // Show Windows
  133.   ShowWindow( ghwMain, SW_MAXIMIZE ); //nCmdShow );
  134.   UpdateWindow( ghwMain );
  135.   return TRUE;
  136. }
  137.  
  138.  
  139. //-----------------------------------------------
  140. static void CreateVecWindow ()
  141. {
  142.   // Register your copy of Vecad.dll
  143.   vlRegistration( 0 );
  144.   // Create VeCAD toolbar
  145.   int w=0, h=0, h2;
  146.   int x = 0;
  147.   int y = -1;
  148.   vlToolBarCreate( ghwMain, VL_TB_MAIN, x, y, -1, 1, &w, &h );
  149.   y+=h;
  150.   h2=h;
  151.   x=0;
  152.   vlToolBarCreate( ghwMain, VL_CB_LAYER, x, y, 210, h2, &w, &h );
  153.   x+=w;
  154.   vlToolBarCreate( ghwMain, VL_CB_COLOR, x, y, 90, h2, &w, &h );
  155.   x+=w;
  156.   vlToolBarCreate( ghwMain, VL_CB_STLINE, x, y, 200, h2, &w, &h );
  157.   x+=w;
  158.   vlToolBarCreate( ghwMain, VL_TB_SNAP, x, y, -1, 1, &w, &h );
  159.   y+=h;
  160.   vlToolBarCreate( ghwMain, VL_TB_DRAW, 0, y, 60, 500, &w, &h );
  161.   y+=h;
  162.   vlToolBarCreate( ghwMain, VL_TB_EDIT, 0, y, 60, -1, &w, &h );
  163.   x=w;
  164.   y=h2+h2-1;
  165.   VecX0 = x;
  166.   VecY0 = y;
  167.   // Create VeCAD StatusBar
  168.   vlStatBarCreate( ghwMain, &SBarH );
  169.   // Create VeCAD window, size will be set in OnSize()
  170.   ghwVec = vlWndCreate( ghwMain, VL_WS_CHILD|VL_WS_SCROLL|VL_WS_BORDER,
  171.                         0,0,400,300, DwgProc );
  172.   if (ghwVec){
  173.     TCHAR szStr[128];
  174.     ZeroMemory( szStr, sizeof(szStr) );
  175.     LoadString( ghInst, STR_WNDTEXT, szStr, 126 );
  176.     vlPropPut( VD_WND_EMPTYTEXT, (int)ghwVec, szStr );
  177. //    vlPropPutInt( VD_WND_CURSOR_CROSS, (int)ghwVec, 0 );
  178.   }
  179. }
  180.  
  181.  
  182. //-----------------------------------------------
  183. // Processes messages for the main window.
  184. //-----------------------------------------------
  185. static LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  186. {
  187.   int cx,cy;
  188.  
  189.   switch( message ){
  190.     case WM_COMMAND:
  191.       if (OnCommand( hWnd, LOWORD(wParam) )==false){
  192.         return DefWindowProc( hWnd, message, wParam, lParam );
  193.       } 
  194.       break;
  195.  
  196.     case WM_CLOSE:
  197.       CfgSave();   // save config
  198.       if (vlExecute( VC_FILE_CLOSEALL )){
  199.         // close main window
  200.         return DefWindowProc(hWnd, message, wParam, lParam);
  201.       }
  202.       // do not close main window
  203.       return 0;
  204.  
  205.     case WM_DESTROY:
  206.       ::DestroyWindow( ghwVec );    
  207.       PostQuitMessage(0);
  208.       break;
  209.  
  210.     case WM_ERASEBKGND:
  211.       return 0;
  212.  
  213.     case WM_SIZE:
  214.       // Resize VeCAD window
  215.       cx = LOWORD(lParam);  // width of client area 
  216.       cy = HIWORD(lParam); // height of client area       
  217.       if (cx>0 && cy>0){
  218.         vlWndResize( ghwVec, VecX0, VecY0, cx-VecX0, cy-VecY0-SBarH );
  219.         vlStatBarResize();
  220.       }
  221.       break;
  222.  
  223.     case WM_INITMENU:
  224.       UpdateMenu( (HMENU) wParam );
  225.       break;
  226.  
  227.     default:
  228.       return DefWindowProc(hWnd, message, wParam, lParam);
  229.    }
  230.    return 0;
  231. }
  232.  
  233.  
  234. //-----------------------------------------------
  235. void UpdateMenu (HMENU hMenu)
  236. {
  237.   HMENU hMainMenu = ::GetMenu( ghwMain );
  238.   if (hMenu==hMainMenu){
  239.     BOOL bCheck;
  240.     UINT b;
  241.     bCheck = vlPropGetInt( VD_PRJ_WDWG_ON, 0 );
  242.     b = (bCheck)? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED;
  243.     ::CheckMenuItem( hMainMenu, VC_FILE_LIST, b );
  244.     bCheck = vlPropGetInt( VD_PRJ_WVIEW_ON, 0 );
  245.     b = (bCheck)? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED;
  246.     ::CheckMenuItem( hMainMenu, VC_VIEW_LIST, b );
  247.   }
  248. }
  249.  
  250.  
  251. //-----------------------------------------------
  252. void CfgSave ()
  253. {
  254.   TCHAR szValue[64];
  255.   int iv;
  256.    
  257.   //------- Most Recently Used files
  258.   gMruList.Save( gConfig );
  259.  
  260.   //------- window "Drawings"
  261.   iv = vlPropGetInt( VD_PRJ_WDWG_ON, 0 );
  262.   _itot( iv, szValue, 10 );
  263.   gConfig.SetValue( _T("WDWG_ON"), szValue );
  264.  
  265.   iv = vlPropGetInt( VD_PRJ_WDWG_LEFT, 0 );
  266.   _itot( iv, szValue, 10 );
  267.   gConfig.SetValue( _T("WDWG_LEFT"), szValue );
  268.  
  269.   iv = vlPropGetInt( VD_PRJ_WDWG_TOP, 0 );
  270.   _itot( iv, szValue, 10 );
  271.   gConfig.SetValue( _T("WDWG_TOP"), szValue );
  272.  
  273.   iv = vlPropGetInt( VD_PRJ_WDWG_RIGHT, 0 );
  274.   _itot( iv, szValue, 10 );
  275.   gConfig.SetValue( _T("WDWG_RIGHT"), szValue );
  276.  
  277.   iv = vlPropGetInt( VD_PRJ_WDWG_BOTTOM, 0 );
  278.   _itot( iv, szValue, 10 );
  279.   gConfig.SetValue( _T("WDWG_BOTTOM"), szValue );
  280.  
  281.   //------- window "Views"
  282.   iv = vlPropGetInt( VD_PRJ_WVIEW_ON, 0 );
  283.   _itot( iv, szValue, 10 );
  284.   gConfig.SetValue( _T("WVIEW_ON"), szValue );
  285.  
  286.   iv = vlPropGetInt( VD_PRJ_WVIEW_LEFT, 0 );
  287.   _itot( iv, szValue, 10 );
  288.   gConfig.SetValue( _T("WVIEW_LEFT"), szValue );
  289.  
  290.   iv = vlPropGetInt( VD_PRJ_WVIEW_TOP, 0 );
  291.   _itot( iv, szValue, 10 );
  292.   gConfig.SetValue( _T("WVIEW_TOP"), szValue );
  293.  
  294.   iv = vlPropGetInt( VD_PRJ_WVIEW_RIGHT, 0 );
  295.   _itot( iv, szValue, 10 );
  296.   gConfig.SetValue( _T("WVIEW_RIGHT"), szValue );
  297.  
  298.   iv = vlPropGetInt( VD_PRJ_WVIEW_BOTTOM, 0 );
  299.   _itot( iv, szValue, 10 );
  300.   gConfig.SetValue( _T("WVIEW_BOTTOM"), szValue );
  301.  
  302.   //------- position of window "Distance/Area"
  303.   iv = vlPropGetInt( VD_PRJ_WDIST_LEFT, 0 );
  304.   _itot( iv, szValue, 10 );
  305.   gConfig.SetValue( _T("WDIST_LEFT"), szValue );
  306.  
  307.   iv = vlPropGetInt( VD_PRJ_WDIST_TOP, 0 );
  308.   _itot( iv, szValue, 10 );
  309.   gConfig.SetValue( _T("WDIST_TOP"), szValue );
  310.  
  311.   gConfig.Close();
  312. }
  313.  
  314.  
  315. //-----------------------------------------------
  316. void CfgLoad ()
  317. {
  318.   TCHAR szCfgFile[256];
  319.   TCHAR szValue[64];
  320.   int iv;
  321.   int ret = ::GetModuleFileName( NULL, szCfgFile, 255 );
  322.   if (ret>1){
  323.     TCHAR* p = _tcsrchr( szCfgFile, '\\' );
  324.     if (p!=NULL){
  325.       p[0]=0;
  326.       _tcscat( szCfgFile, _T("\\vecad.ini") );
  327.  
  328.       gConfig.Open( szCfgFile );
  329.  
  330.       //------- Most Recently Used files
  331.       gMruList.Load( gConfig );
  332.  
  333.       //------- window "Drawings"
  334.       if (gConfig.GetValue( _T("WDWG_LEFT"), szValue )){
  335.         iv = _ttoi( szValue );
  336.         vlPropPutInt( VD_PRJ_WDWG_LEFT, 0, iv );
  337.       }
  338.       if (gConfig.GetValue( _T("WDWG_TOP"), szValue )){
  339.         iv = _ttoi( szValue );
  340.         vlPropPutInt( VD_PRJ_WDWG_TOP, 0, iv );
  341.       }
  342.       if (gConfig.GetValue( _T("WDWG_RIGHT"), szValue )){
  343.         iv = _ttoi( szValue );
  344.         vlPropPutInt( VD_PRJ_WDWG_RIGHT, 0, iv );
  345.       }
  346.       if (gConfig.GetValue( _T("WDWG_BOTTOM"), szValue )){
  347.         iv = _ttoi( szValue );
  348.         vlPropPutInt( VD_PRJ_WDWG_BOTTOM, 0, iv );
  349.       }
  350.       if (gConfig.GetValue( _T("WDWG_ON"), szValue )){
  351.         iv = _ttoi( szValue );
  352.         vlPropPutInt( VD_PRJ_WDWG_ON, (int)ghwMain, (iv==0)?FALSE:TRUE );
  353.       }
  354.  
  355.       //------- window "Views"
  356.       if (gConfig.GetValue( _T("WVIEW_LEFT"), szValue )){
  357.         iv = _ttoi( szValue );
  358.         vlPropPutInt( VD_PRJ_WVIEW_LEFT, 0, iv );
  359.       }
  360.       if (gConfig.GetValue( _T("WVIEW_TOP"), szValue )){
  361.         iv = _ttoi( szValue );
  362.         vlPropPutInt( VD_PRJ_WVIEW_TOP, 0, iv );
  363.       }
  364.       if (gConfig.GetValue( _T("WVIEW_RIGHT"), szValue )){
  365.         iv = _ttoi( szValue );
  366.         vlPropPutInt( VD_PRJ_WVIEW_RIGHT, 0, iv );
  367.       }
  368.       if (gConfig.GetValue( _T("WVIEW_BOTTOM"), szValue )){
  369.         iv = _ttoi( szValue );
  370.         vlPropPutInt( VD_PRJ_WVIEW_BOTTOM, 0, iv );
  371.       }
  372.       if (gConfig.GetValue( _T("WVIEW_ON"), szValue )){
  373.         iv = _ttoi( szValue );
  374.         vlPropPutInt( VD_PRJ_WVIEW_ON, (int)ghwMain, (iv==0)?FALSE:TRUE );
  375.       }
  376.  
  377.       //------- position of window "Distance/Area"
  378.       if (gConfig.GetValue( _T("WDIST_LEFT"), szValue )){
  379.         iv = _ttoi( szValue );
  380.         vlPropPutInt( VD_PRJ_WDIST_LEFT, 0, iv );
  381.       }
  382.       if (gConfig.GetValue( _T("WDIST_TOP"), szValue )){
  383.         iv = _ttoi( szValue );
  384.         vlPropPutInt( VD_PRJ_WDIST_TOP, 0, iv );
  385.       }
  386.  
  387.       //------- external applications
  388.       gAppList.Load( gConfig );
  389.     }
  390.   }
  391. }
  392.  
  393.  
  394. //-----------------------------------------------
  395. void OnCmFileNew () 
  396. {
  397.   vlFileNew( ghwVec, DwgProc, "" );
  398. /*
  399.   int iDwg = vlDocCreate( ghwVec, DwgProc );
  400.   if (iDwg>=0){
  401.     vlClear( TRUE );
  402.     vlRedraw();
  403.     vlSetFocus();
  404.   }
  405. */
  406. }
  407.  
  408. //-----------------------------------------------
  409. void OnCmFileOpen () 
  410. {
  411.   vlFileOpen( ghwVec, DwgProc, "" );
  412. /*
  413.   int iDwg = vlDwgCreate( ghwVec, DwgProc );
  414.   if (iDwg>=0){
  415.     if (vlFileLoad( VL_FILE_VEC, NULL )==FALSE){
  416.       vlDwgDelete( iDwg );
  417.     }
  418.   }
  419. */
  420. }
  421.  
  422. //-----------------------------------------------
  423. void OpenMruFile (int i)
  424. {
  425.   LPCTSTR pszFileName = gMruList.Get( i );
  426.   if (pszFileName){
  427.       vlFileOpen( ghwVec, DwgProc, pszFileName );
  428. /*
  429.       int iDwg = vlDwgCreate( ghwVec, DwgProc );
  430.     if (iDwg>=0){
  431.         if (vlFileLoad( VL_FILE_VEC, pszFileName )==FALSE){
  432.         vlDwgDelete( iDwg );
  433.       }else{
  434.         vlSetFocus();
  435.       }
  436.     }
  437. */
  438.   }    
  439. }
  440.  
  441. //-----------------------------------------------
  442. void OnMru01() 
  443. {
  444.   OpenMruFile( 0 );
  445. }
  446. //-----------------------------------------------
  447. void OnMru02() 
  448. {
  449.   OpenMruFile( 1 );    
  450. }
  451. //-----------------------------------------------
  452. void OnMru03() 
  453. {
  454.   OpenMruFile( 2 );
  455. }
  456. //-----------------------------------------------
  457. void OnMru04() 
  458. {
  459.   OpenMruFile( 3 );
  460. }
  461. //-----------------------------------------------
  462. void OnMru05() 
  463. {
  464.   OpenMruFile( 4 );
  465. }
  466. //-----------------------------------------------
  467. void OnMru06() 
  468. {
  469.   OpenMruFile( 5 );
  470. }
  471. //-----------------------------------------------
  472. void OnMru07() 
  473. {
  474.   OpenMruFile( 6 );
  475. }
  476. //-----------------------------------------------
  477. void OnMru08() 
  478. {
  479.   OpenMruFile( 7 );
  480. }
  481. //-----------------------------------------------
  482. void OnMru09() 
  483. {
  484.   OpenMruFile( 8 );
  485. }
  486. //-----------------------------------------------
  487. void OnMru10() 
  488. {
  489.   OpenMruFile( 9 );
  490. }
  491. //-----------------------------------------------
  492. void OnMru11() 
  493. {
  494.   OpenMruFile( 10 );
  495. }
  496.  
  497.  
  498. //-----------------------------------------------
  499. void RunExtApp (int i)
  500. {
  501.   LPCTSTR pszFileName = gAppList.GetFileName( i );
  502.   if (pszFileName){
  503.     TCHAR szBuf[300]; szBuf[0]=0;
  504.     TCHAR* arg[2];
  505.     arg[0] = new TCHAR[256];
  506.     arg[1] = NULL; //new TCHAR[256];
  507.     _tcscpy( arg[0], pszFileName );
  508.     if (_tspawnvp( P_NOWAIT, arg[0], arg )==-1){
  509.       _stprintf( szBuf, _T("Can't to run '%s' (errno=%d)"), pszFileName, errno);
  510.       ::MessageBox( ghwMain, szBuf, _T("VeCAD"), MB_OK|MB_ICONEXCLAMATION );
  511.     }
  512.     delete[] arg[0];
  513.   }    
  514. }
  515.  
  516. //-----------------------------------------------
  517. void OnExtApp01() 
  518. {
  519.   RunExtApp( 0 );
  520. }
  521. //-----------------------------------------------
  522. void OnExtApp02() 
  523. {
  524.   RunExtApp( 1 );
  525. }
  526. //-----------------------------------------------
  527. void OnExtApp03() 
  528. {
  529.   RunExtApp( 2 );
  530. }
  531. //-----------------------------------------------
  532. void OnExtApp04() 
  533. {
  534.   RunExtApp( 3 );
  535. }
  536. //-----------------------------------------------
  537. void OnExtApp05() 
  538. {
  539.   RunExtApp( 4 );
  540. }
  541. //-----------------------------------------------
  542. void OnExtApp06() 
  543. {
  544.   RunExtApp( 5 );
  545. }
  546. //-----------------------------------------------
  547. void OnExtApp07() 
  548. {
  549.   RunExtApp( 6 );
  550. }
  551. //-----------------------------------------------
  552. void OnExtApp08() 
  553. {
  554.   RunExtApp( 7 );
  555. }
  556. //-----------------------------------------------
  557. void OnExtApp09() 
  558. {
  559.   RunExtApp( 8 );
  560. }
  561. //-----------------------------------------------
  562. void OnExtApp10() 
  563. {
  564.   RunExtApp( 9 );
  565. }
  566.  
  567.  
  568.  
  569. //-----------------------------------------------
  570. void OnCmFileSave() 
  571. {
  572.   vlExecute( VC_FILE_SAVE );
  573. }
  574.  
  575. //-----------------------------------------------
  576. void OnCmFileSaveAs() 
  577. {
  578.   vlExecute( VC_FILE_SAVEAS );    
  579. }
  580.  
  581.  
  582. //-----------------------------------------------
  583. void OnCmFileClose() 
  584. {
  585.   vlExecute( VC_FILE_CLOSE );
  586. }
  587.  
  588. //-----------------------------------------------
  589. void OnCmFileCloseAll() 
  590. {
  591.   vlExecute( VC_FILE_CLOSEALL );
  592. }
  593.  
  594. //-----------------------------------------------
  595. void OnCmFileList() 
  596. {
  597.   vlExecute( VC_FILE_LIST );
  598.   HMENU hMainMenu = ::GetMenu( ghwMain );
  599.   BOOL bCheck = vlPropGetInt( VD_PRJ_WDWG_ON, 0 );
  600.   UINT b = (bCheck)? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED;
  601.   ::CheckMenuItem( hMainMenu, VC_FILE_LIST, b );
  602. }
  603.  
  604. //-----------------------------------------------
  605. void OnCmImportDxf() 
  606. {
  607.   vlExecute( VC_IMPORT_DXF );
  608. }
  609. //-----------------------------------------------
  610. void OnCmImportVdf() 
  611. {
  612.   vlExecute( VC_IMPORT_VDF );
  613. }
  614. //-----------------------------------------------
  615. void OnCmExportDxf() 
  616. {
  617.   vlExecute( VC_EXPORT_DXF );
  618. }
  619. //-----------------------------------------------
  620. void OnCmExportHpgl() 
  621. {
  622.   vlExecute( VC_EXPORT_HPGL );
  623. }
  624. //-----------------------------------------------
  625. void OnCmExportBmp() 
  626. {
  627.   vlExecute( VC_EXPORT_BMP );
  628. }
  629.  
  630.  
  631.  
  632. //***********************************************
  633. void OnCmZoomAll() 
  634. {
  635.   vlExecute( VC_ZOOM_ALL );
  636. }
  637. //-----------------------------------------------
  638. void OnCmZoomWin() 
  639. {
  640.   vlExecute( VC_ZOOM_WIN );
  641. }
  642. //-----------------------------------------------
  643. void OnCmZoomIn() 
  644. {
  645.   vlExecute( VC_ZOOM_IN );
  646. }
  647. //-----------------------------------------------
  648. void OnCmZoomOut() 
  649. {
  650.   vlExecute( VC_ZOOM_OUT );
  651. }
  652. //-----------------------------------------------
  653. void OnCmZoomPan() 
  654. {
  655.   vlExecute( VC_ZOOM_PAN );
  656. }
  657. //-----------------------------------------------
  658. void OnCmZoomPage() 
  659. {
  660.   vlExecute( VC_ZOOM_PAGE );
  661. }
  662.  
  663. //-----------------------------------------------
  664. void OnCmPageFirst() 
  665. {
  666.   vlExecute( VC_PAGE_FIRST );
  667. }
  668. //-----------------------------------------------
  669. void OnCmPageLast() 
  670. {
  671.   vlExecute( VC_PAGE_LAST );
  672. }
  673. //-----------------------------------------------
  674. void OnCmPagePrev() 
  675. {
  676.   vlExecute( VC_PAGE_PREV );
  677. }
  678. //-----------------------------------------------
  679. void OnCmPageNext() 
  680. {
  681.   vlExecute( VC_PAGE_NEXT );
  682. }
  683. //-----------------------------------------------
  684. void OnCmPageDlg() 
  685. {
  686.   vlExecute( VC_PAGE_DLG );
  687. }
  688.  
  689. //-----------------------------------------------
  690. void OnCmViewList() 
  691. {
  692.   vlExecute( VC_VIEW_LIST );
  693.   HMENU hMainMenu = ::GetMenu( ghwMain );
  694.   BOOL bCheck = vlPropGetInt( VD_PRJ_WVIEW_ON, 0 );
  695.   UINT b = (bCheck)? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED;
  696.   ::CheckMenuItem( hMainMenu, VC_VIEW_LIST, b );
  697. }
  698.  
  699. //-----------------------------------------------
  700. void OnCmViewSave() 
  701. {
  702.   vlExecute( VC_VIEW_SAVE );
  703. }
  704.  
  705.  
  706.  
  707.  
  708. //***********************************************
  709. void OnCmEditCbCut() 
  710. {
  711.   vlExecute( VC_EDIT_CBCUT );
  712. }
  713. //-----------------------------------------------
  714. void OnCmEditCbCopy() 
  715. {
  716.   vlExecute( VC_EDIT_CBCOPY );
  717. }
  718. //-----------------------------------------------
  719. void OnCmEditCbPaste() 
  720. {
  721.   vlExecute( VC_EDIT_CBPASTE );
  722. }
  723. //-----------------------------------------------
  724. void OnCmEditEntprop() 
  725. {
  726.   vlExecute( VC_EDIT_ENTPROP );
  727. }
  728. //-----------------------------------------------
  729. void OnCmEditRedo() 
  730. {
  731.   vlExecute( VC_EDIT_REDO );
  732. }
  733. //-----------------------------------------------
  734. void OnCmEditUndo() 
  735. {
  736.   vlExecute( VC_EDIT_UNDO );
  737. }
  738. //-----------------------------------------------
  739. void OnCmEditCopy() 
  740. {
  741.   vlExecute( VC_EDIT_COPY );
  742. }
  743. //-----------------------------------------------
  744. void OnCmEditTrim() 
  745. {
  746.   vlExecute( VC_EDIT_TRIM );
  747. }
  748. //-----------------------------------------------
  749. void OnCmEditScale() 
  750. {
  751.   vlExecute( VC_EDIT_SCALE );
  752. }
  753. //-----------------------------------------------
  754. void OnCmEditCreblock() 
  755. {
  756.   vlExecute( VC_EDIT_CREBLOCK );
  757. }
  758. //-----------------------------------------------
  759. void OnCmEditErase() 
  760. {
  761.   vlExecute( VC_EDIT_ERASE );
  762. }
  763. //-----------------------------------------------
  764. void OnCmEditExplode() 
  765. {
  766.   vlExecute( VC_EDIT_EXPLODE );
  767. }
  768. //-----------------------------------------------
  769. void OnCmEditExtend() 
  770. {
  771.   vlExecute( VC_EDIT_EXTEND );
  772. }
  773. //-----------------------------------------------
  774. void OnCmEditFillet() 
  775. {
  776.   vlExecute( VC_EDIT_FILLET );
  777. }
  778. //-----------------------------------------------
  779. void OnCmEditMirror() 
  780. {
  781.   vlExecute( VC_EDIT_MIRROR );
  782. }
  783. //-----------------------------------------------
  784. void OnCmEditMove() 
  785. {
  786.   vlExecute( VC_EDIT_MOVE );
  787. }
  788. //-----------------------------------------------
  789. void OnCmEditRotate() 
  790. {
  791.   vlExecute( VC_EDIT_ROTATE );
  792. }
  793.  
  794.  
  795. //***********************************************
  796. void OnCmPrint() 
  797. {
  798.   vlExecute( VC_PRINT );
  799. }
  800. //-----------------------------------------------
  801. void OnCmReset()
  802. {
  803.   vlExecute( VC_RESET );
  804. }
  805. //-----------------------------------------------
  806. void OnCmLineWidth()
  807. {
  808.   vlExecute( VC_SHOWLINEW );
  809. }
  810.  
  811.  
  812. //***********************************************
  813. void OnCmDrawLine() 
  814. {
  815.   vlExecute( VC_DRAW_LINE );    
  816. }
  817. //-----------------------------------------------
  818. void OnCmDrawPolyline() 
  819. {
  820.   vlExecute( VC_DRAW_POLYLINE );    
  821. }
  822. //-----------------------------------------------
  823. void OnCmDrawSpline() 
  824. {
  825.   vlExecute( VC_DRAW_SPLINE );    
  826. }
  827. //-----------------------------------------------
  828. void OnCmDrawPoint() 
  829. {
  830.   vlExecute( VC_DRAW_POINT );
  831. }
  832. //-----------------------------------------------
  833. void OnCmDrawCircCR() 
  834. {
  835.   vlExecute( VC_DRAW_CIRC_CR );
  836. }
  837. //-----------------------------------------------
  838. void OnCmDrawCircCD() 
  839. {
  840.   vlExecute( VC_DRAW_CIRC_CD );
  841. }
  842. //-----------------------------------------------
  843. void OnCmDrawCirc2P() 
  844. {
  845.   vlExecute( VC_DRAW_CIRC_2P );
  846. }
  847. //-----------------------------------------------
  848. void OnCmDrawCirc3P() 
  849. {
  850.   vlExecute( VC_DRAW_CIRC_3P );
  851. }
  852. //-----------------------------------------------
  853. void OnCmDrawArcCSE()
  854. {
  855.   vlExecute( VC_DRAW_ARC_CSE );
  856. }
  857. //-----------------------------------------------
  858. void OnCmDrawArcSEM()
  859. {
  860.   vlExecute( VC_DRAW_ARC_SEM );
  861. }
  862. //-----------------------------------------------
  863. void OnCmDrawArcSME()
  864. {
  865.   vlExecute( VC_DRAW_ARC_SME );
  866. }
  867. //-----------------------------------------------
  868. void OnCmDrawEllipse() 
  869. {
  870.   vlExecute( VC_DRAW_ELLIPSE );
  871. }
  872. //-----------------------------------------------
  873. void OnCmDrawRect() 
  874. {
  875.   vlExecute( VC_DRAW_RECT );
  876. }
  877. //-----------------------------------------------
  878. void OnCmDrawHatch() 
  879. {
  880.   vlExecute( VC_DRAW_HATCH );
  881. }
  882. //-----------------------------------------------
  883. void OnCmDrawDimHor()
  884. {
  885.   vlExecute( VC_DRAW_DIM_HOR );
  886. }
  887. //-----------------------------------------------
  888. void OnCmDrawDimVer()
  889. {
  890.   vlExecute( VC_DRAW_DIM_VER );
  891. }
  892. //-----------------------------------------------
  893. void OnCmDrawDimPar()
  894. {
  895.   vlExecute( VC_DRAW_DIM_PAR );
  896. }
  897. //-----------------------------------------------
  898. void OnCmDrawDimAng()
  899. {
  900.   vlExecute( VC_DRAW_DIM_ANG );
  901. }
  902. //-----------------------------------------------
  903. void OnCmDrawDimRad()
  904. {
  905.   vlExecute( VC_DRAW_DIM_RAD );
  906. }
  907. //-----------------------------------------------
  908. void OnCmDrawDimDiam()
  909. {
  910.   vlExecute( VC_DRAW_DIM_DIAM );
  911. }
  912. //-----------------------------------------------
  913. void OnCmDrawDimOrd()
  914. {
  915.   vlExecute( VC_DRAW_DIM_ORD );
  916. }
  917. //-----------------------------------------------
  918. void OnCmInsText() 
  919. {
  920.   vlExecute( VC_INS_TEXT );    
  921. }
  922. //-----------------------------------------------
  923. void OnCmInsSymbol() 
  924. {
  925.   vlExecute( VC_INS_SYMBOL );    
  926. }
  927. //-----------------------------------------------
  928. void OnCmInsBlock() 
  929. {
  930.   vlExecute( VC_INS_BLOCK );
  931. }
  932. //-----------------------------------------------
  933. void OnCmInsImage() 
  934. {
  935.   vlExecute( VC_INS_IMAGE );
  936. }
  937. //-----------------------------------------------
  938. void OnCmInsRMap() 
  939. {
  940.   vlExecute( VC_INS_RMAP );
  941. }
  942.  
  943.  
  944. //***********************************************
  945. void OnCmFmtBlock() 
  946. {
  947.   vlExecute( VC_FMT_BLOCK );
  948. }
  949. //-----------------------------------------------
  950. void OnCmFmtLayer() 
  951. {
  952.   vlExecute( VC_FMT_LAYER );
  953. }
  954. //-----------------------------------------------
  955. void OnCmFmtPage() 
  956. {
  957.   vlExecute( VC_FMT_PAGE );
  958. }
  959. //-----------------------------------------------
  960. void OnCmFmtStdim() 
  961. {
  962.   vlExecute( VC_FMT_STDIM );
  963. }
  964. //-----------------------------------------------
  965. void OnCmFmtSthatch() 
  966. {
  967.   vlExecute( VC_FMT_STHATCH );
  968. }
  969. //-----------------------------------------------
  970. void OnCmFmtStline() 
  971. {
  972.   vlExecute( VC_FMT_STLINE );
  973. }
  974. //-----------------------------------------------
  975. void OnCmFmtStpoint() 
  976. {
  977.   vlExecute( VC_FMT_STPOINT );
  978. }
  979. //-----------------------------------------------
  980. void OnCmFmtSttext() 
  981. {
  982.   vlExecute( VC_FMT_STTEXT );
  983. }
  984. //-----------------------------------------------
  985. void OnCmFmtLayout() 
  986. {
  987.   vlExecute( VC_FMT_LAYOUT );
  988. }
  989. //-----------------------------------------------
  990. void OnCmFmtOsnap() 
  991. {
  992.   vlExecute( VC_FMT_OSNAP );
  993. }
  994. //-----------------------------------------------
  995. void OnCmFmtGrid() 
  996. {
  997.   vlExecute( VC_FMT_GRID );
  998. }
  999. //-----------------------------------------------
  1000. void OnCmFmtPsnap() 
  1001. {
  1002.   vlExecute( VC_FMT_PSNAP );
  1003. }
  1004. //-----------------------------------------------
  1005. void OnCmFmtUnits() 
  1006. {
  1007.   vlExecute( VC_FMT_UNITS );
  1008. }
  1009. //-----------------------------------------------
  1010. void OnCmFmtPrivate() 
  1011. {
  1012.   vlExecute( VC_FMT_PRIVATE );
  1013. }
  1014. //-----------------------------------------------
  1015. void OnCmFmtPrefers() 
  1016. {
  1017.   vlExecute( VC_FMT_PREFERS );
  1018. }
  1019.  
  1020.  
  1021. //***********************************************
  1022. void OnCmToolDist() 
  1023. {
  1024.   vlExecute( VC_TOOL_DIST );
  1025. }
  1026. //-----------------------------------------------
  1027. void OnCmToolPrnRect() 
  1028. {
  1029.   vlExecute( VC_TOOL_PRNRECT );
  1030. }
  1031. //-----------------------------------------------
  1032. void OnCmToolStat() 
  1033. {
  1034.   vlExecute( VC_TOOL_STAT );
  1035. }
  1036.  
  1037.  
  1038.  
  1039. //*******************************************************************
  1040. static bool OnCommand (HWND hWnd, int Cmd)
  1041. {
  1042.   bool ret = true;
  1043.   switch( Cmd ){
  1044.     case CM_FILE_NEW:  OnCmFileNew();  break;
  1045.     case CM_FILE_OPEN: OnCmFileOpen(); break;
  1046.     case CM_MRU_01: OnMru01(); break;
  1047.     case CM_MRU_02: OnMru02(); break;
  1048.     case CM_MRU_03: OnMru03(); break;
  1049.     case CM_MRU_04: OnMru04(); break;
  1050.     case CM_MRU_05: OnMru05(); break;
  1051.     case CM_MRU_06: OnMru06(); break;
  1052.     case CM_MRU_07: OnMru07(); break;
  1053.     case CM_MRU_08: OnMru08(); break;
  1054.     case CM_MRU_09: OnMru09(); break;
  1055.     case CM_MRU_11: OnMru11(); break;
  1056.     case CM_MRU_10: OnMru10(); break;
  1057.     case CM_APP_01: OnExtApp01(); break;
  1058.     case CM_APP_02: OnExtApp02(); break;
  1059.     case CM_APP_03: OnExtApp03(); break;
  1060.     case CM_APP_04: OnExtApp04(); break;
  1061.     case CM_APP_05: OnExtApp05(); break;
  1062.     case CM_APP_06: OnExtApp06(); break;
  1063.     case CM_APP_07: OnExtApp07(); break;
  1064.     case CM_APP_08: OnExtApp08(); break;
  1065.     case CM_APP_EXIT:  PostMessage(hWnd,WM_CLOSE,0,0); break;
  1066.     case CM_APP_ABOUT: 
  1067.       DlgAbout(hWnd); 
  1068.       break;
  1069.  
  1070.     case VC_FILE_SAVE:      OnCmFileSave(); break;
  1071.     case VC_FILE_CLOSE:     OnCmFileClose(); break;
  1072.     case VC_FILE_CLOSEALL:  OnCmFileCloseAll(); break;
  1073.     case VC_FILE_LIST:      OnCmFileList(); break;
  1074.  
  1075.     case VC_FILE_SAVEAS: OnCmFileSaveAs(); break;
  1076.     case VC_IMPORT_DXF:  OnCmImportDxf(); break;
  1077.     case VC_IMPORT_VDF:  OnCmImportVdf(); break;
  1078.     case VC_EXPORT_DXF:  OnCmExportDxf(); break;
  1079.     case VC_EXPORT_HPGL: OnCmExportHpgl(); break;
  1080.     case VC_EXPORT_BMP:  OnCmExportBmp(); break;
  1081.  
  1082.     case VC_PRINT:      OnCmPrint(); break;
  1083.     case VC_RESET:      OnCmReset(); break;
  1084.     case VC_SHOWLINEW:  OnCmLineWidth(); break;
  1085.  
  1086.     case VC_ZOOM_ALL  : OnCmZoomAll(); break;
  1087.     case VC_ZOOM_WIN  : OnCmZoomWin(); break;
  1088.     case VC_ZOOM_IN   : OnCmZoomIn(); break;
  1089.     case VC_ZOOM_OUT  : OnCmZoomOut(); break;
  1090.     case VC_ZOOM_PAN  : OnCmZoomPan(); break;
  1091.     case VC_ZOOM_PAGE : OnCmZoomPage(); break;
  1092.     case VC_PAGE_FIRST: OnCmPageFirst(); break;
  1093.     case VC_PAGE_LAST : OnCmPageLast(); break;
  1094.     case VC_PAGE_PREV : OnCmPagePrev(); break;
  1095.     case VC_PAGE_NEXT : OnCmPageNext(); break;
  1096.     case VC_PAGE_DLG  : OnCmPageDlg(); break;
  1097.     case VC_VIEW_LIST : OnCmViewList(); break;
  1098.     case VC_VIEW_SAVE : OnCmViewSave(); break;
  1099.  
  1100.     case VC_EDIT_CBCUT   : OnCmEditCbCut(); break;
  1101.     case VC_EDIT_CBCOPY  : OnCmEditCbCopy(); break;
  1102.     case VC_EDIT_CBPASTE : OnCmEditCbPaste(); break;
  1103.     case VC_EDIT_ENTPROP : OnCmEditEntprop(); break;
  1104.     case VC_EDIT_REDO    : OnCmEditRedo(); break;
  1105.     case VC_EDIT_COPY    : OnCmEditCopy(); break;
  1106.     case VC_EDIT_UNDO    : OnCmEditUndo(); break;
  1107.     case VC_EDIT_TRIM    : OnCmEditTrim(); break;
  1108.     case VC_EDIT_SCALE   : OnCmEditScale(); break;
  1109.     case VC_EDIT_CREBLOCK: OnCmEditCreblock(); break;
  1110.     case VC_EDIT_ERASE   : OnCmEditErase(); break;
  1111.     case VC_EDIT_EXPLODE : OnCmEditExplode(); break;
  1112.     case VC_EDIT_EXTEND  : OnCmEditExtend(); break;
  1113.     case VC_EDIT_FILLET  : OnCmEditFillet(); break;
  1114.     case VC_EDIT_MIRROR  : OnCmEditMirror(); break;
  1115.     case VC_EDIT_MOVE    : OnCmEditMove(); break;
  1116.     case VC_EDIT_ROTATE  : OnCmEditRotate(); break;
  1117.  
  1118.     case VC_DRAW_LINE    : OnCmDrawLine(); break;
  1119.     case VC_DRAW_POLYLINE: OnCmDrawPolyline(); break;
  1120.     case VC_DRAW_SPLINE  : OnCmDrawSpline(); break;
  1121.     case VC_DRAW_POINT   : OnCmDrawPoint(); break;
  1122.     case VC_DRAW_CIRC_CR : OnCmDrawCircCR(); break;
  1123.     case VC_DRAW_CIRC_CD : OnCmDrawCircCD(); break;
  1124.     case VC_DRAW_CIRC_2P : OnCmDrawCirc2P(); break;
  1125.     case VC_DRAW_CIRC_3P : OnCmDrawCirc3P(); break;
  1126.     case VC_DRAW_ARC_CSE : OnCmDrawArcCSE(); break;
  1127.     case VC_DRAW_ARC_SEM : OnCmDrawArcSEM(); break;
  1128.     case VC_DRAW_ARC_SME : OnCmDrawArcSME(); break;
  1129.     case VC_DRAW_ELLIPSE : OnCmDrawEllipse(); break;
  1130.     case VC_DRAW_RECT    : OnCmDrawRect(); break;
  1131.     case VC_DRAW_HATCH   : OnCmDrawHatch(); break;
  1132.     case VC_DRAW_DIM_HOR : OnCmDrawDimHor(); break;
  1133.     case VC_DRAW_DIM_VER : OnCmDrawDimVer(); break;
  1134.     case VC_DRAW_DIM_PAR : OnCmDrawDimPar(); break;
  1135.     case VC_DRAW_DIM_ANG : OnCmDrawDimAng(); break;
  1136.     case VC_DRAW_DIM_RAD : OnCmDrawDimRad(); break;
  1137.     case VC_DRAW_DIM_DIAM: OnCmDrawDimDiam(); break;
  1138.     case VC_DRAW_DIM_ORD : OnCmDrawDimOrd(); break;
  1139.     case VC_INS_TEXT     : OnCmInsText(); break;
  1140.     case VC_INS_SYMBOL   : OnCmInsSymbol(); break;
  1141.     case VC_INS_BLOCK    : OnCmInsBlock(); break;
  1142.     case VC_INS_IMAGE    : OnCmInsImage(); break;
  1143.     case VC_INS_RMAP     : OnCmInsRMap(); break;
  1144.  
  1145.     case VC_FMT_BLOCK  : OnCmFmtBlock(); break;
  1146.     case VC_FMT_LAYER  : OnCmFmtLayer(); break;
  1147.     case VC_FMT_PAGE   : OnCmFmtPage(); break;
  1148.     case VC_FMT_STDIM  : OnCmFmtStdim(); break;
  1149.     case VC_FMT_STHATCH: OnCmFmtSthatch(); break;
  1150.     case VC_FMT_STLINE : OnCmFmtStline(); break;
  1151.     case VC_FMT_STPOINT: OnCmFmtStpoint(); break;
  1152.     case VC_FMT_STTEXT : OnCmFmtSttext(); break;
  1153.     case VC_FMT_LAYOUT : OnCmFmtLayout(); break;
  1154.     case VC_FMT_OSNAP  : OnCmFmtOsnap(); break;
  1155.     case VC_FMT_GRID   : OnCmFmtGrid(); break;
  1156.     case VC_FMT_PSNAP  : OnCmFmtPsnap(); break;
  1157.     case VC_FMT_UNITS  : OnCmFmtUnits(); break;
  1158.     case VC_FMT_PRIVATE: OnCmFmtPrivate(); break;
  1159.     case VC_FMT_PREFERS: OnCmFmtPrefers(); break;
  1160.  
  1161.     case VC_TOOL_DIST   : OnCmToolDist(); break;
  1162.     case VC_TOOL_PRNRECT: OnCmToolPrnRect(); break;
  1163.     case VC_TOOL_STAT   : OnCmToolStat(); break; 
  1164.     
  1165.     default:
  1166.       ret = false;
  1167.   }
  1168.   return ret;
  1169. }
  1170.  
  1171.  
  1172.  
  1173. /*
  1174. // Mesage handler for about box.
  1175. LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  1176. {
  1177.   switch (message)
  1178.   {
  1179.     case WM_INITDIALOG:
  1180.       return TRUE;
  1181.  
  1182.     case WM_COMMAND:
  1183.       if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
  1184.       {
  1185.         EndDialog(hDlg, LOWORD(wParam));
  1186.         return TRUE;
  1187.       }
  1188.       break;
  1189.   }
  1190.   return FALSE;
  1191. }
  1192. */
  1193.  
  1194.  
  1195.