先上代码:
void CListCtrlTestDlg::OnDblclkListPic(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
NM_LISTVIEW *v = (NM_LISTVIEW *)pNMHDR;
CRect rect;
list->GetSubItemRect(v->iItem,v->iSubItem,LVIR_LABEL,rect);
edit.MoveWindow(rect);
edit.IsShow(TRUE);
*pResult = 0;
}edit 是继承自CEDIT的自定义类.运行后产生的编辑框位置不准确,我在想原因是不是因为逻辑坐标跟设备坐标的转化问题或者是自定义类的错误. 我用的是DIALOG做的界面
正在向办法,有朋友可以给点帮助  先谢谢了.
希望不要是传送门之类的回复.

解决方案 »

  1.   

    那就用ClientToScreen(&rect)/ScreenToClient(&rect)转换坐标看看
      

  2.   

    我以前用的一个编辑框显示在ClistCtrl上面实现的!
      

  3.   

    你的编辑框CEdit创建的时候指定的父窗口是CListCtrl吗?
      

  4.   

    他的CEdit应该是CListCtrlTestDlg的成员
      

  5.   

    xxx.h    CPoint m_indexOfCell; NM_LISTVIEW*   pNMListView   =   (NM_LISTVIEW*)pNMHDR;  
    CRect CEret;
    if(m_ctrlListEdit.GetSubItemRect(pNMListView->iItem, pNMListView->iSubItem, LVIR_LABEL, CEret))
    {
    m_ctrlEditCell.SetRect(&CEret);
    CRect offset;
    m_ctrlListEdit.GetWindowRect(&offset);   
    ScreenToClient(&offset);   
    m_ctrlEditCell.MoveWindow(offset.TopLeft().x + CEret.TopLeft().x + 2, offset.TopLeft().y + CEret.TopLeft().y + 2, CEret.Width(), CEret.Height());
    char strCellText[100];
    strCellText[0] = NULL;
    m_ctrlListEdit.GetItemText(pNMListView->iItem,pNMListView->iSubItem,strCellText,100);

    m_ctrlEditCell.SetWindowText(_T(strCellText));

    m_ctrlEditCell.ShowWindow(TRUE);
    m_ctrlEditCell.SetFocus();
    }
    m_indexOfCell.x = pNMListView->iItem;
    m_indexOfCell.y = pNMListView->iSubItem;
    *pResult = 0;然后再写失去光标的代码就可以了