//
// 双击修改内容 // // 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; int Offset=0; for(int iColumn=0;iColumn<Column;++iColumn) //得到CEditCell的right坐标 { Offset +=GetColumnWidth(iColumn); } CRect rect; GetItemRect(Item,rect,LVIR_BOUNDS); CRect ClientRect; GetClientRect(&ClientRect); if (Offset+rect.left<0 || Offset+rect.left>ClientRect.right) //得到CEditCell的left坐标 { CSize size; if (Offset+rect.left>0) size.cx=-(Offset-rect.left); else size.cx=Offset-rect.left; size.cy=0; Scroll(size); rect.left=size.cx; } LV_COLUMN lvCol; lvCol.mask=LVCF_FMT; GetColumn(Column,&lvCol); DWORD dwStyle; //判断item的显示位子 if ((lvCol.fmt & LVCFMT_JUSTIFYMASK) == LVCFMT_LEFT) dwStyle = ES_LEFT; else if ((lvCol.fmt & LVCFMT_JUSTIFYMASK) == LVCFMT_RIGHT) dwStyle = ES_RIGHT; else dwStyle = ES_CENTER; //调整CEditCell 的w位子 (两边缩小2) rect.left += Offset+2; rect.right=rect.left+GetColumnWidth(Column)-2; if (rect.right>ClientRect.right) rect.right=ClientRect.right; EditCellShow(dwStyle,rect,Item,Column); //ComboCellShow(dwStyle,rect,Item,Column); } |
clistctrl 修改内容
最新推荐文章于 2020-01-02 18:46:51 发布