📄 showdatadlg.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 + -