//////////////////////////////////////////////////////////////////////
// 双击修改内容 //
//////////////////////////////////////////////////////////////////////
void CNewList::OnLButtonDblClk(UINT nFlags, CPoint point)
{
int Index;
int ColNum;
if ((Index = HitTestEx (point, &ColNum)) != -1)
{
if (GetWindowLong (m_hWnd, GWL_STYLE) & LVS_EDITLABELS)
EditSubItem (Index, ColNum);
}
CListCtrl::OnLButtonDblClk(nFlags, point);
}
//////////////////////////////////////////////////////////////////
// 通过坐标得到 行,列 //
//////////////////////////////////////////////////////////////////
int CNewList::HitTestEx(CPoint& Point, int* pColumn)
{
int ColumnNum=0;
int Row=HitTest(Point,NULL);
if (pColumn)
*pColumn=0;
//判断ListCtrl 是否为LVS_REPORT
if ((GetWindowLong(m_hWnd,GWL_STYLE)&LVS_TYPEMASK)!=LVS_REPORT)
return Row;
Row=GetTopIndex();
int Bottom=Row+GetCountPerPage();
if (Bottom>GetItemCount())
Bottom=GetItemCount();
//判断在哪一行 哪一列
CHeaderCtrl* pHeader=(CHeaderCtrl*)GetDlgItem(0);
int nColumnCount=pHeader->GetItemCount();
for(;Row<=Bottom;++Row)
{
CRect rect;
GetItemRect(Row,&rect,LVIR_BOUNDS);
if (rect.PtInRect(Point))
{
for(ColumnNum=0;ColumnNum<nColumnCount;++ColumnNum)
{
int ColWidth=GetColumnWidth(ColumnNum);
if (Point.x>=rect.left && Point.x<=(rect.left+ColWidth))
{
if (pColumn)
*pColumn=ColumnNum;
return Row;
}
rect.left +=ColWidth;
}
}
}
return -1;
}
///////////////////////////////////////////////////////////////////
// 显示CEditCell //
///////////////////////////////////////////////////////////////////
void CNewList::EditSubItem(int Item, int Column)
{
CHeaderCtrl* pHeader=(CHeaderCtrl*)GetDlgItem(0);
int nColumnCount=pHeader->GetItemCount();
if (Column>=nColumnCount || GetColumnWidth(Column)<5) //判断宽度是否正确
return;