?? showdata.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 + -