📄 conduct.cpp
字号:
#include <afxcoll.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <dos.h>
#include <bios.h>
#include <time.h>
#include <stddef.h>
#include <stdlib.h>
#include <malloc.h>
#include <graph.h>
#include <memory.h>
#include <vmemory.h>
#include <direct.h>
#include <string.h>
#include <math.h>
#include <sys\stat.h>
#include "common.h"
#include "support.h"
#include "mainGUI.h"
#include "dialog.h"
#include "helper.h"
#include "conduct.h"
#include "resource.h"
#include "conduct.rc"
#define MIN_VIRTMEM_INKB 64
#define MAX_VIRTMEM_INKB 128
extern POPUPMENUITEM PopupMenuItem[];
extern ACCELTAB AccelTab[];
extern NORMALMENUITEM NormalMenuItem[];
extern "C" {
extern struct _videoconfig vc;
}
const char szMainCaption[]="压电元件阻抗导纳圆的测量";
const char szMsgCaption[]="压电元件阻抗导纳圆的测量";
int iWorkDrive;
char szWorkDir[_MAX_PATH + 1];
#define MAX_POINT_NR 25
#define PI 3.1415926
int nPt = 0,n;
char sn[10],snin[10];
double R,Rin;
double dF[MAX_POINT_NR];
double dU[MAX_POINT_NR];
double dUI[MAX_POINT_NR];
double dTau[MAX_POINT_NR];
double F[MAX_POINT_NR];
double U[MAX_POINT_NR];
double UI[MAX_POINT_NR];
double Tau[MAX_POINT_NR];
double dG[MAX_POINT_NR];
double dB[MAX_POINT_NR];
double dY[MAX_POINT_NR];
double G0, B0, r, DELTA;
double SG0, SB0, Sy, Sr, SDELTA;
double f1, f2, fs;
double R1,L1,C1,C0,Qm;
int Gmax = 0;
int flag, cflag, fflag, tflag;
int sflag = TRUE;
int G,B;
void Compute();
void GraphicOutput(PGUIINFO);
void WipeFalse();
/*
* Function: void GUIAPI InitRes( void );
* This Function Initialize resources, such as
* dialog, message box, status bar.
* For diffrent application the function must diffrent.
* Parameters:
* None.
* Return:
* None.
*/
BOOL GUIAPI InitRes( void )
{
// Initialize Menu
PopupMenuItem[0].pNormalMenuItem = &(NormalMenuItem[0]);
PopupMenuItem[1].pNormalMenuItem = &(NormalMenuItem[6]);
PopupMenuItem[2].pNormalMenuItem = &(NormalMenuItem[10]);
PopupMenuItem[3].pNormalMenuItem = &(NormalMenuItem[12]);
InitDialogRes(&EditDlgHeader, EditCtrlData);
InitDialogRes(&InputDlgHeader, InputData);
InitDialogRes(&PasswordHeader, Password);
return TRUE;
}
void FAR TerminateConduct( void )
{
TerminateGUI();
_vheapterm();
exit(1);
}
BOOL FAR ReinitGUI(PGUIINFO pGUIInfo)
{
InitVirtualMemory(MIN_VIRTMEM_INKB, MAX_VIRTMEM_INKB);
_chdrive(iWorkDrive);
_chdir(szWorkDir);
if(!InitGUI())
{
if(pGUIInfo)
{
PostMessage(pGUIInfo, MSG_DESTROY, TRUE, 0L);
return FALSE;
}
}
if(pGUIInfo)
{
PostMessage(pGUIInfo, MSG_NCPAINT, 0, 0L);
PostMessage(pGUIInfo, MSG_ERASEBKGND, (WPARAM)(&pGUIInfo->dc.clientrect), 0L);
}
return TRUE;
}
int BkColor;
int FgColor;
void main(int argc, char *argv[ ], char *envp[ ])
{
if (argc == 3) {
BkColor = atoi (argv[1]);
FgColor = atoi (argv[2]);
}
else {
BkColor = 0;
FgColor = 15;
}
// See if is running
if(!InitVirtualMemory(MIN_VIRTMEM_INKB, MAX_VIRTMEM_INKB))
{
exit(1);
}
// Initialize GUI.
if(!InitGUI())
TerminateConduct();
// Get work drive and directory.
iWorkDrive = _getdrive();
_getcwd(szWorkDir, _MAX_PATH);
// Initialize resources.
if(!InitRes())
{
printf( "Resource files were damaged! Can not run this file. \n" );
TerminateConduct();
}
ConductMain();
}
BOOL FAR ConductMain( void )
{
PGUIINFO pGUIInfo;
MSG msg;
// Create the main graphics user interface,
// that include drawing menu, client area and creating status bar etc.
pGUIInfo = CreateMainGUI(szMainCaption,
PopupMenuItem,
AccelTab,
ConductMainGUIProc);
if(pGUIInfo == NULL)
{
MessageBox(NULL, "出现致命错误,不能运行此程序", szMsgCaption, MB_OK | MB_ICONEXCLAMATION);
TerminateConduct();
}
SetSBFrameNumber(4);
do
{
if(GetMessageFromQueue(pGUIInfo, &msg))
{
if(msg.uMsg == MSG_QUIT)
break;
TranslateAccelerator(pGUIInfo, &msg);
DisptchMessage(pGUIInfo, &msg);
}
else
{
GetMessage(&msg);
PreProcMessage(pGUIInfo, &msg, FALSE);
}
}while(TRUE);
TerminateConduct();
return FALSE;
}
int FAR InputBoxProc( PDLGHEADER pDlgHeader, UINT uAction, WORD wID, LONG lParam )
{
static int iIndex;
int i;
char szBuff[20];
switch(uAction)
{
case INITDIALOG:
iIndex = (int) lParam;
sprintf(szBuff, "%g", F[iIndex]);
SetEditBoxText(pDlgHeader, IDC_FINPUT, szBuff);
sprintf(szBuff, "%g", U[iIndex]);
SetEditBoxText(pDlgHeader, IDC_UINPUT, szBuff);
sprintf(szBuff, "%g", UI[iIndex]);
SetEditBoxText(pDlgHeader, IDC_UIINPUT, szBuff);
sprintf(szBuff, "%g", Tau[iIndex]);
SetEditBoxText(pDlgHeader, IDC_TAUINPUT, szBuff);
return DEFAULT;
case DRAWTEXT:
if( wID == IDC_POINTNR)
{
sprintf(szBuff,"第%d点",iIndex+1);
cc_printf(szBuff,((PCTRLDATA)lParam)->lx, ((PCTRLDATA)lParam)->ty);
return OWNER;
}
break;
case COMMAND:
switch(wID)
{
case IDCANCEL:
flag = FALSE;
return CLOSE;
case IDOK:
for(i=IDC_FINPUT; i<IDC_TAUINPUT; i++)
{
GetEditBoxText(pDlgHeader, i, szBuff, 10);
if (strlen ( szBuff ) == 0)
{
MessageBox(NULL,"呵呵,此点输入有误!","错误信息",MB_OK);
return DEFAULT;
}
}
GetEditBoxText(pDlgHeader, IDC_UINPUT, szBuff, 10);
if (atof(szBuff) == 0)
{
MessageBox(NULL,"U不能为零!","错误信息",MB_OK);
return DEFAULT;
}
U[iIndex] = atof(szBuff);
GetEditBoxText(pDlgHeader, IDC_UIINPUT, szBuff, 10);
UI[iIndex] = atof(szBuff);
GetEditBoxText(pDlgHeader, IDC_FINPUT, szBuff, 10);
F[iIndex] = atof(szBuff);
GetEditBoxText(pDlgHeader, IDC_TAUINPUT, szBuff, 10);
Tau[iIndex] = atof(szBuff);
flag = TRUE;
return CLOSE;
default:
return DEFAULT;
}
break;
default:
return DEFAULT;
}
return DEFAULT;
}
int FAR PasswordProc(PDLGHEADER pDlgHeader, UINT uAction, WORD wID, LONG lParam )
{
char szBuff[20];
switch(uAction)
{
case COMMAND:
switch(wID)
{
case IDCANCEL:
tflag = FALSE;
return CLOSE;
case IDOK:
GetEditBoxText(pDlgHeader,IDC_PINPUT, szBuff, 10);
if(strcmp(szBuff,"abc") == 0)
tflag = TRUE;
else
MessageBox(NULL,"密码错误!","错误信息",MB_OK );
return CLOSE;
default:
return DEFAULT;
}
break;
default:
return DEFAULT;
}
return DEFAULT;
}
static void SortAndAddItems(PDLGHEADER pDlgHeader, WORD wID)
{
PCTRLDATA pCtrlData;
int i,j;
char szBuff[100];
double temp;
// sort here.
for(i = 0; i<n; i++)
for(j = 0; j<n - i - 1; j++)
{
if(Tau[j] > Tau[j+1])
{
temp = F[j]; F[j] = F[j+1]; F[j+1] = temp;
temp = U[j]; U[j] = U[j+1]; U[j+1] = temp;
temp = UI[j]; UI[j] = UI[j+1]; UI[j+1] = temp;
temp = Tau[j]; Tau[j] = Tau[j+1]; Tau[j+1] = temp;
}
}
// Release list box buffer first.
pCtrlData = GetControlData(pDlgHeader, wID);
ReleaseListBoxBuff(pCtrlData);
// add sorted items to the empty list box.
for(i = 0; i < n; i++)
{
sprintf(szBuff, "%2d %10.2f%10.2f%10.4f%10.2f", i + 1, F[i], U[i], UI[i], Tau[i]);
AddListBoxItem(pDlgHeader, wID, szBuff);
}
// Output to screen
FillListBox(pCtrlData);
}
int FAR EditBoxProc( PDLGHEADER pDlgHeader, UINT uAction, WORD wID, LONG lParam )
{
int i, iIndex;
char szBuff[100];
PCTRLDATA pCtrlData;
switch(uAction)
{
case INITDIALOG:
if(n == 0)
return DEFAULT;
SetEditBoxText(pDlgHeader, IDC_SN, snin);
sprintf(szBuff, "%g", Rin);
SetEditBoxText(pDlgHeader, IDC_R, szBuff);
for(i = 0; i < n; i++)
{
sprintf(szBuff, "%2d %10.2f%10.2f%10.4f%10.2f", i + 1, F[i], U[i], UI[i], Tau[i]);
AddListBoxItem(pDlgHeader, IDC_TABLE, szBuff);
}
return DEFAULT;
case COMMAND:
switch(wID)
{
case IDCANCEL:
return CLOSE;
case IDC_FINISH:
GetEditBoxText(&EditDlgHeader, IDC_SN, snin, 6);
if(strlen(snin) < 6)
{
MessageBox(NULL,"请输入正确学号","错误信息",MB_OK);
return DEFAULT;
}
GetEditBoxText(&EditDlgHeader, IDC_R, szBuff,10);
Rin = atof (szBuff);
if(Rin == 0)
{
MessageBox(NULL,"警告!采样电阻不能为零","错误信息",MB_OK);
return DEFAULT;
}
if(n <= 9)
{
MessageBox(NULL,"警告!请输入至少十组数据","错误信息",MB_OK);
return DEFAULT;
}
for(i = 0; i < MAX_POINT_NR; i++)
{
dF[i] = F[i];
dU[i] = U[i];
dUI[i] = UI[i];
dTau[i] = Tau[i];
}
nPt = n;
R = Rin;
strcpy(sn,snin);
for(i = 0; i < n; i++)
{
dG[i] = 1000*dUI[i]*cos(2*PI*dTau[i]*dF[i]*0.001)/dU[i]/R;
dB[i] = 1000*dUI[i]*sin(2*PI*dTau[i]*dF[i]*0.001)/dU[i]/R;
dY[i] = dG[i]*dG[i] + dB[i]*dB[i];
}
sflag = FALSE;
fflag = TRUE;
return CLOSE;
case IDC_ADD:
if( n == MAX_POINT_NR - 1)
{
MessageBox(NULL,"输入数据太多,装不下了!","错误信息",MB_OK );
return DEFAULT;
}
DialogBoxParam(NULL, &InputDlgHeader, InputBoxProc, (LPSTR)(n));
if(flag == FALSE)
return DEFAULT;
n++;
SortAndAddItems(pDlgHeader, IDC_TABLE);
return DEFAULT;
case IDC_DELETE:
iIndex = GetSelectedItem(pDlgHeader, IDC_TABLE);
if( iIndex < 0)
return DEFAULT;
for(i = iIndex; i < n - 1; i++)
{
F[i] = F[i+1];
U[i] = U[i+1];
UI[i] = UI[i+1];
Tau[i] = Tau[i+1];
}
n--;
DeleteListBoxItem(pDlgHeader, IDC_TABLE, iIndex);
pCtrlData = GetControlData(pDlgHeader, IDC_TABLE);
ReleaseListBoxBuff(pCtrlData);
for(i = 0; i < n; i++)
{
sprintf(szBuff, "%2d %10.2f%10.2f%10.4f%10.2f", i + 1, F[i], U[i], UI[i], Tau[i]);
AddListBoxItem(pDlgHeader, IDC_TABLE, szBuff);
}
FillListBox(pCtrlData);
return DEFAULT;
case IDC_CHANGE:
iIndex = GetSelectedItem(&EditDlgHeader,IDC_TABLE);
if( iIndex < 0)
return DEFAULT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -