📄 gwsim.c
字号:
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 + -