【发布时间】:2016-02-15 09:58:11
【问题描述】:
我有从 CListCtrl 派生的自定义类。
当用户单击列标题时,我想让他输入文本值。 我发现我可以通过:CHeaderCtrl::EditFilter 来做到这一点。 我预计编辑将与列标签的文本位于同一位置。事实上它是波纹管,所以只有部分控件和文本是可见的。列标签的一部分也是可见的。 如何设置编辑位置被 CHeaderCtrl::GetItemRect 读取的 rect 覆盖
void Data_list::OnHdnItemclickpointslist(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
CHeaderCtrl* header = this->GetHeaderCtrl();
CRect rect;
header->GetItemRect(phdr->iItem , rect );
int iFilter = header->EditFilter(phdr->iItem , TRUE);
// how to set position of edit
*pResult = 0;
}
【问题讨论】:
-
我猜,ListView 的左上角距离父窗口的左上角大约 4 像素 x 10 像素。您必须使用
ClientToScreen来找到该偏移量。或者确保 ListView 控件是 Edit 控件的父级。 -
好的,我可以做到,但计算正确位置不是我需要的。对我来说更重要的是找出如何获得指向此编辑的任何指针。
-
其实我没有看错问题,我之前的评论没有意义。我不熟悉
HDM_EDITFILTER消息以及它为什么这样做。 -
您是否尝试为用户提供更新特定“单元格”(行和列)值的机制?
-
是的,用户只想输入一个值,并且此列中的每个单元格都会根据输入值计算出新值。