// annualfee.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "annualfee.h" #include "MyMdi.H" #include "Booking2.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #pragma comment(lib, "Shlwapi.lib") ///////////////////////////////////////////////////////////////////////////// // annualfee IMPLEMENT_DYNCREATE(annualfee, MyFormView) annualfee::annualfee() : MyFormView(annualfee::IDD) { //{{AFX_DATA_INIT(annualfee) m_filter = _T(""); m_bz = _T(""); //}}AFX_DATA_INIT } annualfee::~annualfee() { } void annualfee::DoDataExchange(CDataExchange* pDX) { MyFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(annualfee) DDX_Control(pDX, IDC_COMBO1, m_combo1); DDX_Control(pDX, IDC_LIST2, m_List1); DDX_Control(pDX, IDC_STATIC1, m_static1); DDX_CBString(pDX, IDC_COMBO1, m_filter); DDX_Text(pDX, IDC_EDIT1, m_bz); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(annualfee, MyFormView) //{{AFX_MSG_MAP(annualfee) ON_BN_CLICKED(IDC_BUTclose, OnBUTclose) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1) ON_WM_TIMER() ON_BN_CLICKED(IDC_BUTmodify, OnBUTmodify) ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnDblclkList2) ON_BN_CLICKED(IDC_BUTexport, OnBUTexport) ON_BN_CLICKED(IDC_BUTmodify2, OnBUTmodify2) ON_NOTIFY(NM_RDBLCLK, IDC_LIST2, OnRdblclkList2) ON_BN_CLICKED(IDC_BUTToPhotoPrint, OnBUTToPhotoPrint) ON_BN_CLICKED(IDC_BUTburncd, OnBUTburncd) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2) ON_BN_CLICKED(IDC_BUTburncd2, OnBUTburncd2) //}}AFX_MSG_MAP ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST2, OnCustomdrawList) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // annualfee diagnostics #ifdef _DEBUG void annualfee::AssertValid() const { MyFormView::AssertValid(); } void annualfee::Dump(CDumpContext& dc) const { MyFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // annualfee message handlers void annualfee::OnInitialUpdate() { MyFormView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class CMyMdi Mdi; Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this); // Here we create the outbar control using the splitter as its parent // and setting its id to the first pane. CRect rc2; GetWindowRect(rc2); ::MoveWindow(m_hWnd, g_rc.left, g_rc.top, g_rc.Width(), g_rc.Height(), TRUE); EnumChildWindows(m_hWnd, (WNDENUMPROC)EnumChildProc, 0); int idarray[] = { IDC_BUTburncd2, IDC_BUTToPhotoPrint, IDC_BUTclose }; int idcount = 3; int btnwid; CRect prerc; int a = 0; for ( a = idcount - 2; a >= 0; a--) { GetDlgItem(idarray[a + 1])->GetWindowRect(prerc); ScreenToClient(prerc); GetDlgItem(idarray[a])->GetWindowRect(rc2); ScreenToClient(rc2); btnwid = rc2.Width(); rc2.right = prerc.left; rc2.left = rc2.right - btnwid; GetDlgItem(idarray[a])->MoveWindow(rc2); } int idarray2[] = { IDC_BUTTON1, IDC_BUTTON2, IDC_BUTTON3, IDC_BUTexport, IDC_BUTToPhotoPrint }; idcount = 3; for (a = 1; a < idcount; a++) { GetDlgItem(idarray2[a - 1])->GetWindowRect(prerc); ScreenToClient(prerc); GetDlgItem(idarray2[a])->GetWindowRect(rc2); ScreenToClient(rc2); btnwid = rc2.Width(); rc2.left = prerc.right; rc2.right = rc2.left + btnwid; GetDlgItem(idarray2[a])->MoveWindow(rc2); } m_static1.SetFont(&g_titlefont); m_List1.SetHeadings("订单号,100;男宾姓名,100;女宾姓名,100;定单日期,100;接单人,100;年度,100;应交日期,100;是否交费,100;交费日期,100;收款人,100;合同,100;男宾电话,100;女宾电话,100"); m_List1.LoadColumnInfo(302); m_List1.m_bSortSupport = 0; GetData(); for (int i = 0; i < g_userarray.GetSize(); i++) { m_combo1.AddString(g_userarray.ElementAt(i).ElementAt(1)); } FillGrid(); m_combo1.GetWindowRect(rc2); ScreenToClient(rc2); rc2.bottom += 200; m_combo1.MoveWindow(rc2); GetDlgItem(IDC_BUTclose)->GetWindowRect(rc2); SetComboHei(&m_combo1, rc2.Height()); GetDlgItem(IDC_BUTburncd2)->EnableWindow(IsHasRights2new(16)); GetDlgItem(IDC_BUTmodify2)->EnableWindow(IsHasRights2new(16)); } void annualfee::FillGrid(BOOL bStatus) { m_List1.DeleteAllItems2(); int ii = 0; m_List1.m_arLabels.SetSize(m_List1array.GetSize(), 1); int count = 0; if (m_filter.IsEmpty() || bStatus) { if (bStatus == 1) { BOOL bFinded = 0; for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++) { if (bFinded && m_List1array.ElementAt(ii).ElementAt(0).IsEmpty()) { m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); continue; } if (m_List1array.ElementAt(ii).ElementAt(16) == "1") { bFinded = 1; m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); } else { bFinded = 0; } } } else if (bStatus == 2) { BOOL bFinded = 0; for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++) { if (bFinded && m_List1array.ElementAt(ii).ElementAt(0).IsEmpty()) { m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); continue; } if (m_List1array.ElementAt(ii).ElementAt(16) == "2") { bFinded = 1; m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); } else { bFinded = 0; } } } else { for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++) { m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); } } } else { int nAdd = 0; int type = GetType(m_filter); if (type == 1)//电话 { BOOL bFinded = 0; for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++) { if (bFinded && m_List1array.ElementAt(ii).ElementAt(0).IsEmpty()) { m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); continue; } if (m_List1array.ElementAt(ii).ElementAt(12 + nAdd).Find(m_filter) != -1\ || m_List1array.ElementAt(ii).ElementAt(11 + nAdd).Find(m_filter) != -1) { bFinded = 1; m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); } else { bFinded = 0; } } } else if (type == 2)//拼音 { BOOL bFinded = 0; m_filter.MakeUpper(); for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++) { if (bFinded && m_List1array.ElementAt(ii).ElementAt(0).IsEmpty()) { m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); continue; } if (m_List1array.ElementAt(ii).ElementAt(13 + nAdd).Find(m_filter) != -1\ || m_List1array.ElementAt(ii).ElementAt(14 + nAdd).Find(m_filter) != -1) { bFinded = 1; m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); } else { bFinded = 0; } } } else { BOOL bFinded = 0; for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++) { if (bFinded && m_List1array.ElementAt(ii).ElementAt(0).IsEmpty()) { m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); continue; } if (m_List1array.ElementAt(ii).ElementAt(0).Find(m_filter) != -1 || m_List1array.ElementAt(ii).ElementAt(1).Find(m_filter) != -1 || m_List1array.ElementAt(ii).ElementAt(2).Find(m_filter) != -1 || m_List1array.ElementAt(ii).ElementAt(4).Find(m_filter) != -1\ || m_List1array.ElementAt(ii).ElementAt(12 + nAdd).Find(m_filter) != -1\ || m_List1array.ElementAt(ii).ElementAt(11 + nAdd).Find(m_filter) != -1\ || m_List1array.ElementAt(ii).ElementAt(13 + nAdd).Find(m_filter) != -1\ || m_List1array.ElementAt(ii).ElementAt(14 + nAdd).Find(m_filter) != -1) { bFinded = 1; m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); } else { bFinded = 0; } } } } m_List1.m_arLabels.SetSize(count, 1); ii = count; m_List1.m_LabelCount = ii; m_List1.SetItemCountEx(ii); CString str; str.Format("单数:%d", ii); SetDlgItemText(IDC_STATIC2, str); if (!g_id.IsEmpty()) { for (int i = 0; i < m_List1.GetItemCount(); i++) { if (g_id == m_List1.GetItemText(i, 0)) { m_List1.SetItemState(i, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_List1.EnsureVisible(i, FALSE); break; } } } } void annualfee::OnBUTclose() { // TODO: Add your control notification handler code here GetParent()->SendMessage(WM_CLOSE); } void annualfee::OnButton1() { UpdateData(); m_filter.TrimLeft(); m_filter.TrimRight(); FillGrid(); } void annualfee::OnSelchangeCombo1() { // TODO: Add your control notification handler code here SetTimer(1, 100, NULL); } void annualfee::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default KillTimer(nIDEvent); OnButton1(); } BOOL annualfee::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class try { if (pMsg->message == WM_KEYDOWN) { switch (pMsg->wParam) { case VK_RETURN: OnButton1(); return 1; case 0x43: // copy if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_COPY); return TRUE; } break; case 0x56: //Ctrl + V: if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_PASTE); return TRUE; } break; case 0x58: // cut if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_CUT); return TRUE; } break; case 0x5A: //undo case 0x59: //redo if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_UNDO); return TRUE; } break; } } /* else if(pMsg->message==WM_LBUTTONDOWN) { CPoint pt; CRect rc,rc2; ::GetCursorPos (&pt); m_List1.GetWindowRect (rc2); pt.x-=rc2.left ; pt.y-=rc2.top ; m_List1.GetHeaderCtrl()->GetItemRect (0, rc); rc.right =rc.left +rc2.Width (); if(rc.PtInRect (pt)) return 1; }*/ return MyFormView::PreTranslateMessage(pMsg); } catch (...) { } return true; } //----------------------------------------------------------------- // remark by Jeff 2014-12-12 // 函数:GetNo // 描述:从str中解析出每个相片名,然后存入空的CStringArray中; // 参数: // str:选好的相片名串,如:"001,002,003" 后分隔符改为"|",结果应是"001|002|003" // array:空的数组,用来存放解析后的相片名; // 返回: // 注意:更换分隔符造成的问题,在该函数已解决; //----------------------------------------------------------------- void annualfee::GetNo(CString str, CStringArray &array) { if (!str.IsEmpty()) { #ifdef USE_SEP_VEB int pos = str.Find(SEPS_VEB); #else int pos = str.Find(","); #endif while (pos != -1) { array.Add(str.Left(pos)); str = str.Right(str.GetLength() - pos - 1); #ifdef USE_SEP_VEB pos = str.Find(SEPS_VEB); #else pos = str.Find(","); #endif } array.Add(str); } } extern int CALLBACK BrowseProc(HWND hwnd, UINT msg, LPARAM lParam, LPARAM lpData); /*{ switch(msg) { case BFFM_INITIALIZED: SendMessage(hwnd, BFFM_SETSELECTION, TRUE, NULL); break; case BFFM_SELCHANGED: { char szFileName[MAX_PATH]; LPITEMIDLIST pidlCurrent = (LPITEMIDLIST)lParam; SHGetPathFromIDList(pidlCurrent, szFileName); SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szFileName); } break; } return 0; }*/ void annualfee::GetSavePath(CString &path) { char lpszDisplayName[MAX_PATH], szFileName[MAX_PATH]; LPITEMIDLIST pidlDesktop, pidlCurrent; if (SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidlDesktop) == NOERROR) { BROWSEINFO bi; bi.hwndOwner = this->m_hWnd; bi.pidlRoot = pidlDesktop; bi.pszDisplayName = lpszDisplayName; bi.lpszTitle = "\n文档保存的目录:"; bi.ulFlags = BIF_STATUSTEXT&BIF_RETURNONLYFSDIRS; bi.lpfn = BrowseProc; bi.lParam = 0; bi.iImage = 0; pidlCurrent = SHBrowseForFolder(&bi); SHGetPathFromIDList(pidlCurrent, szFileName); path = szFileName; } } int annualfee::FindArray(CStringArray *pArray, CString *pStr) { for (int i = 0; i < pArray->GetSize(); i++) { if (pArray->ElementAt(i) == *pStr) return i; } return -1; } void annualfee::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here OnBUTmodify(); *pResult = 0; } void annualfee::OnRdblclkList2(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here OnBUTmodify2(); *pResult = 0; } void annualfee::OnButton2() { // TODO: Add your control notification handler code here UpdateData(); m_filter.TrimLeft(); m_filter.TrimRight(); FillGrid(2); } void annualfee::OnButton3() { // TODO: Add your control notification handler code here UpdateData(); m_filter.TrimLeft(); m_filter.TrimRight(); FillGrid(1); } void annualfee::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast(pNMHDR); // Take the default processing unless we set this to something else below. *pResult = 0; // First thing - check the draw stage. If it's the control's prepaint // stage, then tell Windows we want messages for every item. if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) { *pResult = CDRF_NOTIFYITEMDRAW; } else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) { // This is the prepaint stage for an item. Here's where we set the // item's text color. Our return value will tell Windows to draw the // item itself, but it will use the new color we set here. // We'll cycle the colors through red, green, and light blue. COLORREF crText; int pos = pLVCD->nmcd.dwItemSpec; if (pos % 2) pLVCD->clrTextBk = g_gridcol1; else pLVCD->clrTextBk = g_gridcol2; while (m_List1.m_arLabels.ElementAt(pos).ElementAt(0).IsEmpty()) { pos--; if (pos < 1)break; } if (atoi(m_List1.m_arLabels.ElementAt(pos).ElementAt(16)) == 0) crText = RGB(20, 133, 20); else if (atoi(m_List1.m_arLabels.ElementAt(pos).ElementAt(16)) == 1) crText = RGB(255, 255, 0); else crText = RGB(220, 0, 0); // Store the color back in the NMLVCUSTOMDRAW struct. pLVCD->clrText = crText; // Tell Windows to paint the control itself. *pResult = CDRF_DODEFAULT; } } void annualfee::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { m_bz = ""; UpdateData(0); return; } int iItem = m_List1.GetNextSelectedItem(pos); g_id = m_List1.GetItemText(iItem, 0); while (g_id == "") { iItem--; g_id = m_List1.GetItemText(iItem, 0); } m_bz = m_List1.GetItemText(iItem, 15); UpdateData(0); *pResult = 0; } void annualfee::HidePrice() { } void annualfee::OnBUTexport() { UpdateData(); m_filter.TrimLeft(); m_filter.TrimRight(); FillGrid(3); } void annualfee::OnBUTToPhotoPrint() { // TODO: Add your control notification handler code here ListToXLS(&m_List1, "c:\\服务费.xls", 0); } void annualfee::GetData() { CString filter = "time2<>''"; g_sendhead.bsql = 0; g_sendhead.code[0] = 228; g_sendhead.tabcount = 1; g_pMainWnd->ProcessChatMessageRequest2(filter); if (g_bSendOK == 0)return; DataToArray(&m_List1array); } void annualfee::OnBUTburncd2() { // TODO: Add your control notification handler code here if (IsHasRights2new(16) == 0)return; POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { AfxMessageBox("请先选中要交费的客人与年度!", MB_ICONINFORMATION); return; } int iItem = m_List1.GetNextSelectedItem(pos); int iItemBak = iItem; CString id = m_List1.GetItemText(iItem, 0); while (id == "") { iItem--; id = m_List1.GetItemText(iItem, 0); } for (int i = iItem; i < iItemBak; i++) { if (m_List1.GetItemText(i, 7) != "已交") { AfxMessageBox("请先交清以往年度!", MB_ICONINFORMATION); return; } } CString name = m_List1.GetItemText(iItem, 1) + "," + m_List1.GetItemText(iItem, 2); iItem = iItemBak; CString year = m_List1.GetItemText(iItem, 5); CString date = m_List1.GetItemText(iItem, 8); name.TrimLeft(","); name.TrimRight(","); name = "客人:" + name; CString str; str.Format("%s\r\n年度:%s\r\n确认客人名称与交费年度无误? 是否继续?", name, year); if (AfxMessageBox(str, MB_YESNO | MB_ICONINFORMATION) != IDYES) return; CString sql; str.Format("%s\r\n年度:%s\r\n客人年费是否交清?", name, year); if (AfxMessageBox(str, MB_YESNO | MB_ICONINFORMATION) != IDYES) sql.Format("delete from annualfee where [id]='%s' and [date]='%s'", id, date); else sql.Format("delete from annualfee where [id]='%s' and [date]='%s'***insert into annualfee([id],[year],[date],[clerk])values('%s','%s','%s','%s')", id, date, id, year, g_date, g_user.name); g_sendhead.bsql = 1; g_pMainWnd->ProcessChatMessageRequest2(sql); if (g_bSendOK == 0)return; AfxMessageBox("保存成功!", MB_ICONINFORMATION); GetData(); FillGrid(); } void annualfee::OnBUTmodify2() { // TODO: Add your control notification handler code here UpdateData(); POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { return; } int iItem = m_List1.GetNextSelectedItem(pos); CString id = m_List1.GetItemText(iItem, 0); while (id == "") { iItem--; id = m_List1.GetItemText(iItem, 0); } CString sql; sql.Format("update dindan set bz='%s' where id='%s'", m_bz, id); g_sendhead.bsql = 1; g_pMainWnd->ProcessChatMessageRequest2(sql); if (g_bSendOK == 0)return; AfxMessageBox("保存成功!", MB_ICONINFORMATION); GetData(); FillGrid(); } void annualfee::OnBUTburncd() { // TODO: Add your control notification handler code here POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { return; } int iItem = m_List1.GetNextSelectedItem(pos); CString id = m_List1.GetItemText(iItem, 0); while (id == "") { iItem--; id = m_List1.GetItemText(iItem, 0); } Booking2 dlg; dlg.m_id = id; dlg.m_bModify = 1; if (dlg.DoModal() == IDOK) { GetData(); FillGrid(); } } void annualfee::OnBUTmodify() { // TODO: Add your control notification handler code here POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { return; } int iItem = m_List1.GetNextSelectedItem(pos); CString m_id = m_List1.GetItemText(iItem, 0); while (m_id == "") { iItem--; m_id = m_List1.GetItemText(iItem, 0); } char no[100]; memset(no, 0, 100); #ifdef VC60 strcpy(no, m_id); #else _tcscpy_s(no, 100, m_id); #endif g_nSendCode = 38; g_pMainWnd->ProcessChatMessageRequest2((BYTE*)no, 100); g_nSendCode = 0; if (g_bSendOK == 0) { return; } CString path = g_mainpath + "\\1.jpg"; ::DeleteFile(path); // 删除客户端目录下的1.jpg; CFile fp; fp.Open(path, CFile::modeCreate | CFile::modeWrite); fp.Write(g_pData, g_nLeng); fp.Close(); ShellExecute(NULL, _T("open"), path, NULL, NULL, SW_SHOWMAXIMIZED); }