C/C++/MFC
List Controls listview edit 가능하게
2007.10.11 13:55
// Attributesprotected: int m_cx; BOOL m_nEdit; CLVEdit m_LVEdit; void CListEditView::OnBeginLabelEdit(NMHDR* pNMHDR,LRESULT* pResult)
{ LV_DISPINFO* pDispInfo=(LV_DISPINFO*)pNMHDR; *pResult=1; CPoint posMouse; GetCursorPos(&posMouse); ScreenToClient(&posMouse); LV_COLUMN lvc; lvc.mask=LVCF_WIDTH; CRect rcItem; GetListCtrl().GetItemRect(pDispInfo->item.iItem,rcItem,LVIR_LABEL); if(rcItem.PtInRect(posMouse))
m_nEdit=0; int nCol=1;
while(m_nEdit==-1 && GetListCtrl().GetColumn(nCol,&lvc))
{ rcItem.left=rcItem.right; rcItem.right+=lvc.cx; if(rcItem.PtInRect(posMouse))
m_nEdit=nCol; nCol++; } if(m_nEdit==-1)
return;
HWND hWnd=(HWND)SendMessage(LVM_GETEDITCONTROL); ASSERT(hWnd!=NULL);
VERIFY(m_LVEdit.SubclassWindow(hWnd)); m_LVEdit.m_x=rcItem.left; m_LVEdit.m_y=rcItem.top-1; m_LVEdit.SetWindowText(GetListCtrl().GetItemText(pDispInfo->item.iItem,m_nEdit)); *pResult=0;} void CListEditView::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
{ LV_DISPINFO* pDispInfo=(LV_DISPINFO*)pNMHDR; CString sEdit=pDispInfo->item.pszText; if(!sEdit.IsEmpty())
{ GetListCtrl().SetItemText(pDispInfo->item.iItem,m_nEdit,sEdit); } m_nEdit=-1; VERIFY(m_LVEdit.UnsubclassWindow()!= NULL);
GetListCtrl().SetItemState(pDispInfo->item.iItem,0,LVNI_FOCUSED|LVNI_SELECTED); *pResult=0;}
