// Account.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "Account.h" #include "MyMdi.H" #include "SetLeftBar.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //BOOL CALLBACK EnumChildProc_Accout(HWND hwnd, LPARAM lParam); ///////////////////////////////////////////////////////////////////////////// // Account IDC_EDIT2 IMPLEMENT_DYNCREATE(Account, MyFormView) Account::Account(): MyFormView(Account::IDD) { //{{AFX_DATA_INIT(Account) m_account = _T(""); m_psw = _T(""); m_psw2 = _T(""); m_discount = "9.0"; m_bAddNew = 1; m_discount2 = _T("9.0"); m_nPurviewCounts = 66; //}}AFX_DATA_INIT } Account::~Account() { } void Account::DoDataExchange(CDataExchange* pDX) { MyFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(Account) DDX_Control(pDX, IDC_SPIN1, m_spin1); DDX_Control(pDX, IDC_COMBOname, m_comboname); DDX_Control(pDX, IDC_LIST2, m_List1); DDX_Control(pDX, IDC_STATIC1, m_static1); DDX_Text(pDX, IDC_EDITaccount, m_account); DDX_Text(pDX, IDC_EDITpsw, m_psw); DDX_Text(pDX, IDC_EDITpsw2, m_psw2); DDX_Text(pDX, IDC_EDIT2, m_discount); DDX_Text(pDX, IDC_EDIT3, m_discount2); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(Account, MyFormView) //{{AFX_MSG_MAP(Account) ON_BN_CLICKED(IDC_BUTsave, OnBUTsave) ON_BN_CLICKED(IDC_BUTdel, OnBUTdel) ON_BN_CLICKED(IDC_BUTclose, OnBUTclose) ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2) ON_BN_CLICKED(IDC_BUTadd, OnBUTadd) ON_BN_CLICKED(IDC_BUTbm1, OnBUTbm1) ON_BN_CLICKED(IDC_BUTbm6, OnBUTbm6) ON_BN_CLICKED(IDC_BUTbm2, OnBUTbm2) ON_BN_CLICKED(IDC_BUTbm3, OnBUTbm3) ON_BN_CLICKED(IDC_BUTbm4, OnBUTbm4) ON_BN_CLICKED(IDC_BUTbm5, OnBUTbm5) ON_BN_CLICKED(IDC_BUTleftbar, OnBUTleftbar) ON_BN_CLICKED(IDC_CHECK27, OnCheck27) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_ResetPW_BTN, OnBnClickedResetpwBtn) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Account diagnostics #ifdef _DEBUG void Account::AssertValid() const { MyFormView::AssertValid(); } void Account::Dump(CDumpContext& dc) const { MyFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // Account message handlers void Account::OnInitialUpdate() { //AfxMessageBox("用户管理"); MyFormView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class CMyMdi Mdi; Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this); #ifdef LKAY_VERSION GetDlgItem(IDC_CHECK54)->ShowWindow(SW_SHOW); #endif #ifdef BASIC_VERSION GetDlgItem(IDC_BUTleftbar)->ShowWindow(0); #ifdef BASIC_ADDDRESS GetDlgItem(IDC_STATIC2)->ShowWindow(1); GetDlgItem(IDC_CHECK40)->ShowWindow(1); GetDlgItem(IDC_CHECK41)->ShowWindow(1); GetDlgItem(IDC_CHECK42)->ShowWindow(1); GetDlgItem(IDC_CHECK43)->ShowWindow(1); GetDlgItem(IDC_CHECK44)->ShowWindow(1); #endif #endif #ifdef ENTERPRISE_VERSION GetDlgItem(IDC_CHECK29)->ShowWindow(1); #endif // Here we create the outbar control using the splitter as its parent // and setting its id to the first pane. #if 1 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_Accout, 0); m_comboname.GetWindowRect(rc2); ScreenToClient(rc2); rc2.bottom += 200; m_comboname.MoveWindow(rc2); #endif ((CEdit*)GetDlgItem(IDC_ResetPW_BTN))->ShowWindow(SW_HIDE); if(g_user.account == _T("admin") && g_user.name == _T("管理员")) ((CEdit*)GetDlgItem(IDC_ResetPW_BTN))->ShowWindow(SW_SHOW); m_spin1.SetRange(0, 10); m_static1.SetFont(&g_titlefont); m_List1.SetHeadings("账号, 60;姓名, 60;部门,60"); m_List1.LoadColumnInfo(112); // Jeff初始化,向服务器获取用户信息; g_sendhead.bsql = 0; g_sendhead.code[0] = 23; g_sendhead.tabcount = 1; g_pMainWnd->ProcessChatMessageRequest2(5); if (g_bSendOK == 0) return; DataToArray(&m_List1array); int i = 0; m_List1arrayBak.SetSize(m_List1array.GetSize()); for ( i = 0; i < m_List1array.GetSize(); i++) { m_List1arrayBak.ElementAt(i).Add(m_List1array.ElementAt(i).ElementAt(0)); // Jeff.账号; m_List1arrayBak.ElementAt(i).Add(m_List1array.ElementAt(i).ElementAt(1)); // Jeff.性名; m_List1arrayBak.ElementAt(i).Add(m_List1array.ElementAt(i).ElementAt(8)); // Jeff.部门; } // Jeff:这里需要做个小处理,不添加已有账号的姓名到下拉框中; #if 0// OldEdition; for( i=0; iSendMessage(WM_CLOSE); } void Account::ClearCtrl() { m_account = _T(""); m_psw = _T(""); m_psw2 = _T(""); m_comboname.SetCurSel(-1); UpdateData(false); // m_nPurviewCounts 权限数量; for (int i = 0; i < m_nPurviewCounts; i++) ((CButton*)GetDlgItem(IDC_CHECK1 + i))->SetCheck(0); } void Account::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here ListSelChange(); *pResult = 0; } void Account::ListSelChange() { #if 1 // Jeff 在选择列表时,启用删除按钮; GetDlgItem(IDC_BUTdel)->EnableWindow(); #endif POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { OnBUTadd(); return; } GetDlgItem(IDC_BUTleftbar)->EnableWindow(1); m_bAddNew = 0; GetDlgItem(IDC_EDITaccount)->EnableWindow(0); GetDlgItem(IDC_COMBOname)->EnableWindow(0); GetDlgItem(IDC_EDITpsw)->EnableWindow(0); GetDlgItem(IDC_EDITpsw2)->EnableWindow(0); int iItem = m_List1.GetNextSelectedItem(pos); CString account = m_List1.GetItemText(iItem, 0); for (int ii = 0; ii < m_List1array.GetSize(); ii++) { if (m_List1array.ElementAt(ii).ElementAt(0) == account) { CString name, rights; m_account = m_List1array.ElementAt(ii).ElementAt(0); name = m_List1array.ElementAt(ii).ElementAt(1); m_psw = m_psw2 = m_List1array.ElementAt(ii).ElementAt(2); rights = m_List1array.ElementAt(ii).ElementAt(3); m_discount.Format("%0.1f", atof(m_List1array.ElementAt(ii).ElementAt(5))); m_discount2.Format("%0.1f", atof(m_List1array.ElementAt(ii).ElementAt(6))); UpdateData(false); //int nIndex =0 ; int pos = m_comboname.FindString(0, name); if (pos != -1) m_comboname.SetCurSel(pos); else { m_comboname.InsertString(0, name); m_comboname.SetCurSel(0); } SetRights(rights); return; } } } void Account::OnBUTadd() // 添加新账号按钮; 添加时禁用删除按钮; { // TODO: Add your control notification handler code here CommboboxReLoad(); m_bAddNew = 1; GetDlgItem(IDC_EDITaccount)->EnableWindow(1); GetDlgItem(IDC_COMBOname)->EnableWindow(1); GetDlgItem(IDC_EDITpsw)->EnableWindow(1); GetDlgItem(IDC_EDITpsw2)->EnableWindow(1); ClearCtrl(); GetDlgItem(IDC_BUTleftbar)->EnableWindow(0); #if 1 // Jeff添加时禁用删除按钮; GetDlgItem(IDC_BUTdel)->EnableWindow(0); #endif } void Account::OnBUTsave() // 保存按钮; { // TODO: Add your control notification handler code here UpdateData(); CString name; CString rights = GetRights(); CString sql; if (m_bAddNew) { if (m_account.IsEmpty()) { AfxMessageBox("资料不全!", MB_ICONINFORMATION); return; } int pos = m_comboname.GetCurSel(); if (pos == -1) { AfxMessageBox("资料不全!", MB_ICONINFORMATION); return; } m_comboname.GetLBText(pos, name); if (m_psw != m_psw2) { AfxMessageBox("密码不一至!", MB_ICONINFORMATION); return; } if (IsExist(m_account, name)) { AfxMessageBox("已有此账号或姓名,请重新输入!", MB_ICONINFORMATION); return; } // 使用MD5加密密码; BYTE byPsw[50] = {0}; #ifndef UNICODE memcpy(byPsw, (LPCSTR)m_psw, m_psw.GetLength()); #endif CMD5 md5; md5.SetBYTEText(byPsw, strlen((char*)byPsw)); CString strMD5 = md5.GetMD5Digest(); sql.Format("insert into [user](account,name,psw,rights,discount,discount2) values('%s','%s','%s','%s','%0.1f','%0.1f')", m_account, name, strMD5, rights, atof(m_discount), atof(m_discount2)); sql += USER_REF; g_sendhead.bsql = 1; g_pMainWnd->ProcessChatMessageRequest2(sql); if (g_bSendOK == 0) return; #if 1 // Jeff添加成功后,要删除m_strNameArray里的存根; for (int i(0); i < m_strNameArray.GetSize(); i++) { if (name == m_strNameArray.ElementAt(i)) { m_strNameArray.RemoveAt(i); break; } } ClearCtrl(); CommboboxReLoad(); #endif GetData(); } else//修改 { sql.Format("update [user] set [rights]='%s',[discount]='%0.1f',[discount2]='%0.1f' where [account]='%s' ", rights, atof(m_discount), atof(m_discount2), m_account); sql += USER_REF; g_sendhead.bsql = 1; g_pMainWnd->ProcessChatMessageRequest2(sql); if (g_bSendOK == 0) return; GetData(); } UpdateData(FALSE); } void Account::OnBUTdel() // 删除按钮; { // TODO: Add your control notification handler code here POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos == NULL) { return; } if (AfxMessageBox("确认删除吗?", MB_YESNO | MB_ICONINFORMATION) != IDYES)return; int iItem = m_List1.GetNextSelectedItem(pos); CString account = m_List1.GetItemText(iItem, 0); if (account == "admin") { AfxMessageBox("管理员不能删除"); return; } CString sql; sql.Format("delete from [user] where [account]='%s' ", account); sql += USER_REF; g_sendhead.bsql = 1; g_pMainWnd->ProcessChatMessageRequest2(sql); if (g_bSendOK == 0) return; #if 1 // Jeff 删除时要清空文本框; CString strName = m_List1.GetItemText(iItem, 1); //BOOL bNameInArray = FALSE; ClearCtrl(); //for ( int i(0); i < m_strNameArray.GetSize(); i++) //{ // if ( name == m_strNameArray.ElementAt(i)) // { // bNameInArray = TRUE; // break; // } // } //if ( !bNameInArray ) // { m_strNameArray.Add(strName); //} CommboboxReLoad(); #endif GetData(); } void Account::GetData() { g_sendhead.bsql = 0; g_sendhead.code[0] = 23; g_sendhead.tabcount = 1; g_pMainWnd->ProcessChatMessageRequest2(23); DataToArray(&m_List1array); // Jeff add:在getdata里处理; m_List1arrayBak.RemoveAll(); m_List1arrayBak.SetSize(m_List1array.GetSize()); for (int i = 0; i < m_List1array.GetSize(); i++) { m_List1arrayBak.ElementAt(i).Add(m_List1array.ElementAt(i).ElementAt(0)); m_List1arrayBak.ElementAt(i).Add(m_List1array.ElementAt(i).ElementAt(1)); m_List1arrayBak.ElementAt(i).Add(m_List1array.ElementAt(i).ElementAt(8)); } // FillGrid(); } BOOL Account::IsExist(CString account, CString name) { for (int i = 0; i < m_List1array.GetSize(); i++) { if (account == m_List1array.ElementAt(i).ElementAt(0))return 1; if (name == m_List1array.ElementAt(i).ElementAt(1))return 1; } return 0; } CString Account::GetRights()//50 { CString ret, temp; // 权限个数; for (int i = 0; i < m_nPurviewCounts; i++) { temp.Format("%d", ((CButton*)GetDlgItem(IDC_CHECK1 + i))->GetCheck()); ret += temp; } return ret; } void Account::SetRights(CString rights) { int i = 0; for ( i = 0; i < rights.GetLength(); i++) { if (i >= m_nPurviewCounts) break; ((CButton*)GetDlgItem(IDC_CHECK1 + i))->SetCheck(rights.GetAt(i) == '1'); } for (i = rights.GetLength(); i < m_nPurviewCounts; i++) { ((CButton*)GetDlgItem(IDC_CHECK1 + i))->SetCheck(0); } } void Account::OnBUTbm6() { // TODO: Add your control notification handler code here POSITION pos; pos = m_List1.GetFirstSelectedItemPosition(); if (pos) { int iItem = m_List1.GetNextSelectedItem(pos); CString account = m_List1.GetItemText(iItem, 0); if (account == "admin") { SetRights("\ 0000000000\ 0000000000\ 0000000000\ 0000000000\ 0000000001\ 0000000000\ 000000"); return; } } SetRights("\ 0000000000\ 0000000000\ 0000000000\ 0000000000\ 0000000000\ 0000000000\ 000000"); } void Account::OnBUTbm1() { // TODO: Add your control notification handler code here ((CButton*)GetDlgItem(IDC_CHECK1 + 0))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 15))->SetCheck(1); } void Account::OnBUTbm2() { // TODO: Add your control notification handler code here ((CButton*)GetDlgItem(IDC_CHECK1 + 4))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 5))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 8))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 15))->SetCheck(1); } void Account::OnBUTbm3() { // TODO: Add your control notification handler code here ((CButton*)GetDlgItem(IDC_CHECK1 + 5))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 6))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 7))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 8))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 9))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 10))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 11))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 12))->SetCheck(1); } void Account::OnBUTbm4() { // TODO: Add your control notification handler code here ((CButton*)GetDlgItem(IDC_CHECK1 + 16))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 17))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 18))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 19))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 20))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 21))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1 + 22))->SetCheck(1); } void Account::OnBUTbm5() { // TODO: Add your control notification handler code here SetRights("\ 1111111111\ 1111111111\ 1111111111\ 1111111111\ 1111111111\ 1111111111\ 111111"); BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK50))->GetCheck(); ((CButton*)GetDlgItem(IDC_CHECK50))->SetCheck(!bCheck); } void Account::OnBUTleftbar() // 界面设置 { // TODO: Add your control notification handler code here SetLeftBar dlg; dlg.m_account = m_account; dlg.DoModal(); } void Account::OnCheck27() { // TODO: Add your control notification handler code here // if(((CButton*)GetDlgItem(IDC_CHECK27))->GetCheck()) // { // } } /************************************************************************/ /* 函数:EnumChildProc_Accout 参数: 返回: 要求: 注意: 示例: */ /************************************************************************/ BOOL Account::EnumChildProc_Accout(HWND hwnd, LPARAM lParam) { // 1182 与 537 是资源对话框的像素值;而不是由GetWindowsRect获得的; static float fWidthScale = ((float)g_rc.Width()) / 1182.0; static float fHeightScale = ((float)g_rc.Height()) / 537.0; // static float fWidthScale = ((float)g_rc.Width()) / m_rct.Width(); // static float fHeightScale = ((float)g_rc.Height()) / m_rct.Height(); CRect rtCtrl, rtWnd; // 子窗口,父窗口; if (hwnd) { float temp; TCHAR szClassName[MAX_PATH]; ::GetClassName(hwnd, szClassName, MAX_PATH); ::GetWindowRect(hwnd, &rtCtrl); // 获取控件大小; ::GetWindowRect(::GetParent(hwnd), &rtWnd); // 获取父窗口大小; // CString strRect; // strRect.Format(_T("A %d,%d,%d,%d"),rtCtrl.left,rtCtrl.top,rtCtrl.right,rtCtrl.bottom); // AfxMessageBox(strRect); // // strRect.Format(_T("B %d,%d,%d,%d"),rtWnd.left,rtWnd.top,rtWnd.right,rtWnd.bottom); // AfxMessageBox(strRect); //if ( _tcscmp(szClassName,_T("EDIT")) != 0 ) if ( strcmp(szClassName,_T("EDIT")) != 0 ) { rtCtrl.OffsetRect(-rtWnd.left, -rtWnd.top); temp = (float)rtCtrl.left*fWidthScale; rtCtrl.left = (int)temp + g_dx; temp = (float)rtCtrl.top*fHeightScale; rtCtrl.top = (int)temp + g_dy; temp = (float)rtCtrl.right*fWidthScale; rtCtrl.right = (int)temp + g_dx; temp = (float)rtCtrl.bottom*fHeightScale; rtCtrl.bottom = (int)temp + g_dy; } else { rtCtrl.OffsetRect(-rtWnd.left, -rtWnd.top); temp = (float)rtCtrl.left*fWidthScale; rtCtrl.left = (int)temp + g_dx; temp = (float)rtCtrl.top*fHeightScale; rtCtrl.top = (int)temp + g_dy; temp = (float)rtCtrl.right*fWidthScale; rtCtrl.right = (int)temp + g_dx; temp = (float)rtCtrl.bottom*fHeightScale; rtCtrl.bottom = (int)temp + g_dy; } ::MoveWindow(hwnd, rtCtrl.left, rtCtrl.top, rtCtrl.Width(), rtCtrl.Height(), TRUE); return TRUE; } else { return FALSE; } } void Account::OnBnClickedResetpwBtn() // 重置员工密码; { if(g_user.account != _T("admin") || g_user.name != _T("管理员")) return; if(m_account == _T("")) { MessageBox(_T("请选择要重置的用户")); return; } if(AfxMessageBox(_T("确定要重置此用户的密码?"), MB_YESNO | MB_ICONINFORMATION) != IDYES)return; CString strSql = _T(""); strSql.Format(_T("update [user] set [psw]='81dc9bdb52d04dc20036dbd8313ed055' where [account]='%s'"), m_account); strSql += USER_REF; g_sendhead.bsql = 1; g_pMainWnd->ProcessChatMessageRequest2(strSql); if (g_bSendOK == 0) return; MessageBox(_T("密码重置成功,当前密码:1234")); }