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

📄 showdata.cpp

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

#include "stdafx.h"
#include "FilmDesign.h"
#include "ShowData.h"

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

/////////////////////////////////////////////////////////////////////////////
// CShowData dialog


CShowData::CShowData(CWnd* pParent /*=NULL*/)
	: CDialog(CShowData::IDD, pParent)
{
	//{{AFX_DATA_INIT(CShowData)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	this->m_fWaveLength.RemoveAll();
	this->m_Reflectance.RemoveAll();
	this->m_Transistance.RemoveAll();
	this->m_Absorption.RemoveAll();


	CString m_StrBuffer="";
	this->m_Item=-1;
	this->m_Column=-1;
	m_Index=-1;
}


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


BEGIN_MESSAGE_MAP(CShowData, CDialog)
	//{{AFX_MSG_MAP(CShowData)
	ON_BN_CLICKED(IDC_SAVE, OnSave)
	ON_BN_CLICKED(IDC_COPY, OnCopy)
	ON_NOTIFY(NM_CLICK, IDC_LIST_DATA, OnClickListData)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_DATA, OnColumnclickListData)
	ON_WM_LBUTTONUP()
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShowData message handlers

BOOL CShowData::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
    // initialize 
	
	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);
	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, "波长(nm)", LVCFMT_LEFT,100);
	m_CtrlList.InsertColumn(1, "反射率", LVCFMT_LEFT, 100);
	m_CtrlList.InsertColumn(2, "透射率", LVCFMT_LEFT, 100);
	m_CtrlList.InsertColumn(3, "吸收率", LVCFMT_LEFT, 100);
	
	     
    
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CShowData::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);
     int response=fileDialog.DoModal();
    
	if(response==IDOK)
		szPathName=fileDialog.GetPathName();
	if(response==IDCANCEL)
	{
		MessageBox("取消保存!","提示",MB_ICONINFORMATION);
		return ;
	}
	
	CStdioFile sf;
	if(sf.Open(szPathName,CFile::modeCreate | CFile::modeWrite))
	{
		CString strOut;
		strOut="\r\nWaveLength(nm)\t\tReflectance(%)\t\tTransistance(%)\t\tAbsorption(%)\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);
	
}




void CShowData::OnOK() 
{
	// TODO: Add extra validation here
	   //Set Data to Zero
	   
	 CString strWaveLength,strReflectance,strTransistance,strAbsorption;
       
	for(int j=0;j<this->m_Reflectance.GetSize();j++)
		{
          strWaveLength.Format("%3.3f",this->m_fWaveLength.GetAt(j));
		  strReflectance.Format("%3.3f",this->m_Reflectance.GetAt(j));
		  strTransistance.Format("%3.3f",this->m_Transistance.GetAt(j));
		  strAbsorption.Format("%3.3f",this->m_Absorption.GetAt(j));
 		  m_CtrlList.InsertItem( j,strWaveLength,1);
		  m_CtrlList.SetItemText(j,1,strReflectance);
		  m_CtrlList.SetItemText(j,2,strTransistance);
	      m_CtrlList.SetItemText(j,3,strAbsorption);
		}
   

	this->m_fWaveLength.RemoveAll();
	this->m_Reflectance.RemoveAll();
	this->m_Transistance.RemoveAll();
	this->m_Absorption.RemoveAll();
		
		
	//CDialog::OnOK();
}


