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

📄 conduct.cpp

📁 清华魏永名miniGUI dos下的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -