// PageGCMDSSlots.cpp : implementation file // #include "stdafx.h" #include "worldcreator.h" #include "PageGCMDSSlots.h" #include "DlgSkelpart.h" #include "DlgOutfitSlot.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageGCMDSSlots property page IMPLEMENT_DYNCREATE(CPageGCMDSSlots, CPropertyPage) CPageGCMDSSlots::CPageGCMDSSlots() : CPropertyPage(CPageGCMDSSlots::IDD) { //{{AFX_DATA_INIT(CPageGCMDSSlots) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_rpGCMDS = NULL; m_pCurListCtrl = NULL; } CPageGCMDSSlots::~CPageGCMDSSlots() { } void CPageGCMDSSlots::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageGCMDSSlots) DDX_Control(pDX, IDC_LIST_ATTACHMENTSLOT, m_ctrlAttachmentSlot); DDX_Control(pDX, IDC_LIST_OUTFITSLOT, m_ctrlOutfitSlot); DDX_Control(pDX, IDC_LIST_STATICSLOT, m_ctrlStaticSlot); DDX_Control(pDX, IDC_LIST_SKELPART, m_ctrlSkelpart); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageGCMDSSlots, CPropertyPage) //{{AFX_MSG_MAP(CPageGCMDSSlots) ON_WM_CONTEXTMENU() ON_COMMAND(ID_MENUITEM_ADDITEM, OnMenuitemAdditem) ON_COMMAND(ID_MENUITEM_EDITITEM, OnMenuitemEdititem) ON_COMMAND(ID_MENUITEM_DELETEITEM, OnMenuitemDeleteitem) ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_STATICSLOT, OnEndlabeleditListStaticslot) ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_ATTACHMENTSLOT, OnEndlabeleditListAttachmentslot) ON_COMMAND(ID_MENUITEM_MOVEUP, OnMenuitemMoveup) ON_COMMAND(ID_MENUITEM_MOVEDOWN, OnMenuitemMovedown) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageGCMDSSlots message handlers void CPageGCMDSSlots::UpdateDataByGCMDS( CZ3DGCMDS* pGCMDS ) { m_rpGCMDS = pGCMDS; if( NULL == m_rpGCMDS ) { return; } UpdateSkelpart(); UpdateOutfitSlot(); UpdateStaticSlot(); UpdateAttachmentSlot(); } BOOL CPageGCMDSSlots::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here DWORD dwExtStyle; dwExtStyle = m_ctrlSkelpart.GetExtendedStyle(); dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; m_ctrlSkelpart.SetExtendedStyle( dwExtStyle ); m_ctrlSkelpart.InsertColumn( 0, "»À´ë À̸§", LVCFMT_LEFT, 90 ); m_ctrlSkelpart.InsertColumn( 1, "index", LVCFMT_LEFT, 55 ); dwExtStyle = m_ctrlOutfitSlot.GetExtendedStyle(); dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; m_ctrlOutfitSlot.SetExtendedStyle( dwExtStyle ); m_ctrlOutfitSlot.InsertColumn( 0, "", LVCFMT_LEFT, 20 ); m_ctrlOutfitSlot.InsertColumn( 1, "Slot À̸§", LVCFMT_LEFT, 80 ); m_ctrlOutfitSlot.InsertColumn( 2, "Layer", LVCFMT_LEFT, 45 ); dwExtStyle = m_ctrlStaticSlot.GetExtendedStyle(); dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; m_ctrlStaticSlot.SetExtendedStyle( dwExtStyle ); m_ctrlStaticSlot.InsertColumn( 0, "Slot À̸§", LVCFMT_LEFT, 90 ); dwExtStyle = m_ctrlAttachmentSlot.GetExtendedStyle(); dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; m_ctrlAttachmentSlot.SetExtendedStyle( dwExtStyle ); m_ctrlAttachmentSlot.InsertColumn( 0, "Slot À̸§", LVCFMT_LEFT, 90 ); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageGCMDSSlots::UpdateSkelpart() { std::map* pmap; std::map::iterator it; int i; char szTmp[100]; m_ctrlSkelpart.DeleteAllItems(); m_rpGCMDS->RetrieveSkelpartList( pmap ); for( it = pmap->begin(), i = 0; it != pmap->end(); ++it, ++i ) { m_ctrlSkelpart.InsertItem( i, g_TokSkeletonPartName.GetString(it->first) ); m_ctrlSkelpart.SetItemText( i, 1, itoa(it->second, szTmp, 10) ); } } void CPageGCMDSSlots::UpdateOutfitSlot() { std::vector* pvecOutfitSlot; std::vector* pvecOutfitSlotLayerCount; int i; char szTmp[100]; m_ctrlOutfitSlot.DeleteAllItems(); m_rpGCMDS->RetrieveOutfitSlot( pvecOutfitSlot, pvecOutfitSlotLayerCount ); for( i = 0; i < pvecOutfitSlot->size(); ++i ) { m_ctrlOutfitSlot.InsertItem( i, itoa(i, szTmp, 10) ); m_ctrlOutfitSlot.SetItemText( i, 1, g_TokSlotName.GetString((*pvecOutfitSlot)[i]) ); m_ctrlOutfitSlot.SetItemText( i, 2, itoa((*pvecOutfitSlotLayerCount)[i], szTmp, 10) ); } } void CPageGCMDSSlots::UpdateStaticSlot() { std::vector* pvec; int i; m_ctrlStaticSlot.DeleteAllItems(); m_rpGCMDS->RetrieveStaticSlot( pvec ); for( i = 0; i < pvec->size(); ++i ) { m_ctrlStaticSlot.InsertItem( i, g_TokSlotName.GetString( (*pvec)[i] ) ); } } void CPageGCMDSSlots::UpdateAttachmentSlot() { std::vector* pvec; int i; m_ctrlAttachmentSlot.DeleteAllItems(); m_rpGCMDS->RetrieveAttachmentSlot( pvec ); for( i = 0; i < pvec->size(); ++i ) { m_ctrlAttachmentSlot.InsertItem( i, g_TokSlotName.GetString( (*pvec)[i] ) ); } } void CPageGCMDSSlots::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here if( m_ctrlSkelpart.GetSafeHwnd() == pWnd->GetSafeHwnd() ) { m_pCurListCtrl = &m_ctrlSkelpart; } else if( m_ctrlOutfitSlot.GetSafeHwnd() == pWnd->GetSafeHwnd() ) { m_pCurListCtrl = &m_ctrlOutfitSlot; } else if( m_ctrlStaticSlot.GetSafeHwnd() == pWnd->GetSafeHwnd() ) { m_pCurListCtrl = &m_ctrlStaticSlot; } else if( m_ctrlAttachmentSlot.GetSafeHwnd() == pWnd->GetSafeHwnd() ) { m_pCurListCtrl = &m_ctrlAttachmentSlot; } else { //m_pCurListCtrl = NULL; CPropertyPage::OnContextMenu( pWnd, point ); return; } CMenu menuTmp; CMenu* pContextMenu; menuTmp.LoadMenu( IDR_MENU_GCMDS ); if( &m_ctrlOutfitSlot == m_pCurListCtrl ) { pContextMenu = menuTmp.GetSubMenu( 2 ); } else { pContextMenu = menuTmp.GetSubMenu( 1 ); } CPoint ptClient; UINT uFlags; ptClient = point; m_pCurListCtrl->ScreenToClient( &ptClient ); int nHit = m_pCurListCtrl->HitTest( ptClient, &uFlags ); if( -1 == nHit ) { pContextMenu->EnableMenuItem( ID_MENUITEM_ADDITEM, MF_ENABLED ); pContextMenu->EnableMenuItem( ID_MENUITEM_EDITITEM, MF_GRAYED ); pContextMenu->EnableMenuItem( ID_MENUITEM_DELETEITEM, MF_GRAYED ); pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEUP, MF_GRAYED ); pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEDOWN, MF_GRAYED ); } else { pContextMenu->EnableMenuItem( ID_MENUITEM_ADDITEM, MF_ENABLED ); pContextMenu->EnableMenuItem( ID_MENUITEM_EDITITEM, MF_ENABLED ); pContextMenu->EnableMenuItem( ID_MENUITEM_DELETEITEM, MF_ENABLED ); pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEUP, MF_ENABLED ); pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEDOWN, MF_ENABLED ); } pContextMenu->TrackPopupMenu( TPM_LEFTALIGN, point.x, point.y, this, NULL ); } void CPageGCMDSSlots::OnMenuitemAdditem() { // TODO: Add your command handler code here if( NULL == m_pCurListCtrl ) { return; } if( m_ctrlSkelpart.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { AddSkelpartItem(); } else if( m_ctrlOutfitSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { AddOutiftSlotItem(); } else if( m_ctrlStaticSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { AddStaticSlotItem(); } else if( m_ctrlAttachmentSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { AddAttachmentSlotItem(); } } void CPageGCMDSSlots::OnMenuitemEdititem() { // TODO: Add your command handler code here if( NULL == m_pCurListCtrl ) { return; } if( m_ctrlSkelpart.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { EditSkelpartItem(); } else if( m_ctrlOutfitSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { EditOutfitSlotItem(); } else if( m_ctrlStaticSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { EditStaticSlotItem(); } else if( m_ctrlAttachmentSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { EditAttachmentSlotItem(); } } void CPageGCMDSSlots::OnMenuitemDeleteitem() { // TODO: Add your command handler code here if( NULL == m_pCurListCtrl ) { return; } if( m_ctrlSkelpart.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { DeleteSkelpartItem(); } else if( m_ctrlOutfitSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { DeleteOutfitSlotItem(); } else if( m_ctrlStaticSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { DeleteStaticSlotItem(); } else if( m_ctrlAttachmentSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() ) { DeleteAttachmentSlotItem(); } } void CPageGCMDSSlots::AddSkelpartItem() { CDlgSkelpart dlg; std::map* pmap; std::map::iterator it; m_rpGCMDS->RetrieveSkelpartList( pmap ); dlg.SetupDialog( "", m_rpGCMDS, -1 ); while( 1 ) { if( IDOK != dlg.DoModal() ) { return; } if( CString("") == dlg.m_strSkelpartName ) { return; } if( -1 == dlg.m_nSkelpartIndex ) { return; } bool bDuplicated = false; for( it = pmap->begin(); it != pmap->end(); ++it ) { if( 0 == stricmp( dlg.m_strSkelpartName, g_TokSkeletonPartName.GetString( it->first ) ) ) { bDuplicated = true; } } if( bDuplicated ) { CString strTemp = dlg.m_strSkelpartName + " Áߺ¹"; MessageBox( strTemp, "¿¡·±µð..", MB_ICONERROR|MB_OK ); } else { break; } } Z3DTOK tok = g_TokSkeletonPartName.Add( dlg.m_strSkelpartName ); (*pmap)[tok] = dlg.m_nSkelpartIndex; UpdateSkelpart(); LVFINDINFO lvfi; lvfi.flags = LVFI_STRING; lvfi.psz = dlg.m_strSkelpartName.LockBuffer(); int nIdx = m_ctrlSkelpart.FindItem( &lvfi, -1 ); dlg.m_strSkelpartName.UnlockBuffer(); m_ctrlSkelpart.EnsureVisible( nIdx, FALSE ); m_ctrlSkelpart.SetItemState( nIdx, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); } void CPageGCMDSSlots::EditSkelpartItem() { CDlgSkelpart dlg; std::map* pmap; std::map::iterator it, itCurrent; POSITION pos = m_ctrlSkelpart.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; m_rpGCMDS->RetrieveSkelpartList( pmap ); char szTmp[300]; m_ctrlSkelpart.GetItemText( nIdx, 1, szTmp, 300 ); int nSkelIndex = atoi( szTmp ); m_ctrlSkelpart.GetItemText( nIdx, 0, szTmp, 300 ); itCurrent = pmap->find( g_TokSkeletonPartName.GetTOK(szTmp) ); if( itCurrent == pmap->end() ) { return; } dlg.SetupDialog( szTmp, m_rpGCMDS, nSkelIndex ); while( 1 ) { if( IDOK != dlg.DoModal() ) { return; } if( CString("") == dlg.m_strSkelpartName ) { return; } if( -1 == dlg.m_nSkelpartIndex ) { return; } bool bDuplicated = false; for( it = pmap->begin(); it != pmap->end(); ++it ) { if( it != itCurrent ) { if( 0 == stricmp( dlg.m_strSkelpartName, g_TokSkeletonPartName.GetString( it->first ) ) ) { bDuplicated = true; } } } if( bDuplicated ) { CString strTemp = dlg.m_strSkelpartName + " Áߺ¹"; MessageBox( strTemp, "¿¡·±µð..", MB_ICONERROR|MB_OK ); } else { break; } } if( 0 == stricmp( dlg.m_strSkelpartName, g_TokSkeletonPartName.GetString(itCurrent->first) ) ) { if( dlg.m_nSkelpartIndex == itCurrent->second ) { return; } else { itCurrent->second = dlg.m_nSkelpartIndex; } } else { pmap->erase(itCurrent); Z3DTOK tok = g_TokSkeletonPartName.Add( dlg.m_strSkelpartName ); (*pmap)[tok] = dlg.m_nSkelpartIndex; } UpdateSkelpart(); LVFINDINFO lvfi; lvfi.flags = LVFI_STRING; lvfi.psz = dlg.m_strSkelpartName.LockBuffer(); nIdx = m_ctrlSkelpart.FindItem( &lvfi, -1 ); dlg.m_strSkelpartName.UnlockBuffer(); m_ctrlSkelpart.EnsureVisible( nIdx, FALSE ); m_ctrlSkelpart.SetItemState( nIdx, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); } void CPageGCMDSSlots::DeleteSkelpartItem() { CDlgSkelpart dlg; std::map* pmap; std::map::iterator it; POSITION pos = m_ctrlSkelpart.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; m_rpGCMDS->RetrieveSkelpartList( pmap ); CString strTemp = m_ctrlSkelpart.GetItemText(nIdx, 0)+CString(" À» Áö¿ï°Õ°¡?"); if( IDCANCEL == MessageBox( strTemp, "Áú¹®", MB_ICONQUESTION|MB_OKCANCEL ) ) { return; } it = pmap->find( g_TokSkeletonPartName.GetTOK( m_ctrlSkelpart.GetItemText(nIdx, 0) ) ); if( it == pmap->end() ) { return; } pmap->erase(it); UpdateSkelpart(); } void CPageGCMDSSlots::AddOutiftSlotItem() { CDlgOutfitSlot dlg; std::vector* pvecSlot; std::vector* pvecLayer; m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer ); dlg.SetupDialog( "", 1 ); while( 1 ) { if( IDOK != dlg.DoModal() ) { return; } bool bDuplicated = false; for( int i = 0; i < pvecSlot->size(); ++i ) { if( 0 == stricmp( dlg.m_strOutfitSlotName, g_TokSlotName.GetString((*pvecSlot)[i]) ) ) { bDuplicated = true; break; } } if( bDuplicated ) { MessageBox( "Áߺ¹µÈ Outfit slot À̸§ÀÌ ÀÖ±¸¸ÕÀ¯", "¿¡·¯´ç", MB_ICONERROR|MB_OK ); } else { break; } } if( CString("") == dlg.m_strOutfitSlotName ) { return; } pvecSlot->push_back( g_TokSlotName.Add(dlg.m_strOutfitSlotName) ); pvecLayer->push_back( dlg.m_nLayerCount+1 ); UpdateOutfitSlot(); int nIdx = m_ctrlOutfitSlot.GetItemCount()-1; m_ctrlOutfitSlot.EnsureVisible(nIdx, FALSE); m_ctrlOutfitSlot.SetItemState( nIdx, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); } void CPageGCMDSSlots::EditOutfitSlotItem() { CDlgOutfitSlot dlg; std::vector* pvecSlot; std::vector* pvecLayer; POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; m_ctrlOutfitSlot.EnsureVisible( nIdx, FALSE ); m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer ); dlg.SetupDialog( (*pvecSlot)[nIdx], (*pvecLayer)[nIdx] ); while( 1 ) { if( IDOK != dlg.DoModal() ) { return; } bool bDuplicated = false; for( int i = 0; i < pvecSlot->size(); ++i ) { if( nIdx != i ) { if( 0 == stricmp( dlg.m_strOutfitSlotName, g_TokSlotName.GetString((*pvecSlot)[i]) ) ) { bDuplicated = true; break; } } } if( bDuplicated ) { MessageBox( "Áߺ¹µÈ Outfit slot À̸§ÀÌ ÀÖ±¸¸ÕÀ¯", "¿¡·¯´ç", MB_ICONERROR|MB_OK ); } else { if( CString("") == dlg.m_strOutfitSlotName ) { MessageBox( "Outfit slot À̸§ÀÌ ºñ¾îÀÖÀ¸¹È ¾ÈµÇÁö¶ó", "¿¡·¯´ç", MB_ICONERROR|MB_OK ); } else { break; } } } (*pvecSlot)[nIdx] = g_TokSlotName.Add(dlg.m_strOutfitSlotName); (*pvecLayer)[nIdx] = dlg.m_nLayerCount+1; UpdateOutfitSlot(); } void CPageGCMDSSlots::DeleteOutfitSlotItem() { if( IDOK == MessageBox( "ÁøÂ¥·Î Áö¿ì°Ú¼Ò?", "¹°¾îºÁ", MB_ICONQUESTION|MB_OKCANCEL ) ) { POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; std::vector* pvecSlot; std::vector::iterator itSlot; std::vector* pvecLayer; std::vector::iterator itLayer; m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer ); itSlot = pvecSlot->begin() + nIdx; pvecSlot->erase(itSlot); itLayer = pvecLayer->begin() + nIdx; pvecLayer->erase(itLayer); UpdateOutfitSlot(); } } void CPageGCMDSSlots::AddStaticSlotItem() { std::vector* pvec; m_rpGCMDS->RetrieveStaticSlot(pvec); pvec->push_back(NULL_TOK); int nIdx = m_ctrlStaticSlot.GetItemCount(); m_ctrlStaticSlot.InsertItem( nIdx, "" ); m_ctrlStaticSlot.EnsureVisible( nIdx, FALSE ); m_ctrlStaticSlot.EditLabel( nIdx ); } void CPageGCMDSSlots::EditStaticSlotItem() { POSITION pos = m_ctrlStaticSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; m_ctrlStaticSlot.EnsureVisible( nIdx, FALSE ); m_ctrlStaticSlot.EditLabel( nIdx ); } void CPageGCMDSSlots::DeleteStaticSlotItem() { if( IDOK == MessageBox( "ÁøÂ¥·Î Áö¿ì°Ú¼Ò?", "¹°¾îºÁ", MB_ICONQUESTION|MB_OKCANCEL ) ) { POSITION pos = m_ctrlStaticSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; std::vector* pvec; std::vector::iterator it; m_rpGCMDS->RetrieveStaticSlot(pvec); it = pvec->begin() + nIdx; pvec->erase(it); m_ctrlStaticSlot.DeleteItem(nIdx); } } void CPageGCMDSSlots::AddAttachmentSlotItem() { std::vector* pvec; m_rpGCMDS->RetrieveAttachmentSlot(pvec); pvec->push_back(NULL_TOK); int nIdx = m_ctrlAttachmentSlot.GetItemCount(); m_ctrlAttachmentSlot.InsertItem( nIdx, "" ); m_ctrlAttachmentSlot.EnsureVisible( nIdx, FALSE ); m_ctrlAttachmentSlot.EditLabel( nIdx ); } void CPageGCMDSSlots::EditAttachmentSlotItem() { POSITION pos = m_ctrlAttachmentSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; m_ctrlAttachmentSlot.EnsureVisible( nIdx, FALSE ); m_ctrlAttachmentSlot.EditLabel( nIdx ); } void CPageGCMDSSlots::DeleteAttachmentSlotItem() { if( IDOK == MessageBox( "ÁøÂ¥·Î Áö¿ì°Ú¼Ò?", "¹°¾îºÁ", MB_ICONQUESTION|MB_OKCANCEL ) ) { POSITION pos = m_ctrlAttachmentSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; std::vector* pvec; m_rpGCMDS->RetrieveAttachmentSlot(pvec); for( int i = nIdx; i < (pvec->size()-1); ++i ) { (*pvec)[i] = (*pvec)[i+1]; } pvec->resize( pvec->size()-1 ); m_ctrlAttachmentSlot.DeleteItem(nIdx); } } void CPageGCMDSSlots::OnEndlabeleditListStaticslot(NMHDR* pNMHDR, LRESULT* pResult) { LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; // TODO: Add your control notification handler code here // ºó ¹®ÀÚ¿­ÀÏ °æ¿ì È®ÀÎÇØ¼­ »èÁ¦ int nIdx = pDispInfo->item.iItem; std::vector* pvec; m_rpGCMDS->RetrieveStaticSlot( pvec ); if( ( ( NULL == pDispInfo->item.pszText ) && ( CString("") == m_ctrlStaticSlot.GetItemText( nIdx, 0 ) ) ) || ( ( NULL != pDispInfo->item.pszText ) && ( '\0' == *(pDispInfo->item.pszText) ) ) ) { std::vector::iterator it; it = pvec->begin() + nIdx; pvec->erase(it); m_ctrlStaticSlot.DeleteItem(nIdx); *pResult = 0; return; } if( pDispInfo->item.mask & LVIF_TEXT ) { // Áߺ¹È®ÀÎ bool bDuplicated = false; for( int i = 0; i < pvec->size(); ++i ) { if( i != nIdx ) { if( g_TokSlotName.GetTOK(pDispInfo->item.pszText) == (*pvec)[i] ) { bDuplicated = true; break; } } } if( bDuplicated ) { MessageBox( "°°Àº À̸§ÀÇ SlotÀÌ Á¸ÀçÇÕ´Ï´Ù", NULL, MB_ICONERROR|MB_OK ); m_ctrlStaticSlot.PostMessage( LVM_EDITLABEL, nIdx, 0L ); return; } (*pvec)[nIdx] = g_TokSlotName.Add(pDispInfo->item.pszText); m_ctrlStaticSlot.SetItemText( nIdx, 0, g_TokSlotName.GetString((*pvec)[nIdx]) ); } *pResult = 0; } void CPageGCMDSSlots::OnEndlabeleditListAttachmentslot(NMHDR* pNMHDR, LRESULT* pResult) { LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; // TODO: Add your control notification handler code here // ºó ¹®ÀÚ¿­ÀÏ °æ¿ì È®ÀÎÇØ¼­ »èÁ¦ int nIdx = pDispInfo->item.iItem; std::vector* pvec; m_rpGCMDS->RetrieveAttachmentSlot( pvec ); if( ( ( NULL == pDispInfo->item.pszText ) && ( CString("") == m_ctrlAttachmentSlot.GetItemText( nIdx, 0 ) ) ) || ( ( NULL != pDispInfo->item.pszText ) && ( '\0' == *(pDispInfo->item.pszText) ) ) ) { std::vector::iterator it; it = pvec->begin() + nIdx; pvec->erase(it); m_ctrlAttachmentSlot.DeleteItem(nIdx); *pResult = 0; return; } if( pDispInfo->item.mask & LVIF_TEXT ) { // Áߺ¹È®ÀÎ bool bDuplicated = false; for( int i = 0; i < pvec->size(); ++i ) { if( i != nIdx ) { if( g_TokSlotName.GetTOK(pDispInfo->item.pszText) == (*pvec)[i] ) { bDuplicated = true; break; } } } if( bDuplicated ) { MessageBox( "°°Àº À̸§ÀÇ SlotÀÌ Á¸ÀçÇÕ´Ï´Ù", NULL, MB_ICONERROR|MB_OK ); m_ctrlAttachmentSlot.PostMessage( LVM_EDITLABEL, nIdx, 0L ); return; } (*pvec)[nIdx] = g_TokSlotName.Add(pDispInfo->item.pszText); m_ctrlAttachmentSlot.SetItemText( nIdx, 0, g_TokSlotName.GetString((*pvec)[nIdx]) ); } *pResult = 0; } void CPageGCMDSSlots::OnMenuitemMoveup() { // TODO: Add your command handler code here std::vector* pvecSlot; std::vector* pvecLayer; m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer ); POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; if( 0 == nIdx ) { return; // first item } std::swap( (*pvecSlot)[nIdx], (*pvecSlot)[nIdx-1] ); std::swap( (*pvecLayer)[nIdx], (*pvecLayer)[nIdx-1] ); UpdateOutfitSlot(); m_ctrlOutfitSlot.SetItemState( nIdx-1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); } void CPageGCMDSSlots::OnMenuitemMovedown() { // TODO: Add your command handler code here std::vector* pvecSlot; std::vector* pvecLayer; m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer ); POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition(); if( NULL == pos ) { return; } int nIdx = (int)pos - 1; if( pvecSlot->size()-1 == nIdx ) { return; // last item } std::swap( (*pvecSlot)[nIdx], (*pvecSlot)[nIdx+1] ); std::swap( (*pvecLayer)[nIdx], (*pvecLayer)[nIdx+1] ); UpdateOutfitSlot(); m_ctrlOutfitSlot.SetItemState( nIdx+1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); }