⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gwsim.c

📁 GESPI 2.0动态系统模拟工具  
💻 C
📖 第 1 页 / 共 2 页
字号:
    MessageBeep( MB_ICONEXCLAMATION );
    MessageBox(NULL, szString, NULL, MB_ICONEXCLAMATION);
    InvalidateRect( hWnd, NULL, TRUE );
    clear_all( hWnd );
    /* SEND MESSAGE TO CLEAR_ALL!!!!!*/
   }
   break;

  case WM_USER+2:
   SimEnd();
   break;

  case WM_COMMAND:
   switch (wParam)
   {
    case IDA_F1HELP:
    case IDM_H_CONTENTS:
   	 WinHelp( hWnd, (LPSTR) szHelpFile, HELP_INDEX, 0 );
   	 break;

    case IDM_H_SEARCH:
   	 WinHelp( hWnd, (LPSTR) szHelpFile, HELP_PARTIALKEY, (DWORD) (LPSTR) "" );
   	 break;

    case IDM_H_HELPONHELP:
   	 WinHelp( hWnd, (LPSTR) szHelpFile, HELP_HELPONHELP, 0 );
   	 break;

    case IDM_H_ABOUT:
     lpfnProc = MakeProcInstance((FARPROC)AboutBox, hInst);
     DialogBox(hInst, (LPSTR)"ABOUTBOX", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     break;

    case IDC_BUTTON1:
     GetModuleFileName( hInst, (LPSTR) szASTR, sizeof( szASTR ) );
     ptr = strrchr( szASTR, '\\' );
     *(ptr+1) = '\0';
     strcat( szASTR, "GWTOP.EXE" );
   	 nRc = WinExec( (LPSTR) szASTR, SW_SHOWNORMAL );
   	 ErrorHandler( hInst, nRc );
     break;

    case IDM_F_OPEN:
     if( notsaved )
      AskAboutSave( hWnd, hInst, FileName, MB_ICONQUESTION | MB_YESNO );
     if( GetOFileName( hWnd,
       				  (LPSTR) FileName, 256,
      				  (LPSTR) "Load Simulation File",
       				  (LPSTR) "simulation (*.SIM)\0*.SIM\0" ) )
	  SendMessage( hWnd, WM_USER+1, 0, (DWORD) 0 );
     break;

    case IDM_F_CLOSE:
     SendMessage( hWnd, WM_CLOSE, 0, 0 );
     break;

    case IDM_F_SAVE:
     WriteSim( FileName );
     notsaved = 0;
     break;

    case IDM_F_SAVEAS:
     _fstrcpy( (LPSTR) tmpFile, (LPSTR) FileName );
     if( GetSFileName( hWnd,
       				  (LPSTR) tmpFile, sizeof( tmpFile ),
      				  (LPSTR) "Save Simulation File",
       				  (LPSTR) "simulation (*.SIM)\0*.SIM\0" ) )
     {
      _fstrcpy( (LPSTR) FileName, (LPSTR) tmpFile );
      if( !(nRc = WriteSim( FileName ) ) )
      {
       GetFileTitle( (LPSTR) FileName, (LPSTR) FileTitle, sizeof(FileTitle) );
       EnableMenuItem( hMenu, IDM_GO, MF_ENABLED );
       EnableWindow( hButton2, TRUE );
       EnableMenuItem( hMenu, IDM_F_SAVE , MF_ENABLED );
       DrawMenuBar( hWnd );
       wsprintf( (LPSTR) szASTR, "GEPASI - %s", (LPSTR) FileTitle );
       SendMessage( hWnd, WM_SETTEXT, 0, (DWORD) (LPSTR) szASTR );
       notsaved = 0;
       InvalidateRect( hWnd, NULL, TRUE );
      }
     }
     break;

    case IDM_F_NEW:
     if( notsaved )
      nRc = AskAboutSave( hWnd, hInst, FileName, MB_ICONQUESTION | MB_YESNOCANCEL );
     if( nRc == IDCANCEL ) return TRUE;
     if( GetOFileName( hWnd,
       				  (LPSTR) TopFile, sizeof( TopFile ),
      				  (LPSTR) "Load Topology File",
       				  (LPSTR) "topology (*.TOP)\0*.TOP\0" ) )
     {
      clear_all( hWnd );
      FileName[0] = '\0';
      FileTitle[0] = '\0';
      DatName[0] = '\0';
      DatTitle[0] = '\0';
      if( nRc = TopIn( TopFile ) )
      {
       /* kill the timer (it will fail if one is not active)		*/
       KillTimer( hWnd, TimerId );
       clear_all( hWnd );
       LoadString(hInst, nRc, szString, sizeof(szString));
       MessageBeep( MB_ICONEXCLAMATION );
       MessageBox(NULL, szString, NULL, MB_ICONEXCLAMATION);
       InvalidateRect( hWnd, NULL, TRUE );
       break;
      }
      else
      {
       notsaved = 0;
       /* get the filename without the path						*/
       GetFileTitle( (LPSTR) TopFile, (LPSTR) TopTitle, sizeof(FileTitle) );
       /* setup the filename for the dat file			*/
       _getcwd( DatName, sizeof(DatName) );
       lstrcat( (LPSTR) DatName, (LPSTR) "\\RESULTS.DAT" );
       GetFileTitle( (LPSTR) DatName, (LPSTR) DatTitle, sizeof(DatTitle) );
       EnableMenuItem( hMenu, IDM_F_SAVE , MF_GRAYED );
       EnableMenuItem( hMenu, IDM_F_SAVEAS , MF_ENABLED );
       EnableMenuItem( hMenu, IDM_E_METABOLITES , MF_ENABLED );
       EnableMenuItem( hMenu, IDM_E_KINETICS , MF_ENABLED );
       EnableMenuItem( hMenu, IDM_O_TASKS, MF_ENABLED );
       EnableMenuItem( hMenu, IDM_O_UNITS, MF_ENABLED );
       EnableMenuItem( hMenu, IDM_GO, MF_ENABLED );
       EnableMenuItem( hMenu, IDM_PLOT, MF_ENABLED );
       EnableWindow( hButton2, TRUE );
       wsprintf( (LPSTR) szASTR, "GEPASI - Simulation" );
       SendMessage( hWnd, WM_SETTEXT, 0, (DWORD) (LPSTR) szASTR );
       if( options.dat ) EnableMenuItem( hMenu, IDM_O_OUTPUT, MF_ENABLED );
       if( options.txt ) EnableMenuItem( hMenu, IDM_O_REPORT, MF_ENABLED );
       switch( options.scan )
       {
        case 0: SendMessage( hWnd, WM_COMMAND, IDM_S_NONE, 0 ); break;
        case 1: SendMessage( hWnd, WM_COMMAND, IDM_S_GRID, 0 ); break;
        case 2: SendMessage( hWnd, WM_COMMAND, IDM_S_FILL, 0 ); break;
       }
       DrawMenuBar( hWnd );
       InvalidateRect( hWnd, NULL, TRUE );
       break;
      }
     }
     break;

    case IDM_E_METABOLITES:
     lpfnProc = MakeProcInstance((FARPROC)EdConc, hInst);
     DialogBox(hInst, (LPSTR)"ED_CONC", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_E_KINETICS:
     lpfnProc = MakeProcInstance((FARPROC) EdKConst, hInst);
     DialogBox(hInst, (LPSTR)"ED_CONST", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_E_CLEAR:
     conc_dft();
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_O_TASKS:
     lpfnProc = MakeProcInstance((FARPROC) EdOTask, hInst);
     DialogBox(hInst, (LPSTR)"TASK_OPT", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     if( options.dat ) EnableMenuItem( hMenu, IDM_O_OUTPUT, MF_ENABLED );
     else EnableMenuItem( hMenu, IDM_O_OUTPUT, MF_GRAYED );
     if( options.txt ) EnableMenuItem( hMenu, IDM_O_REPORT, MF_ENABLED );
     else EnableMenuItem( hMenu, IDM_O_REPORT, MF_GRAYED );
     if( !(options.dyn || options.ss) )
     {
      EnableMenuItem( hMenu, IDM_O_OUTPUT, MF_GRAYED );
      EnableMenuItem( hMenu, IDM_O_REPORT, MF_GRAYED );
      EnableMenuItem( hMenu, IDM_GO, MF_GRAYED );
      EnableWindow( hButton2, FALSE );
     }
     DrawMenuBar( hWnd );
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_O_UNITS:
     lpfnProc = MakeProcInstance((FARPROC) EdOUnits, hInst);
     DialogBox(hInst, (LPSTR)"ED_UNITS", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_O_REPORT:
     lpfnProc = MakeProcInstance((FARPROC) EdReport, hInst);
     DialogBox(hInst, (LPSTR)"REP_OPT", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_O_OUTPUT:
     lpfnProc = MakeProcInstance((FARPROC) EdDat, hInst);
     nRc = DialogBox(hInst, (LPSTR)"DAT_OPT", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     if( nRc == IDOK )
      /* kill the timer (it will fail if one is not active)		*/
      KillTimer( hWnd, TimerId );
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_O_METHODS:
     lpfnProc = MakeProcInstance((FARPROC) EdNumer, hInst);
     DialogBox(hInst, (LPSTR)"NUM_OPT", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_S_LINKS:
     lpfnProc = MakeProcInstance((FARPROC) Links, hInst);
     DialogBox(hInst, (LPSTR)"LINKS", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_S_PARAM:
     lpfnProc = MakeProcInstance((FARPROC) EdScanP, hInst);
     DialogBox(hInst, (LPSTR)"ED_SCANP", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_S_BOUND:
     lpfnProc = MakeProcInstance((FARPROC) EdScanB, hInst);
     DialogBox(hInst, (LPSTR)"ED_SCANB", hWnd, lpfnProc);
     FreeProcInstance(lpfnProc);
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_S_NONE:
     CheckMenuItem( hMenu, IDM_S_NONE, MF_CHECKED );
     CheckMenuItem( hMenu, IDM_S_GRID, MF_UNCHECKED );
     CheckMenuItem( hMenu, IDM_S_FILL, MF_UNCHECKED );
     EnableMenuItem( hMenu, IDM_S_PARAM, MF_GRAYED );
     EnableMenuItem( hMenu, IDM_S_BOUND, MF_GRAYED );
     EnableMenuItem( hMenu, IDM_S_LINKS, MF_GRAYED );
     DrawMenuBar( hWnd );
     options.scan = 0;
     notsaved = 0;
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_S_GRID:
     CheckMenuItem( hMenu, IDM_S_NONE, MF_UNCHECKED );
     CheckMenuItem( hMenu, IDM_S_GRID, MF_CHECKED );
     CheckMenuItem( hMenu, IDM_S_FILL, MF_UNCHECKED );
     EnableMenuItem( hMenu, IDM_S_PARAM, MF_ENABLED );
     EnableMenuItem( hMenu, IDM_S_BOUND, MF_ENABLED );
     EnableMenuItem( hMenu, IDM_S_LINKS, MF_ENABLED );
     DrawMenuBar( hWnd );
     options.scan = 1;
     notsaved = 0;
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_S_FILL:
     CheckMenuItem( hMenu, IDM_S_NONE, MF_UNCHECKED );
     CheckMenuItem( hMenu, IDM_S_GRID, MF_UNCHECKED );
     CheckMenuItem( hMenu, IDM_S_FILL, MF_CHECKED );
     EnableMenuItem( hMenu, IDM_S_PARAM, MF_ENABLED );
     EnableMenuItem( hMenu, IDM_S_BOUND, MF_ENABLED );
     EnableMenuItem( hMenu, IDM_S_LINKS, MF_ENABLED );
     DrawMenuBar( hWnd );
     options.scan = 2;
     notsaved = 0;
     InvalidateRect( hWnd, NULL, TRUE );
     break;

    case IDM_PLOT:
     if(*GnuplotExe)
     {
      lpfnProc = MakeProcInstance((FARPROC) Plot, hInst);
      nRc = DialogBox(hInst, (LPSTR)"ED_PLOT", hWnd, lpfnProc);
      FreeProcInstance(lpfnProc);
      if( nRc==IDOK ) GnuPlot( hWnd );
/*      else
       if( nRc!=IDCANCEL )
       {
        LoadString(hInst, IDS_ERR_NO_GNUPLOT, szString, sizeof(szString));
        MessageBeep( MB_ICONEXCLAMATION );
        MessageBox( hWnd, szString, (LPSTR) "Error", MB_ICONEXCLAMATION );
       }*/
     }
     else
     {
      LoadString(hInst, IDS_INF_GNUPLOT, szString, sizeof(szString));
      MessageBeep( MB_ICONQUESTION );
      nRc = MessageBox( hWnd, szString, (LPSTR) "Link GNUPLOT with GEPASI", MB_ICONINFORMATION | MB_OKCANCEL );
      if( nRc==IDOK )
      if( GetOFileName( hWnd,
       				    (LPSTR) GnuplotExe, sizeof( GnuplotExe ),
      				    (LPSTR) "Gnuplot Path",
       				    (LPSTR) "executable (*.exe)\0*.exe\0"
       				  )
        )
       WritePrivateProfileString( (LPSTR) "Gnuplot",
                                  (LPSTR) "Path",
                                  (LPSTR) GnuplotExe,
                                  (LPSTR) GepasiIni
                                );
     }
     break;

    case IDC_BUTTON2:
    case IDM_GO:
     if( notsaved )
      SendMessage( hWnd, WM_COMMAND, FileName[0] ? IDM_F_SAVE : IDM_F_SAVEAS, 0 );
     Execute( hWnd, hInst );
     break;

    default:
     return DefWindowProc(hWnd, Message, wParam, lParam);
   }
   break;        /* End of WM_COMMAND                             */

  default:
   return DefWindowProc(hWnd, Message, wParam, lParam);
 }
 return 0L;
}     /* End of WndProc                                         */


/*
  ABOUTMsgProc - About dialog box procedure
*/

BOOL FAR PASCAL AboutBox(HWND hWndDlg, WORD Message, WORD wParam, LONG lParam)
{
 switch(Message)
 {
  case WM_INITDIALOG:
   SendDlgItemMessage( hWndDlg, IDSTAT_2, WM_SETTEXT, 0, (DWORD) (LPSTR) VERSION );
   break;

  case WM_CLOSE:
   /* Closing the Dialog behaves the same as Cancel               */
   PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
   break;

  case WM_COMMAND:
   if( wParam == IDOK || wParam == IDCANCEL )
   EndDialog(hWndDlg, FALSE);
   break;

  default:
   return FALSE;
 }
 return TRUE;
}


/************************************************************************/
/*                                                                      */
/* RegisterClasses Function                                          */
/*                                                                      */
/* The following function registers all the classes of all the windows  */
/* associated with this application. The function returns an error code */
/* if unsuccessful, otherwise it returns 0.                             */
/*                                                                      */
/************************************************************************/

int RegisterClasses(void)
{
 WNDCLASS   wndclass;    /* struct to define a window class             */

 memset(&wndclass, 0x00, sizeof(WNDCLASS));
 /* load WNDCLASS with window's characteristics                         */
 wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNWINDOW;
 wndclass.lpfnWndProc = WndProc;
 /* Extra storage for Class and Window objects                          */
 wndclass.cbClsExtra = 0;
 wndclass.cbWndExtra = 0;
 wndclass.hInstance = hInst;
 wndclass.hIcon = LoadIcon(hInst,"GWSIM");
 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 /* Create brush for erasing background                                 */
 wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
 wndclass.lpszMenuName = szAppName;   /* Menu Name is App Name			*/
 wndclass.lpszClassName = szAppName;  /* Class Name is App Name			*/
 if(!RegisterClass(&wndclass))
   return -1;
 return(0);
} /* End of RegisterClasses                      	                    */

void DeleteTmp( void )
{
 OFSTRUCT OfStruct;
 LPSTR p1, p2;

 p1 = TmpFiles;
 for(;;)
 {
  p2 = _fstrchr( p1, '+' );
  if( p2==NULL ) return;
  *p2 = '\0';
  OpenFile( p1, &OfStruct, OF_DELETE );
  p1 = p2+1;
 }
}

void CleanUp( HWND hWnd, HANDLE hPrevInstance )
{
 if(!hPrevInstance) UnregisterClass(szAppName, hInst);
 DeleteTmp();
 TidyGepasiVar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -