首先要响应通知消息事件:NM_DBLCLK NM_CLICK
双击 出现编辑框 单击 保存
void CxmlEditDlg::OnNMDblclkListXml(NMHDR *pNMHDR, LRESULT *pResult)
{
//------------------
Invalidate();
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
LVHITTESTINFO info;
info.pt = pNMItemActivate -> ptAction;
if (m_xmlListControl.SubItemHitTest( & info) != - 1 )
{
nhitRow = info.iItem;
nhitCol = info.iSubItem;
if (m_edit.m_hWnd == NULL) // editItem为一输入框控件,
{
RECT rect;
rect.left = 0 ;
rect.top = 0 ;
rect.bottom = 15 ;
rect.right = 200 ;
m_edit.Create(WS_CHILD | ES_RIGHT | WS_BORDER | ES_AUTOHSCROLL | ES_WANTRETURN | ES_MULTILINE, rect, this , 101 );
GetDlgItem(IDC_EDIT1)->SetFont( this -> GetFont(), FALSE);
}
CRect rect;
m_xmlListControl.GetSubItemRect(info.iItem, info.iSubItem, LVIR_BOUNDS, rect);
int iSubItemWidth = m_xmlListControl.GetColumnWidth(nhitCol);
rect.top += 14 ;
rect.left += 15 ;
rect.right = rect.left+iSubItemWidth ;
rect.bottom += 14 ;
GetDlgItem(IDC_EDIT1)->SetWindowText(m_xmlListControl.GetItemText( info .iItem, info .iSubItem));
GetDlgItem(IDC_EDIT1)->MoveWindow( & rect, TRUE);
GetDlgItem(IDC_EDIT1)->ShowWindow( 1 );
GetDlgItem(IDC_EDIT1)->SetFocus();
}
m_iLastState = VALUE_EDIT;
* pResult = 0 ;
}
void CxmlEditDlg::OnNMClickListXml(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
LVHITTESTINFO info;
info.pt = pNMItemActivate -> ptAction;
if (m_iLastState == VALUE_EDIT)
{
if (m_xmlListControl.SubItemHitTest( & info) != - 1 )
{
int hitRow = info.iItem;
int hitCol = info.iSubItem;
if (hitRow == nhitRow&&hitCol == nhitCol)
{
return;
}
}
if (m_edit.m_hWnd != NULL)
{
m_edit.ShowWindow( 0 );
if (nhitRow != - 1 )
{
CString text;
m_edit.GetWindowText(text);
m_iLastState = VALUE_REGULAR;
m_xmlListControl.SetItemText(nhitRow, nhitCol, text);
}
}
nhitCol = nhitRow = - 1 ;
}
* pResult = 0 ;
}