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

📄 showdatadlg.cpp

📁 This is my assignment for my tutor s Class. and many problems exist,so you should comprhend it and i
💻 CPP
字号:
// ShowDataDlg.cpp : implementation file
//

#include "stdafx.h"
#include "FilmDesign.h"
#include "ShowDataDlg.h"
#include "EditDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "Shape.h"
/////////////////////////////////////////////////////////////////////////////
// CShowDataDlg dialog


CShowDataDlg::CShowDataDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CShowDataDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CShowDataDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_Index=-1;
	
}


void CShowDataDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CShowDataDlg)
	DDX_Control(pDX, IDC_LIST, m_CtrlList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CShowDataDlg, CDialog)
	//{{AFX_MSG_MAP(CShowDataDlg)
	ON_NOTIFY(NM_CLICK, IDC_LIST, OnClickList)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_CHANGE, OnChange)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	ON_BN_CLICKED(IDC_SAVE, OnSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShowDataDlg message handlers

BOOL CShowDataDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	



	// Add "About..." menu item to system menu.

/*	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ADD & 0xFFF0) == IDM_ADD);
	ASSERT(IDM_ADD< 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDM_ADD);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->appendMenu(MF_SEPARATOR);
			pSysMenu->appendMenu(MF_STRING, IDM_ADD, strAboutMenu);
		}
	}
*/

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	m_ImageList.Create(16,16,TRUE,2,2);

	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
		m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
	m_CtrlList.SetImageList(&m_ImageList,LVSIL_SMALL);

	m_font.CreateFont(16, 0,0,0,FW_NORMAL, 0,0,0,
		DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
		DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial");
	m_CtrlList.SetFont(&m_font);
	//initialize 

	m_CtrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
	m_CtrlList.SetBkColor(RGB(247,247,255));
	m_CtrlList.SetTextColor(RGB(0,0,255));
	m_CtrlList.SetTextBkColor(RGB(247,247,255));
	m_CtrlList.InsertColumn(0, "材料", LVCFMT_LEFT,80);
	m_CtrlList.InsertColumn(1, "折射率", LVCFMT_LEFT, 100);
	m_CtrlList.InsertColumn(2, "吸收系数", LVCFMT_LEFT, 100);
	m_CtrlList.InsertColumn(3, "厚度(参考波长)", LVCFMT_LEFT, 150);
    

    //Fill table
	CFilmDesignApp * app=(CFilmDesignApp*)AfxGetApp();
	for(int i=0;app->m_Data[i].GetUse()==true;i++)
	{
		CString strN,strK,strM;
		strN.Format("%8.6f",app->m_Data[i].GetN());
		strK.Format("%8.6f",app->m_Data[i].GetK());
		strM.Format("%8.6f",app->m_Data[i].GetM());
		
		m_CtrlList.InsertItem(i,app->m_Data[i].GetName(),1);
		m_CtrlList.SetItemText(i,1,strN);
		m_CtrlList.SetItemText(i,2,strK);
		m_CtrlList.SetItemText(i,3,strM);
	}

    if(m_CtrlList.GetItemCount()==0)
	{

	    m_CtrlList.InsertItem(0,"玻璃基片",0);
	    m_CtrlList.SetItemText(0,1,"1.52000");
	    m_CtrlList.SetItemText(0,2,"0.00000");
	    m_CtrlList.SetItemText(0,3,"0.00000");
	}
	
	//initializing data
	
	app->m_Data[0].SetName("玻璃基片");
	app->m_Data[0].SetN(1.5200);
	app->m_Data[0].SetK(0.0000);
	app->m_Data[0].SetM(0.0000);
	app->m_Data[0].SetUse(true);


	
	





   
	


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

void CShowDataDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	POSITION pos=m_CtrlList.GetFirstSelectedItemPosition();
	m_Index = m_CtrlList.GetNextSelectedItem(pos); 
	
	*pResult = 0;
}

void CShowDataDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	POSITION pos=m_CtrlList.GetFirstSelectedItemPosition();
	m_Index = m_CtrlList.GetNextSelectedItem(pos); 
	if(m_Index==-1)
	{
		MessageBox("请选择一项在修改!","提示",MB_ICONINFORMATION);
		return;
	}
	

    CEditDlg edit;
	edit.m_DataName=m_CtrlList.GetItemText(m_Index,0);
	edit.m_DataN=   StoF(m_CtrlList.GetItemText(m_Index,1));
	edit.m_DataK=   StoF(m_CtrlList.GetItemText(m_Index,2));
	edit.m_DataM=   StoF(m_CtrlList.GetItemText(m_Index,3));
	
	int nResponse=edit.DoModal();
	if (nResponse==IDOK)
	{
		//renew Item to show
		   CString sN,sK,sM;
		sN.Format("%8.6f",edit.m_DataN);
		sK.Format("%8.6f",edit.m_DataK);
		sM.Format("%8.6f",edit.m_DataM);
		m_CtrlList.SetItemText(m_Index,0,edit.m_DataName);
		m_CtrlList.SetItemText(m_Index,1,sN);
		m_CtrlList.SetItemText(m_Index,2,sK );
		m_CtrlList.SetItemText(m_Index,3,sM);
	 
		
	}
	
	
	
	*pResult = 0;
}

