www.gusucode.com > VC++牛顿法解方程之混沌情况图形示例源代码源码程序 > VC++牛顿法解方程之混沌情况图形示例源代码源码程序\code\ParaCtrl.cpp

    //Download by http://www.NewXing.com
// ParaCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "Global.h"
#include "Faction.h"
#include "ParaCtrl.h"

#include "FactionDoc.h"
#include "FactionView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CParaCtrl dialog


CParaCtrl::CParaCtrl(CWnd* pParent /*=NULL*/)
	: CDialog(CParaCtrl::IDD, pParent)
{
	//{{AFX_DATA_INIT(CParaCtrl)
	m_nNN = 5;
	m_dRV = 0.0;
	m_dAA = 0.0;
	m_dRP = 0.0;
	m_dX1 = 2.0;
	m_dX2 = 1.5;
	m_dY1 = -2.0;
	m_dY2 = -1.5;
	m_nFA = 7;
	m_nRanSpec = 1;
	m_nFC = 1;
	m_dYsjb = 0.0;
	m_nB = 0;
	m_nG = 0;
	m_nR = 0;
	//}}AFX_DATA_INIT
	m_dT17=0, m_dT30=0, m_dT31=0;
}


void CParaCtrl::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CParaCtrl)
	DDX_Control(pDX, IDC_SPIN_R, m_spinR);
	DDX_Control(pDX, IDC_SPIN_G, m_spinG);
	DDX_Control(pDX, IDC_SPIN_B, m_spinB);
	DDX_Control(pDX, IDC_COMBO_PARAM_TX4, m_comboTX4);
	DDX_Control(pDX, IDC_COMBO_PARAM_TX3, m_comboTX3);
	DDX_Control(pDX, IDC_COMBO_PARAM_TX2, m_comboTX2);
	DDX_Control(pDX, IDC_COMBO_PARAM_TX1, m_comboTX1);
	DDX_Text(pDX, IDC_EDIT_N_VALUE, m_nNN);
	DDV_MinMaxInt(pDX, m_nNN, 2, 99999999);
	DDX_Text(pDX, IDC_EDIT_SEL_RV, m_dRV);
	DDX_Text(pDX, IDC_EDIT_SEL_A, m_dAA);
	DDX_Text(pDX, IDC_EDIT_SEL_RP, m_dRP);
	DDX_Text(pDX, IDC_EDIT_X1, m_dX1);
	DDX_Text(pDX, IDC_EDIT_X2, m_dX2);
	DDX_Text(pDX, IDC_EDIT_Y1, m_dY1);
	DDX_Text(pDX, IDC_EDIT_Y2, m_dY2);
	DDX_Radio(pDX, IDC_RADIO_FA1, m_nFA);
	DDX_Radio(pDX, IDC_RADIO_RANDOM, m_nRanSpec);
	DDX_Radio(pDX, IDC_RADIO_SEL_FC, m_nFC);
	DDX_Text(pDX, IDC_EDIT_YSJB, m_dYsjb);
	DDX_Text(pDX, IDC_EDIT_B, m_nB);
	DDV_MinMaxInt(pDX, m_nB, 0, 255);
	DDX_Text(pDX, IDC_EDIT_G, m_nG);
	DDV_MinMaxInt(pDX, m_nG, 0, 255);
	DDX_Text(pDX, IDC_EDIT_R, m_nR);
	DDV_MinMaxInt(pDX, m_nR, 0, 255);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CParaCtrl, CDialog)
	//{{AFX_MSG_MAP(CParaCtrl)
	ON_BN_CLICKED(IDC_BTN_SAVE_PARAM, OnBtnSaveParam)
	ON_BN_CLICKED(IDC_BTN_LOAD_PARAM, OnBtnLoadParam)
	ON_BN_CLICKED(IDC_RADIO_SEL_FC, OnRadioSelFc)
	ON_BN_CLICKED(IDC_RADIO_SEL_FC1, OnRadioSelFc1)
	ON_BN_CLICKED(IDC_RADIO_SEL_FC2, OnRadioSelFc2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CParaCtrl message handlers

BOOL CParaCtrl::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_spinR.SetBuddy(GetDlgItem(IDC_EDIT_R));
	m_spinG.SetBuddy(GetDlgItem(IDC_EDIT_G));
	m_spinB.SetBuddy(GetDlgItem(IDC_EDIT_B));
	m_spinR.SetRange(0,255);
	m_spinG.SetRange(0,255);
	m_spinB.SetRange(0,255);

	m_spinR.SetPos(68);
	m_spinG.SetPos(228);
	m_spinB.SetPos(158);

	//////////////////////////
	//显示“参数控制面板”前的准备
	m_dX1 = G.m_dSeData[0][1];
	m_dY1 = G.m_dSeData[0][2];
	m_dX2 = G.m_dSeData[0][3];
	m_dY2 = G.m_dSeData[0][4];
	if(G.m_dSeData[0][5] == 1)
		m_nRanSpec = 0;
	else
		m_nRanSpec = 1;
	m_nR = (int)G.m_dSeData[0][6];
	m_nG = (int)G.m_dSeData[0][7];
	m_nB = (int)G.m_dSeData[0][8];
	m_dYsjb = G.m_dSeData[0][9];
	m_dT30 = G.m_dSeData[0][10];
	m_dT31 = G.m_dSeData[0][11];
	m_dT17 = G.m_dSeData[0][12];
	m_nFC = (int)G.m_dSeData[0][13]-1;
	switch(m_nFC)
	{
	case 0:	OnRadioSelFc();		break;
	case 1:	OnRadioSelFc1();	break;
	case 2:	OnRadioSelFc2();	break;
	}

	m_nNN = (int)G.m_dSeData[0][14];
	m_dAA = G.m_dSeData[0][15];

	m_comboTX1.SetCurSel(int(G.m_dSeData[0][16]) % 100);
	m_comboTX2.SetCurSel(int(G.m_dSeData[0][16]*0.01) % 100);
	m_comboTX3.SetCurSel(int(G.m_dSeData[0][16]*0.0001) % 100);
	m_comboTX4.SetCurSel(int(G.m_dSeData[0][16]*0.000001) % 100);

	m_dRP = G.m_dSeData[0][17];
	m_dRV = G.m_dSeData[0][18];
	m_nFA = (int)G.m_dSeData[0][19];
	//////////////////////////

	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CParaCtrl::OnBtnSaveParam() 
{
	UpdateData();
	//保存当前设置好的参数,保存为 *.HTXT 文件
//	SeData(-1, 0) = 1

	static char BASED_CODE szFilter[] = "HTXT Files (*.HTXT)|*.HTXT|All Files (*.*)|*.*||";
	CFileDialog fileDlg(FALSE, NULL, "*.htxt",
			OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter, this);
	fileDlg.m_ofn.lpstrTitle = "选择HTXT文件";
	char cPath[128];
	CString csFile;
	GetCurrentDirectory(128, cPath);
	fileDlg.m_ofn.lpstrInitialDir = cPath;
	if( fileDlg.DoModal() == IDOK)
	{
		csFile = fileDlg.GetPathName();
		if( ! csFile.GetLength() )
			return;
	}

	G.m_dSeData0[0][0] = 1;
	G.m_dSeData0[0][1] = m_dX1;
	G.m_dSeData0[0][2] = m_dY1;
	G.m_dSeData0[0][3] = m_dX2;
	G.m_dSeData0[0][4] = m_dY2;
	if(!m_nRanSpec)
		G.m_dSeData0[0][5] = 1;
	else
		G.m_dSeData0[0][5] = 0;
	G.m_dSeData0[0][6] = m_nR;
	G.m_dSeData0[0][7] = m_nG;
	G.m_dSeData0[0][8] = m_nB;
	G.m_dSeData0[0][9] = m_dYsjb;
	G.m_dSeData0[0][10] = m_dT30;//Val(Me.Text30.Text)
	G.m_dSeData0[0][11] = m_dT31;//Val(Me.Text31.Text)
	G.m_dSeData0[0][12] = m_dT17;//Val(Me.Text17.Text)
	G.m_dSeData0[0][13] = m_nFC+1;
	G.m_dSeData0[0][14] = m_nNN;
	G.m_dSeData0[0][15] = m_dAA;
	G.m_dSeData0[0][16] = m_comboTX1.GetCurSel() * 1 
										 + m_comboTX2.GetCurSel() * 100 
										 + m_comboTX3.GetCurSel() * 10000 
										 + m_comboTX4.GetCurSel() * 1000000;
	G.m_dSeData0[0][17] = m_dRP;
	G.m_dSeData0[0][18] = m_dRV;
	G.m_dSeData0[0][19] = m_nFA;

	CStdioFile slf;
	if(slf.Open(csFile,CFile::modeCreate|CFile::modeReadWrite))//CFile::modeNoTruncate|
	{
		CString cont;
		for(int i=0; i<20; i++)
		{
			cont.Format("%f\n", G.m_dSeData0[0][i]);
			slf.WriteString(cont);
		}
		slf.Close();
	}
	SetCurrentDirectory(cPath);
}

void CParaCtrl::OnBtnLoadParam() 
{	//载入参数文件并显示
	static char BASED_CODE szFilter[] = "HTXT Files (*.HTXT)|*.HTXT|All Files (*.*)|*.*||";
	CFileDialog fileDlg(TRUE, NULL, "*.htxt",
			OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter, this);
	fileDlg.m_ofn.lpstrTitle = "选择HTXT文件";
	char cPath[128];
	CString csFile;
	GetCurrentDirectory(128, cPath);
	fileDlg.m_ofn.lpstrInitialDir = cPath;
	if( fileDlg.DoModal() == IDOK)
	{
		csFile = fileDlg.GetPathName();
		if( ! csFile.GetLength() )
			return;
	}
	SetCurrentDirectory(cPath);

	CStdioFile slf;
	if(slf.Open(csFile,CFile::modeCreate|CFile::modeReadWrite))//CFile::modeNoTruncate|
	{
		CString cont;
		for(int i=0; slf.ReadString(cont); i++)
		{
			G.m_dSeData0[0][i] = atof((char *&)cont);
		}
		slf.Close();
	}
	else{
		MessageBox("  打开文件时出错 (或者其它错误) !", " 错误", MB_OK);
		return;
	}

	m_dX1 = G.m_dSeData0[0][1];
	m_dY1 = G.m_dSeData0[0][2];
	m_dX2 = G.m_dSeData0[0][3];
	m_dY2 = G.m_dSeData0[0][4];
	m_nRanSpec = 1;
	m_nR = (int)G.m_dSeData0[0][6];
	m_nG = (int)G.m_dSeData0[0][7];
	m_nB = (int)G.m_dSeData0[0][8];

	m_dYsjb = G.m_dSeData0[0][9];
	m_dT30 = G.m_dSeData0[0][10];
	m_dT31 = G.m_dSeData0[0][11];
	m_dT17 = G.m_dSeData0[0][12];
	m_nFC = (int)G.m_dSeData0[0][13] - 1;
	m_nNN = (int)G.m_dSeData0[0][14];
	m_dAA = G.m_dSeData0[0][15];

	m_comboTX1.SetCurSel(int(G.m_dSeData0[0][16]) % 100);
	m_comboTX2.SetCurSel(int(G.m_dSeData0[0][16]*0.01) % 100);
	m_comboTX3.SetCurSel(int(G.m_dSeData0[0][16]*0.0001) % 100);
	m_comboTX4.SetCurSel(int(G.m_dSeData0[0][16]*0.000001) % 100);

	m_dRP = G.m_dSeData0[0][17];
	m_dRV = G.m_dSeData0[0][18];
	m_nFA = (int)G.m_dSeData0[0][19];

	UpdateData(FALSE);
}

void CParaCtrl::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData();
	G.m_nR = m_spinR.GetPos();
	G.m_nB = m_spinG.GetPos();
	G.m_nG = m_spinB.GetPos();

	//确认参数设置
	G.SeDataIN();

	G.m_dSeData[0][0] = 1;
	G.m_dSeData[0][1] = m_dX1;
	G.m_dSeData[0][2] = m_dY1;
	G.m_dSeData[0][3] = m_dX2;
	G.m_dSeData[0][4] = m_dY2;
	if(!m_nRanSpec)
		G.m_dSeData[0][5] = 1;
	else
		G.m_dSeData[0][5] = 0;
	G.m_dSeData[0][6] = m_nR;
	G.m_dSeData[0][7] = m_nG;
	G.m_dSeData[0][8] = m_nB;
	G.m_dSeData[0][9] = m_dYsjb;
	G.m_dSeData[0][10] = m_dT30;//Val(Me.Text30.Text)
	G.m_dSeData[0][11] = m_dT31;//Val(Me.Text31.Text)
	G.m_dSeData[0][12] = m_dT17;//Val(Me.Text17.Text)
	G.m_dSeData[0][13] = m_nFC+1;
	G.m_dSeData[0][14] = m_nNN;
	G.m_dSeData[0][15] = m_dAA;
	G.m_dSeData[0][16] = m_comboTX1.GetCurSel() * 1 
										 + m_comboTX2.GetCurSel() * 100 
										 + m_comboTX3.GetCurSel() * 10000 
										 + m_comboTX4.GetCurSel() * 1000000;
	G.m_dSeData[0][17] = m_dRP;
	G.m_dSeData[0][18] = m_dRV;
	G.m_dSeData[0][19] = m_nFA;

	//Call frmMain.Command1_Click
	//g_document.UpdateAllViews(NULL);    
/*	POSITION pos = g_document.GetFirstViewPosition();
	while(pos != NULL)
	{
		CFactionView* pView = (CFactionView*)g_document.GetNextView(pos);
		if(pView->IsKindOf(RUNTIME_CLASS(CFactionView)))
				pView->RedrawWindow();
	}*/

	CDialog::OnOK();
}

