?? tallyview.cpp
字號:
// TallyView.cpp : implementation of the CTallyView class
//
#include "stdafx.h"
#include "Tally.h"
#include "matlib.h"
#include "TallyDoc.h"
#include "TallyView.h"
#include "CountDialog.h"
#include "InputDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define HASHSEED 67
/////////////////////////////////////////////////////////////////////////////
//hash function
long hash (CString s){
long res = 1;
for (int i=0; i<s.GetLength(); i++){
res *=(int)s[i];
res %= HASHSEED;
}
return res;
}
/////////////////////////////////////////////////////////////////////////////
//update
void CTallyView::Update (){
CString temp;
temp = m_MonthTreeCtrl.GetItemText(m_MonthTreeCtrl.GetSelectedItem());
long hashMonth[12];
hashMonth[0] = hash ("一月");
hashMonth[1] = hash ("二月");
hashMonth[2] = hash ("三月");
hashMonth[3] = hash ("四月");
hashMonth[4] = hash ("五月");
hashMonth[5] = hash ("六月");
hashMonth[6] = hash ("七月");
hashMonth[7] = hash ("八月");
hashMonth[8] = hash ("九月");
hashMonth[9] = hash ("十月");
hashMonth[10] = hash ("十一月");
hashMonth[11] = hash ("十二月");
long tmp = hash(temp);
int iMonth = -1;
for (int i=0; i<12; i++){
if (tmp == hashMonth[i])
iMonth = i;
}
m_iMonth = iMonth;
CDocument * CurDoc = this->GetDocument();
CTallyDoc * MyCurDoc = (CTallyDoc *)CurDoc;
this->m_ItemListCtrl.DeleteAllItems();
this->m_OutEditBox = "";
this->UpdateData(FALSE);
if (iMonth <0 || iMonth>11){
return;
}
//MyCurDoc->m_aMonth[iMonth];
int iItemSize = MyCurDoc->m_aMonth[iMonth].GetSize();
this->m_ItemListCtrl.SetItemCount(iItemSize);
for (i=0; i<iItemSize; i++){
this->m_ItemListCtrl.InsertItem(i,MyCurDoc->m_aMonth[iMonth][i].m_sName);
temp.Format("%.2f",MyCurDoc->m_aMonth[iMonth][i].m_dCost);
this->m_ItemListCtrl.SetItemText(i,1,temp);
//temp.Format("%d",MyCurDoc->m_aMonth[iMonth][i].m_tType);
switch (MyCurDoc->m_aMonth[iMonth][i].m_tType){
case 0: temp.Format("%s","食品");break;
case 1: temp.Format("%s","書籍");break;
case 2: temp.Format("%s","服裝");break;
case 3: temp.Format("%s","醫藥");break;
case 4: temp.Format("%s","禮物");break;
case 5: temp.Format("%s","化妝品");break;
case 6: temp.Format("%s","日用品");break;
case 7: temp.Format("%s","收入");break;
case 8: temp.Format("%s","其它");break;
}
this->m_ItemListCtrl.SetItemText(i,2,temp);//類別
temp.Format("%d",MyCurDoc->m_aMonth[iMonth][i].m_uiDay);
this->m_ItemListCtrl.SetItemText(i,3,temp);//日期
this->m_ItemListCtrl.SetItemText(i,4,MyCurDoc->m_aMonth[iMonth][i].m_sRemark);//備注
}
}
/////////////////////////////////////////////////////////////////////////////
// CTallyView
IMPLEMENT_DYNCREATE(CTallyView, CFormView)
BEGIN_MESSAGE_MAP(CTallyView, CFormView)
//{{AFX_MSG_MAP(CTallyView)
ON_WM_SIZE()
ON_COMMAND(ID_SHOW_INPUT_DATE_DIA, OnShowInputDateDia)
ON_COMMAND(ID_SHOW_COUNT_DIA, OnShowCountDia)
ON_NOTIFY(TVN_SELCHANGED, IDC_MONTH_TREE, OnSelchangedMonthTree)
ON_NOTIFY(NM_CLICK, IDC_ITEM_LIST, OnClickItemList)
ON_COMMAND(ID_DELET_BUTTON, OnDeletButton)
ON_COMMAND(ID_QQ, OnQq)
ON_COMMAND(ID_EMAIL, OnEmail)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTallyView construction/destruction
CTallyView::CTallyView()
: CFormView(CTallyView::IDD)
{
//{{AFX_DATA_INIT(CTallyView)
m_OutEditBox = _T("");
//}}AFX_DATA_INIT
// TODO: add construction code here
//pGraphDia = NULL;
}
CTallyView::~CTallyView()
{
exitM();
}
void CTallyView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTallyView)
DDX_Control(pDX, IDC_EDIT_BOX, m_EditCtrl);
DDX_Control(pDX, IDC_ITEM_LIST, m_ItemListCtrl);
DDX_Control(pDX, IDC_MONTH_TREE, m_MonthTreeCtrl);
DDX_Text(pDX, IDC_EDIT_BOX, m_OutEditBox);
//}}AFX_DATA_MAP
}
BOOL CTallyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CTallyView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
ResizeParentToFit();
m_ItemListCtrl.InsertColumn(0,"名稱",LVCFMT_CENTER,100);
m_ItemListCtrl.InsertColumn(1,"金額",LVCFMT_CENTER,100);
m_ItemListCtrl.InsertColumn(2,"類別",LVCFMT_CENTER,100);
m_ItemListCtrl.InsertColumn(3,"日期",LVCFMT_CENTER,100);
m_ItemListCtrl.InsertColumn(4,"備注",LVCFMT_CENTER,100);
m_ItemListCtrl.SetExtendedStyle(m_ItemListCtrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
tvMONTH.hParent = NULL;
tvMONTH.item.mask = TVIF_TEXT;
tvMONTH.item.pszText = "全年";
HTREEITEM hDad = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.hParent = hDad;
tvMONTH.item.pszText = "一月";
hMONTH1 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "二月";
hMONTH2 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "三月";
hMONTH3 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "四月";
hMONTH4 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "五月";
hMONTH5 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "六月";
hMONTH6 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "七月";
hMONTH7 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "八月";
hMONTH8 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "九月";
hMONTH9 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "十月";
hMONTH10 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "十一月";
hMONTH11 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
tvMONTH.item.pszText = "十二月";
hMONTH12 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
initM (MATCOM_VERSION);
Mm plothandle = winaxes (NULL);//初始化圖像窗口
}
/////////////////////////////////////////////////////////////////////////////
// CTallyView printing
BOOL CTallyView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTallyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTallyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CTallyView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
}
/////////////////////////////////////////////////////////////////////////////
// CTallyView diagnostics
#ifdef _DEBUG
void CTallyView::AssertValid() const
{
CFormView::AssertValid();
}
void CTallyView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CTallyDoc* CTallyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTallyDoc)));
return (CTallyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTallyView message handlers
void CTallyView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rc1,rc2,rc3;
this->GetClientRect(&rc1);
this->GetClientRect(&rc2);
this->GetClientRect(&rc3);
rc1.SetRect(20,20,(int)((double)cx*0.3),(int)((double)cy*0.7));
rc2.SetRect((int)((double)cx*0.3),20,cx-20,(int)((double)cy*0.7));
rc3.SetRect(20,(int)((double)cy*0.7),cx-20,cy-20);
if (m_ItemListCtrl)
m_ItemListCtrl.MoveWindow(rc2);
if (m_MonthTreeCtrl)
m_MonthTreeCtrl.MoveWindow(rc1);
if (m_EditCtrl)
m_EditCtrl.MoveWindow(rc3);
}
void CTallyView::OnShowInputDateDia()
// TODO: Add your command handler code here
CInputDialog InputDia;
InputDia.DoModal();
}
void CTallyView::OnShowCountDia()
{
// TODO: Add your command handler code here
CCountDialog CountDia;
CountDia.DoModal();
}
void CTallyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
/* HTREEITEM hCurrentItem = m_MonthTreeCtrl.GetSelectedItem();
hCurrentItem->TVIF_TEXT
AfxMessageBox("update view");
*/
Update();
}
void CTallyView::OnSelchangedMonthTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
Update();
*pResult = 0;
}
void CTallyView::OnClickItemList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CString temp="";
int iFirstSelectedItem = m_ItemListCtrl.GetSelectionMark( );
if (iFirstSelectedItem !=-1){
for (int i=0; i<5; i++){
temp += m_ItemListCtrl.GetItemText(iFirstSelectedItem,i);
temp +=" ";
}
m_OutEditBox = temp;
this->UpdateData(FALSE);
}
else
{
m_OutEditBox = "";
this->UpdateData(FALSE);
}
*pResult = 0;
}
void CTallyView::OnDeletButton()
{
// TODO: Add your command handler code here
int iFirstSelectedItem = m_ItemListCtrl.GetSelectionMark( );
if (iFirstSelectedItem !=-1 && m_iMonth>=0&&m_iMonth<12){
CDocument * CurDoc = this->GetDocument();
CTallyDoc * MyCurDoc = (CTallyDoc *)CurDoc;
MyCurDoc->DeleteItem(m_iMonth+1, iFirstSelectedItem);
MyCurDoc->UpdateAllViews(NULL);
}
}
void CTallyView::OnQq()
{
// TODO: Add your command handler code here
::ShellExecute (NULL,NULL,"Tencent://Message/?uin=254602631",NULL,NULL,SW_HIDE);
}
void CTallyView::OnEmail()
{
// TODO: Add your command handler code here
::ShellExecute (NULL,NULL,"mailto:mayjojo@yeah.net",NULL,NULL,SW_SHOW);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -