// CharTreeView.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "AdminToolClient.h" #include "UserCharTreeView.h" #include "GlobalFunctions.h" #include "UserInfoDoc.h" #include "CharacterDoc.h" #include "PacketManager.h" #include "ModifyCharNameDlg.h" #include "AddBlockUserDlg.h" #include "GMLogMsgDlg.h" // CUserCharTreeView IMPLEMENT_DYNCREATE(CUserCharTreeView, CFormView) CUserCharTreeView::CUserCharTreeView() : CFormView(CUserCharTreeView::IDD) { m_clrR = rand() % 255; m_clrG = rand() % 255; m_clrB = rand() % 255; m_dwWndKey = 0; } CUserCharTreeView::~CUserCharTreeView() { m_hImageList.DeleteImageList(); m_imgCharTree.DeleteImageList(); } void CUserCharTreeView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_CHARTREE, m_ctrlCharTree); } BEGIN_MESSAGE_MAP(CUserCharTreeView, CFormView) ON_WM_CONTEXTMENU() ON_WM_CTLCOLOR() ON_NOTIFY(NM_DBLCLK, IDC_CHARTREE, OnNMDblclkChartree) ON_COMMAND(ID_CHAREDITNAME, OnModifyCharName) ON_NOTIFY(NM_RCLICK, IDC_CHARTREE, OnNMRclickChartree) ON_COMMAND(ID_ACCOUNT_BLOCK, OnBlockAccount) ON_COMMAND(ID_BLOCK_CHARACTER, OnBlockCharacter) ON_COMMAND(ID_DELETE_CHAR, OnDeleteChar) ON_COMMAND(ID_FORCED_DIS, OnForcedDis) ON_NOTIFY(TVN_SELCHANGED, IDC_CHARTREE, OnTvnSelchangedChartree) ON_COMMAND(ID_GMLOGMANAGE_UID, OnGmlogmanageUid) ON_COMMAND(ID_GMLOGMANAGE_CID, OnGmlogmanageCid) END_MESSAGE_MAP() // CUserCharTreeView Áø´ÜÀÔ´Ï´Ù. #ifdef _DEBUG void CUserCharTreeView::AssertValid() const { CFormView::AssertValid(); } void CUserCharTreeView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG // CUserCharTreeView ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. HBRUSH CUserCharTreeView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); pDC->SetBkColor(RGB(0, 0, 0)); pDC->SetTextColor(RGB(255, 255, 255)); if(nCtlColor == CTLCOLOR_DLG) { HBRUSH m_hBrush; m_hBrush = CreateSolidBrush(RGB(m_clrR, m_clrG, m_clrB)); return m_hBrush; } else { return hbr; } } void CUserCharTreeView::OnInitialUpdate() { CFormView::OnInitialUpdate(); m_hImageList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 3, 3); m_hImageList.Add(AfxGetApp()->LoadIcon(IDI_UID)); m_hImageList.Add(AfxGetApp()->LoadIcon(IDI_SERVER)); m_hImageList.Add(AfxGetApp()->LoadIcon(IDI_CHARACTER)); m_hImageList.Add(AfxGetApp()->LoadIcon(IDI_BLOCK)); m_ctrlCharTree.SetImageList(&m_hImageList, TVSIL_NORMAL); SetUIString(this->m_hWnd, IDC_CHARTREE_01, "IDC_CHARTREE_01"); } HTREEITEM CUserCharTreeView::InsertItemEX( HTREEITEM hNode, unsigned char cIcon, CString strText ) { TV_INSERTSTRUCT tvInsert; TCHAR szText[256]; _sntprintf(szText, sizeof(szText), _T("%s"), strText); tvInsert.hParent = hNode; tvInsert.hInsertAfter = TVI_LAST; tvInsert.item.pszText = szText; tvInsert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvInsert.item.iImage = cIcon; tvInsert.item.iSelectedImage = cIcon; return m_ctrlCharTree.InsertItem(&tvInsert); } void CUserCharTreeView::OnContextMenu(CWnd* pWnd, CPoint point) { // Æ®¸® ³ëµå ´Ü°è¿¡ ¸Â´Â ÄÁÅØ½ºÆ® ¸Þ´º »ý¼º if (pWnd->GetSafeHwnd() == m_ctrlCharTree.GetSafeHwnd()) { if (NULL != m_ctrlCharTree.GetSelectedItem()) { CMenu muTemp, *pContextMenu; muTemp.LoadMenu(IDR_CONTEXTMENU); m_stLastBlockInfo.m_cType = BLOCK_INFO::NONE; if (m_hUIDNode == m_ctrlCharTree.GetSelectedItem()) { pContextMenu = muTemp.GetSubMenu(0); pContextMenu->ModifyMenu(0, MF_STRING | MF_BYPOSITION, ID_ACCOUNT_BLOCK, GetLocalString("MENU_016")); pContextMenu->ModifyMenu(2, MF_STRING | MF_BYPOSITION, ID_FORCED_DIS, GetLocalString("MENU_017")); pContextMenu->ModifyMenu(4, MF_STRING | MF_BYPOSITION, ID_GMLOGMANAGE_UID, GetLocalString("ADDED_STRING_045")); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); } /* if (m_hUIDNode == m_ctrlCharTree.GetParentItem( m_ctrlCharTree.GetSelectedItem())) { pContextMenu = muTemp.GetSubMenu(1); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); } */ else if(NULL == m_ctrlCharTree.GetChildItem( m_ctrlCharTree.GetSelectedItem())) { pContextMenu = muTemp.GetSubMenu(2); pContextMenu->ModifyMenu(0, MF_STRING | MF_BYPOSITION, ID_CHAREDITNAME, GetLocalString("MENU_018")); pContextMenu->ModifyMenu(2, MF_STRING | MF_BYPOSITION, ID_BLOCK_CHARACTER, GetLocalString("MENU_019")); pContextMenu->ModifyMenu(4, MF_STRING | MF_BYPOSITION, ID_GMLOGMANAGE_CID, GetLocalString("ADDED_STRING_045")); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); } } } } void CUserCharTreeView::UserCharTreeSet() { const unsigned char IDX_UID = 0; const unsigned char IDX_SERVER = 1; const unsigned char IDX_CHARACTER = 2; const unsigned char IDX_BLOCK = 3; CUserInfoDoc* Doc = static_cast(GetDocument()); if (Doc && Doc->m_lpUserInfo) { CString report; CCharacterDoc::CharDocInfo::isListCharIdx::iterator pos = Doc->m_lpUserInfo->m_listTreeInfo.begin(); CCharacterDoc::CharDocInfo::isListCharIdx::iterator end = Doc->m_lpUserInfo->m_listTreeInfo.end(); CCharacterDoc::In_ServerCharacter lpServerCharacter; m_dwWndKey = Doc->m_lpUserInfo->m_dwDocKey; // UID ³ëµå »ðÀÔ m_hUIDNode = InsertItemEX(NULL, IDX_UID, _T("")); for(; pos != end; ++pos) { CString szServerGroupName, szCharInfo; lpServerCharacter = (*pos); // UID ³ëµå °»½Å- ¸î¹øÂ° ½½·Ô¿¡ ij¸¯ÀÌ ÀÖÀ»Áö ¸ð¸£´Ï ÀÌ·¸°Ô¶óµµ- _- unsigned long dwTempUID = lpServerCharacter.CharIdx[0].m_UID; if(0 == dwTempUID) dwTempUID = lpServerCharacter.CharIdx[1].m_UID; if(0 == dwTempUID) dwTempUID = lpServerCharacter.CharIdx[2].m_UID; if(0 == dwTempUID) dwTempUID = lpServerCharacter.CharIdx[3].m_UID; if(0 == dwTempUID) dwTempUID = lpServerCharacter.CharIdx[4].m_UID; if (0 != dwTempUID) { szServerGroupName.Format(_T("%u ID"), dwTempUID); m_ctrlCharTree.SetItemText(m_hUIDNode, szServerGroupName); Doc->SetTitle(szServerGroupName); // ¹®¼­ ŸÀÌÆ² ¹Ù // ÇØ´ç UID°¡ GM ·Î±×¸¦ °¡Áö°í ÀÖ´ÂÁö È®ÀÎ ¿äû CPacketMgr::GetInstance()->SendPktGMLogMsg( PktAdminMgr::PktGMLogMsg::LOG_CONFIRM, lpServerCharacter.dwServerGroup, dwTempUID); } // ¼­¹ö±º ³ëµå »ðÀÔ ¹× °»½Å CString strServerName; CCharacterDoc::GetInstance().GetServerName(lpServerCharacter.dwServerGroup, strServerName); m_hServerNode = InsertItemEX(m_hUIDNode, IDX_SERVER, strServerName); // ij¸¯ÅÍ ³ëµå »ðÀÔ ¹× °»½Å for (int slot = 0; slot < (int)lpServerCharacter.dwCharCount; slot++) { szCharInfo.Format(_T("%u %s"), lpServerCharacter.CharIdx[slot].m_CID, lpServerCharacter.CharIdx[slot].m_szCharName ); InsertItemEX(m_hServerNode, IDX_CHARACTER, szCharInfo); // ÇØ´ç CID°¡ GM ·Î±×¸¦ °¡Áö°í ÀÖ´ÂÁö È®ÀÎ ¿äû CPacketMgr::GetInstance()->SendPktGMLogMsg( PktAdminMgr::PktGMLogMsg::LOG_CONFIRM, lpServerCharacter.dwServerGroup, dwTempUID, lpServerCharacter.CharIdx[slot].m_CID); } } } } // Æ®¸®ÀÇ ¾ÆÀÌÅÛÀ» ´õºí Ŭ¸¯ÇßÀ» ¶§ÀÇ À̺¥Æ® ó¸® ÇÔ¼ö void CUserCharTreeView::OnNMDblclkChartree(NMHDR *pNMHDR, LRESULT *pResult) { if (SEL_TREEITEM_INFO::CHAR_NODE == m_stSelTreeItemInfo.m_cSelType) { CUserInfoDoc* Doc = static_cast(GetDocument()); unsigned int dwDocKey = Doc->m_lpUserInfo->m_dwDocKey; // dwCID : ÇöÀç Æ®¸®¿¡¼­ ¼±ÅÃÇÑ CID // Doc->m_lpUserInfo->m_ModifyCharacter->GetCID() : ¿¡µðÆÃ ÁßÀÎ CID // ÇöÀç ¿¡µðÆÃ ÁßÀΠij¸¯ÅͰ¡ ¾Æ´Ò¶§ if ((CCharacterDoc::CharDocInfo::EMPTY == Doc->m_lpUserInfo->m_cCharacterState) || (CCharacterDoc::CharDocInfo::FINISH == Doc->m_lpUserInfo->m_cCharacterState)) { if (NULL != Doc->m_lpUserInfo->m_ModifyCharacter) { CPacketMgr::GetInstance()->SendCloseCharacter(m_stSelTreeItemInfo.m_dwServerGroup, Doc->m_lpUserInfo->m_ModifyCharacter->GetCID(), dwDocKey); } Doc->m_lpUserInfo->m_cCharacterState = CCharacterDoc::CharDocInfo::LOADING; if (NULL != Doc->m_lpUserInfo) { CPacketMgr::GetInstance()->SendSelCharacter( m_stSelTreeItemInfo.m_szCharName, m_stSelTreeItemInfo.m_dwServerGroup, Doc->m_lpUserInfo->m_cOldServerGroup, m_stSelTreeItemInfo.m_dwUID, m_stSelTreeItemInfo.m_dwCID, dwDocKey); } else { Report(GetLocalString("ADDED_STRING_058"), FAILED); } } else { Report(GetLocalString("MSG_0133"), CAUTION); } } *pResult = 0; } // ÀÎÀÚ·Î ¹ÞÀº CID°¡ ºí·°µÈ ij¸¯ÅÍÀÎÁö ¾Æ´ÑÁö ÆÇº°ÇÏ´Â ÇÔ¼ö int CUserCharTreeView::IsBlockedChar(UINT CID) { // ºí·°µÈ ij¸¯ÀÎÁö ¾Æ´ÑÁö °Ë»çÇÑ ÈÄ ÀûÀýÇÑ ¾ÆÀÌÄÜ À妽º¸¦ ¸®ÅÏ return rand() % 5; } void CUserCharTreeView::OnModifyCharName() { CModifyCharNameDlg dlg(this); dlg.DoModal( ); } BOOL CUserCharTreeView::PreTranslateMessage(MSG* pMsg) { return CFormView::PreTranslateMessage(pMsg); } void CUserCharTreeView::OnNMRclickChartree(NMHDR *pNMHDR, LRESULT *pResult) { *pResult = 0; } void CUserCharTreeView::OnBlockAccount() { if(m_stSelTreeItemInfo.m_cSelType == SEL_TREEITEM_INFO::UID_NODE) { CAddBlockUserDlg BlockUserDlg(this); ZeroMemory(m_stLastBlockInfo.m_szCharacterName, BLOCK_INFO::MAX_NAME); m_stLastBlockInfo.m_cType = BLOCK_INFO::ACCOUNT; m_stLastBlockInfo.m_dwUID = m_stSelTreeItemInfo.m_dwUID; m_stLastBlockInfo.m_dwServerGroup = 10000; _sntprintf(m_stLastBlockInfo.m_szCharacterName, BLOCK_INFO::MAX_NAME, m_stSelTreeItemInfo.m_szAccountName); BlockUserDlg.DoModal(); } } void CUserCharTreeView::OnBlockCharacter() { if (m_stSelTreeItemInfo.m_cSelType == SEL_TREEITEM_INFO::CHAR_NODE) { CAddBlockUserDlg BlockUserDlg(this); ZeroMemory(m_stLastBlockInfo.m_szCharacterName, BLOCK_INFO::MAX_NAME); m_stLastBlockInfo.m_cType = BLOCK_INFO::CHARACTER; m_stLastBlockInfo.m_dwUID = m_stSelTreeItemInfo.m_dwUID; m_stLastBlockInfo.m_dwServerGroup = m_stSelTreeItemInfo.m_dwServerGroup; _sntprintf(m_stLastBlockInfo.m_szCharacterName, BLOCK_INFO::MAX_NAME, m_stSelTreeItemInfo.m_szCharName); BlockUserDlg.DoModal(); } } void CUserCharTreeView::OnDeleteChar() { /* if(m_stSelTreeItemInfo.m_cSelType == SEL_TREEITEM_INFO::CHAR_NODE) { CPacketMgr::GetInstance()->SendPktDelCharacter( m_stSelTreeItemInfo.m_dwUID, m_stSelTreeItemInfo.m_dwCID, m_stSelTreeItemInfo.m_dwServerGroup, m_dwWndKey); } */ } void CUserCharTreeView::OnForcedDis() { if(m_stSelTreeItemInfo.m_cSelType == SEL_TREEITEM_INFO::UID_NODE) { CPacketMgr::GetInstance()->SendForcedDis(m_stSelTreeItemInfo.m_dwUID); } } void CUserCharTreeView::OnTvnSelchangedChartree(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast(pNMHDR); HTREEITEM hCurrentNodeGrade = m_ctrlCharTree.GetSelectedItem(); if (NULL != hCurrentNodeGrade) { HTREEITEM hUpperNodeGrade = m_ctrlCharTree.GetParentItem(hCurrentNodeGrade); HTREEITEM hLowerNodeGrade = m_ctrlCharTree.GetChildItem(hCurrentNodeGrade); ZeroMemory(m_stSelTreeItemInfo.m_szAccountName, SEL_TREEITEM_INFO::MAX_NAME); ZeroMemory(m_stSelTreeItemInfo.m_szCharName, SEL_TREEITEM_INFO::MAX_NAME); if (NULL == hUpperNodeGrade) { // UID ³ëµå ¼±Åà : UID, °èÁ¤¸í ¾ò±â m_stSelTreeItemInfo.m_cSelType = SEL_TREEITEM_INFO::UID_NODE; CString temp_str = m_ctrlCharTree.GetItemText(hCurrentNodeGrade); _stscanf(temp_str, _T("%d %s"), &m_stSelTreeItemInfo.m_dwUID, &m_stSelTreeItemInfo.m_szAccountName); } else if(NULL == hLowerNodeGrade) { // ij¸¯ÅÍ ³ëµå ¼±Åà : UID, °èÁ¤¸í, ¼­¹ö±×·ì À妽º, CID, ij¸¯¸í ¾ò±â m_stSelTreeItemInfo.m_cSelType = SEL_TREEITEM_INFO::CHAR_NODE; CString temp_str = m_ctrlCharTree.GetItemText( m_ctrlCharTree.GetParentItem(m_ctrlCharTree.GetParentItem(hCurrentNodeGrade))); _stscanf(temp_str, _T("%d %s"), &m_stSelTreeItemInfo.m_dwUID, &m_stSelTreeItemInfo.m_szAccountName); temp_str = m_ctrlCharTree.GetItemText(m_ctrlCharTree.GetParentItem(hCurrentNodeGrade)); CCharacterDoc::GetInstance().GetServerIndex(temp_str, m_stSelTreeItemInfo.m_dwServerGroup); temp_str = m_ctrlCharTree.GetItemText(hCurrentNodeGrade); _stscanf(temp_str, _T("%d %s"), &m_stSelTreeItemInfo.m_dwCID, &m_stSelTreeItemInfo.m_szCharName); } else { // ¼­¹ö±×·ì ³ëµå ¼±Åà : UID, °èÁ¤¸í, ¼­¹ö±×·ì À妽º ¾ò±â m_stSelTreeItemInfo.m_cSelType = SEL_TREEITEM_INFO::GROUP_NODE; CString temp_str = m_ctrlCharTree.GetItemText(m_ctrlCharTree.GetParentItem(hCurrentNodeGrade)); _stscanf(temp_str, _T("%d %s"), &m_stSelTreeItemInfo.m_dwUID, &m_stSelTreeItemInfo.m_szAccountName); temp_str = m_ctrlCharTree.GetItemText(hCurrentNodeGrade); CCharacterDoc::GetInstance().GetServerIndex(temp_str, m_stSelTreeItemInfo.m_dwServerGroup); } } *pResult = 0; } void CUserCharTreeView::OnGmlogmanageUid() { if (SEL_TREEITEM_INFO::UID_NODE == m_stSelTreeItemInfo.m_cSelType) { CGMLogMsgDlg::DlgOwnerInfo stInfo; stInfo.m_dwUID = m_stSelTreeItemInfo.m_dwUID; stInfo.m_dwCID = 0; stInfo.m_dwServerGroup = m_stSelTreeItemInfo.m_dwServerGroup; CGMLogMsgDlg dlg(CGMLogMsgDlg::UID_LOG_TYPE, stInfo); dlg.DoModal(); } } void CUserCharTreeView::OnGmlogmanageCid() { if (SEL_TREEITEM_INFO::CHAR_NODE == m_stSelTreeItemInfo.m_cSelType) { CGMLogMsgDlg::DlgOwnerInfo stInfo; stInfo.m_dwUID = m_stSelTreeItemInfo.m_dwUID; stInfo.m_dwCID = m_stSelTreeItemInfo.m_dwCID; stInfo.m_dwServerGroup = m_stSelTreeItemInfo.m_dwServerGroup; CGMLogMsgDlg dlg(CGMLogMsgDlg::CID_LOG_TYPE, stInfo); dlg.DoModal(); } }