Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mfc 在CHeaderCtrl上设置EditFilter时,如何设置编辑控件的位置_Mfc_Clistctrl - Fatal编程技术网

Mfc 在CHeaderCtrl上设置EditFilter时,如何设置编辑控件的位置

Mfc 在CHeaderCtrl上设置EditFilter时,如何设置编辑控件的位置,mfc,clistctrl,Mfc,Clistctrl,我有从CListCtrl派生的自定义类 当用户单击列标题时,我想让他输入文本值。 我发现我可以通过以下方法实现:CHeaderCtrl::EditFilter。 我希望编辑将位于列标签文本的相同位置。事实上,它是下面的,所以只有部分控件和文本可见。列标签的一部分也是可见的。 如何设置CHeaderCtrl::GetItemRect读取的rect覆盖的编辑位置 void Data_list::OnHdnItemclickpointslist(NMHDR *pNMHDR, LRESULT *pRes

我有从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;
}

void Data_list::OnHdnItemclickpointslist(NMHDR*pNMHDR,LRESULT*pResult)
{
LPNMHEADER phdr=重新解释铸件(pNMHDR);
CHeaderCtrl*header=this->GetHeaderCtrl();
正确无误;
header->GetItemRect(phdr->iItem,rect);
int-iFilter=header->EditFilter(phdr->iItem,TRUE);
//如何设置编辑位置
*预设值=0;
}

根据您的注释响应,您应该考虑采用不同的方法来收集所需的数据。我使用以下方法做了一些非常类似的事情

  • 创建将用于收集用户的编辑控件类 数据。该类应该是CListCtrl的子成员变量
  • 处理来自列表控件的左键向下消息。因为 处理程序,使用列表控件的GetItemRect函数确定 用户单击的行和列
  • 在单元格边界的顶部创建动态编辑控件 用户单击。这将为用户提供一个编辑控件 输入数据
  • 检测用户何时完成数据输入(通过丢失的 关注编辑控件,或某个键序列(例如Enter键)
  • 通知父列表控件编辑已完成。这个可以 可以通过消息传递或直接方法调用来完成。确保 将更新后的值传递给父列表控件
  • 父列表控件应收集传递的更新值和 销毁子编辑控件
  • 然后,父列表控件应在列表控件上迭代 更新所选列中的所有“单元格”

我没有为此提供实际的代码,因为有许多方法可以实现上述方法。这应该为您实现编辑机制提供一个起点。

我猜,ListView的左上角距离父窗口的左上角大约4像素x 10像素。您必须使用
ClientToScreen
查找该偏移量。或者确保ListView控件是编辑控件的父控件。好的,我可以这样做,但我不需要计算正确的位置。对我来说,更重要的是,我发现如何才能找到指向此编辑的任何指针。事实上,我没有正确阅读问题,我之前的评论没有意义。我不熟悉
HDM_EDITFILTER
消息及其原因。您是否试图为用户提供更新特定“单元格”(行和列)值的机制?是的,用户只想输入一个值,此列中的每个单元格都将根据输入值计算新值。我还考虑了Similar解决方案,也许我会这样做。不久前,我试图对其进行编码,但遇到了另一个问题:在用户将鼠标移到列表标题上方之前,将显示“编辑动态”创建的内容。在这种情况下,标题是“刷新”并隐藏我的编辑。