void CShowDataDlg::OnPaint() 
{
 // device context for painting
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
	
	// TODO: Add your message handler code here
    
	


	
	// Do not call CDialog::OnPaint() for painting messages
}

HCURSOR CShowDataDlg::OnQueryDragIcon() 
{
	// TODO: Add your message handler code here and/or call default
	
	return (HCURSOR) m_hIcon;
}

void CShowDataDlg::OnAdd() 
{
	// TODO: Add your control notification handler code here
		CEditDlg ed;
	if(ed.DoModal()==IDOK)
	{
		CString sN,sK,sM;
		sN.Format("%8.6f",ed.m_DataN);
		sK.Format("%8.6f",ed.m_DataK);
		sM.Format("%8.6f",ed.m_DataM);
       	int nn=m_CtrlList.InsertItem(m_CtrlList.GetItemCount(),ed.m_DataName);
		m_CtrlList.SetItemText(nn,1,sN);
		m_CtrlList.SetItemText(nn,2,sK );
		m_CtrlList.SetItemText(nn,3,sM);
	}	
	
}

void CShowDataDlg::OnChange() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_CtrlList.GetFirstSelectedItemPosition();
	m_Index = m_CtrlList.GetNextSelectedItem(pos);  // 得到项目索引

	if(m_Index==-1)
	{
		MessageBox("请选择一项在修改!","提示",MB_ICONINFORMATION);
		return;
	}
	
	
	CEditDlg ed;
	

	
	ed.m_DataName=m_CtrlList.GetItemText(m_Index,0);
	
	ed.m_DataN=StoF(m_CtrlList.GetItemText(m_Index,1));
	ed.m_DataK=StoF(m_CtrlList.GetItemText(m_Index,2));
	ed.m_DataM=StoF(m_CtrlList.GetItemText(m_Index,3));
	
	if(ed.DoModal()==IDOK)
	{	CString m_strN,m_strK,m_strM;
	    m_strN.Format("%8.6f",ed.m_DataN);
		m_strK.Format("%8.6f",ed.m_DataK);
		m_strM.Format("%8.6f",ed.m_DataM);
		m_CtrlList.SetItemText(m_Index,0,ed.m_DataName);
		m_CtrlList.SetItemText(m_Index,1,m_strN	);
		m_CtrlList.SetItemText(m_Index,2,m_strK);
		m_CtrlList.SetItemText(m_Index,3,m_strM);
	}
	
}

float CShowDataDlg::StoF(CString str)//Used to convert CString storing numbers to float

