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