void CParaCtrl::OnRadioSelFc() 
{
	// TODO: Add your control notification handler code here
	SelDisplay(FALSE);
	GetDlgItem(IDC_EDIT_N_VALUE)->EnableWindow(TRUE);
}

void CParaCtrl::OnRadioSelFc1() 
{
	// TODO: Add your control notification handler code here
	SelDisplay(FALSE);
	GetDlgItem(IDC_EDIT_N_VALUE)->EnableWindow(FALSE);
}

void CParaCtrl::OnRadioSelFc2() 
{
	// TODO: Add your control notification handler code here
	SelDisplay(TRUE);
	GetDlgItem(IDC_EDIT_N_VALUE)->EnableWindow(FALSE);
}

void CParaCtrl::SelDisplay(BOOL bDisplay) 
{
	if(bDisplay){
		GetDlgItem(IDC_STATIC_A)->EnableWindow(TRUE);
		GetDlgItem(IDC_STATIC_RP)->EnableWindow(TRUE);
		GetDlgItem(IDC_STATIC_RV)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDIT_SEL_A)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDIT_SEL_RP)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDIT_SEL_RV)->EnableWindow(TRUE);
	}
	else{
		GetDlgItem(IDC_STATIC_A)->EnableWindow(FALSE);
		GetDlgItem(IDC_STATIC_RP)->EnableWindow(FALSE);
		GetDlgItem(IDC_STATIC_RV)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_SEL_A)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_SEL_RP)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_SEL_RV)->EnableWindow(FALSE);
	}
}