{
	
	int length=str.GetLength();
	double data=atof(str.GetBuffer(length));
	return (float)data;
}
/*	//CString ss;
	float f;
	int  length  =  str.GetLength(); 
    char  *ch  =new  char[length  +  1];
	

	/////////////////////////
	for(int i1=0;i1<length;i1++)//Convert CString to Char*
	{   
		ch[i1]=str.GetAt(i1);
	}
	 
	//watch the data
    //	ch[length]='\0';
	//	MessageBox(ch);
	////////////////////////
    //convert string to float
	int k1=0;
    for(int i2=0;i2<length;i2++)  //calculate num of data which is larger or equal to zero
	{
		if(ch[i2]=='-')  continue;
	   
		if(ch[i2]=='.')  break;
	    if(ch[i2]>='0'&&ch[i2]<='9') k1++;
	}
	 //watch 
	//CString ss;
	// ss.Format("%d",k1);	 
	 //MessageBox("k1:"+ss);

	 
    int k2=k1; //used to control 
	f=0.0f;// used to store the float
	for(int i3=0;i3<=length;i3++)    //calculate  num of data>=0;
	{ 
		if(ch[i3]=='-')  continue;
		if(ch[i3]=='.')  break;
		if(ch[i3]>='0' && ch[i3]<='9')
		{
			float t1=float (ch[i3]+(0-'0'));

			for(int i4=1;i4<k2;i4++)
				t1=t1*10;
			k2--;
			f=f+t1;
		}
	}
    int k3=k1;//control number of data<0
	int k4=1;//control decision of decimal
	for(int i5=k3+1;i5<length;i5++)
	{  
		if(ch[i5]>='0' && ch[i5]<='9')
		{
			float t2=float(ch[i5]+(0-'0'));
			for(int i6=0;i6<k4;i6++)
				t2=t2*0.1f;
			k4++;
			f=f+t2;
		}
	}

    //ss.Format("%f",f);	 
	// MessageBox("整数"+ss);
    if(ch[0]=='-') f=-f;	
	return f;

}

*/


void CShowDataDlg::OnDel() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_CtrlList.GetFirstSelectedItemPosition();
	m_Index = m_CtrlList.GetNextSelectedItem(pos);  // 得到项目索引
	m_CtrlList.DeleteItem(m_Index);
	

	
}

void CShowDataDlg::OnOK() 
{
	// TODO: Add extra validation here
	//Write designed system data to save
    
	CFilmDesignApp * app=(CFilmDesignApp*)AfxGetApp();
	int Total=m_CtrlList.GetItemCount();
	int i;
	for( i=0;i<Total;i++)
	{   
		app->m_Data[i].SetName(m_CtrlList.GetItemText(i,0));
		app->m_Data[i].SetN(StoF(m_CtrlList.GetItemText(i,1)));
		app->m_Data[i].SetK(StoF(m_CtrlList.GetItemText(i,2)));
		app->m_Data[i].SetM(StoF(m_CtrlList.GetItemText(i,3)));
		app->m_Data[i].SetUse(true);
        
	}
	
	for(;app->m_Data[i].GetUse();i++)
	{
		app->m_Data[i].SetName("a");
		app->m_Data[i].SetN(0.0);
		app->m_Data[i].SetK(0.0);
		app->m_Data[i].SetM(0.0);

		app->m_Data[i].SetUse(false);
	}
	
	
	CDialog::OnOK();
}


void CShowDataDlg::OnSave() 
{
	// TODO: Add your control notification handler code here
     
	 CString szPathName="资料.txt";
	 char szFilter[]="Text Files (*.txt)|*.txt||";
     CFileDialog fileDialog(false, "txt","First",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);

    
	if(fileDialog.DoModal()==IDOK)
		szPathName=fileDialog.GetPathName();
	
	CStdioFile sf;
	if(sf.Open(szPathName,CFile::modeCreate | CFile::modeWrite))
	{
		CString strOut;
		strOut="\r\nMaterial\t\tindice(N)\t\tsorbptive(K)\t\tThickness\r\n";
		sf.WriteString(strOut);
		
		for(int i=0;i<m_CtrlList.GetItemCount();i++)
		{   
			strOut= m_CtrlList.GetItemText(i,0)+"\t\t"+m_CtrlList.GetItemText(i,1)+"\t\t     "+m_CtrlList.GetItemText(i,2) +"\t\t     "+m_CtrlList.GetItemText(i,3)+"\r\n";
			sf.WriteString(strOut);
		}
		sf.Close();
		MessageBox("保存成功!","提示",MB_ICONINFORMATION);
	}
	
	else
		MessageBox("保存失败!","提示",MB_ICONINFORMATION);
	
}

⌨️ 快捷键说明

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