void CShowData::OnCopy() 
{
	// TODO: Add your control notification handler code here
     
	 if(m_Index==1)
		 m_StrBuffer="";
	 if(this->m_Column!=-1)
	 
		 for(int m=0;m<this->m_CtrlList.GetItemCount();m++)
		 {
			 m_StrBuffer+=m_CtrlList.GetItemText(m,m_Column);
			 m_StrBuffer+="\r\n";
		 }
	
		
	else if(this->m_Item!=-1)
		 for(int n=0;n<=3;n++)
		 {
			 m_StrBuffer+=m_CtrlList.GetItemText(m_Item,n);
			 m_StrBuffer+="\t\t";
		 }
	 

	 else 
     {   m_Index=1;  //have selected all data
	     for(int i=0;i<this->m_CtrlList.GetItemCount();i++)
		 { 
		 
		    m_StrBuffer+=m_CtrlList.GetItemText(i,0);
		    m_StrBuffer+="\t";
		    m_StrBuffer+=m_CtrlList.GetItemText(i,1);
		    m_StrBuffer+="\t";
		    m_StrBuffer+=m_CtrlList.GetItemText(i,2);
		    m_StrBuffer+="\t";
		    m_StrBuffer+=m_CtrlList.GetItemText(i,3);
		    m_StrBuffer+="\r\n";
		 }
		 MessageBox("你已经将表格中的数据全部复制到剪贴板上!","提示!!!",MB_ICONINFORMATION);
	 }
		 m_StrBuffer+="\r\n";

     DWORD dwLength = m_StrBuffer.GetLength(); // 要复制的字串长度
     HANDLE hGlobalMemory = GlobalAlloc(GHND, dwLength + 1); // 分配内存
     LPBYTE lpGlobalMemory = (LPBYTE)GlobalLock(hGlobalMemory); // 锁定内存
     for(DWORD j=0;j<dwLength;j++) // 将"*"复制到全局内存块
	 *lpGlobalMemory++=m_StrBuffer.GetAt(j);
	 GlobalUnlock(hGlobalMemory); // 锁定内存块解锁
     HWND hWnd = GetSafeHwnd(); // 获取安全窗口句柄
     ::OpenClipboard(hWnd); // 打开剪贴板
     ::EmptyClipboard(); // 清空剪贴板
     ::SetClipboardData(CF_TEXT, hGlobalMemory); // 将内存中的数据放置到剪贴板
     ::CloseClipboard(); // 关闭剪贴板 


	
}




void CShowData::OnClickListData(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	POSITION pos=m_CtrlList.GetFirstSelectedItemPosition();
	m_Item = m_CtrlList.GetNextSelectedItem(pos); 
	CString s;
	s.Format("%d",m_Item+1);
	MessageBox("你已经选定了第 "+s+" 行","提示!",MB_ICONINFORMATION);
		
	  
	*pResult = 0;
}

void CShowData::OnColumnclickListData(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	
	LVCOLUMNA pOldColumn,pColumn;
	m_Column=pNMListView->iSubItem;
	m_CtrlList.GetColumn(m_Column,&pColumn);
	pOldColumn=pColumn;
	pColumn.mask=LVCF_FMT ;
	
	pColumn.fmt=LVCFMT_CENTER|LVCFMT_IMAGE ;
	pColumn.cx=20;
	//pColumn.pszText="";
	pColumn.cchTextMax=80;
	pColumn.iImage=IDI_ICON2;
	pColumn.iOrder=NULL;
	
	
	CRect rect;
	m_CtrlList.GetClientRect(&rect);
	//m_CtrlList.SetTextColor(RGB(255,0,0));
	m_CtrlList.SetColumn(m_Column,&pColumn);
	m_CtrlList.RedrawWindow(&rect,NULL,RDW_INVALIDATE);
	m_CtrlList.SetColumn(m_Column,&pOldColumn);
	CString s;
	s.Format("%d",m_Column+1);
	MessageBox("你已经选定了第 "+s+" 列","提示!",MB_ICONINFORMATION);

	*pResult = 0;
}




void CShowData::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if((m_Column!=-1)||(m_Item!=-1))
	{
		m_Column=-1;
	    m_Item=-1;
	    
        MessageBox("你已经取消了原来的选定!","提示!",MB_ICONINFORMATION);

	}
	CDialog::OnLButtonUp(nFlags, point);
}

void CShowData::OnFileOpen() 
{
	// TODO: Add your command handler code here
	
}

⌨️ 快捷键说明

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