admin管理员组文章数量:1567256
2023年12月12日发(作者:)
ListCtrl+CEdit
VC中ListCtrl用来显示数据,常用report样式。CEdit是文本编辑框。ListCtrl、CEdit两者混合可进行类似于Excel的简单功能的开发!
如果要使得ListCtrl中的所有列下单元格可编辑,可通过ClassVizard在ListCtrl对象下添加双击消息响应函数,编辑代码如下:
void CPVDSDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
//ListCtrl控件中所有列下单元格可编辑
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast
LVHITTESTINFO info;
= pNMItemActivate -> ptAction;
if (m_mHitTest(&info) == -1)
{
hitRow = ;
hitCol = em;
if (editItem.m_hWnd == NULL) //editItem为一输入框控件
{
RECT rect;
= 0;
= 0;
= 15;
= 200;
(WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL |
ES_WANTRETURN | ES_MULTILINE, rect, this, 101);
t(this -> GetFont(), FALSE);
}
CRect rect;
m_ItemRect(, em, LVIR_BOUNDS, rect);
+= 13;
+= 13;
+= 13;
+= 13;
dowText(m_mText(, em));
ndow(&rect, TRUE);
ndow(1);
us();
}
*pResult = 0;
}
注:代码里面先得到鼠标双击的位置,判断是否击中了单元格,击中就调用Edit Control ,大小就是选中的单元 格,rect加13什么的,是为了使输入框跟单元格对齐。最后再给这个Edit Control 一 个焦点,就可以直接输入了。
如果要使得指定列下单元格可编辑,如第五列可编辑,添加的双击消息响应函数代码如下:
void CPVDSDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
DWORD dwPos = GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
m_ToClient(&point);
LVHITTESTINFO lvinfo;
= point;
= LVHT_ABOVE;
int nItem = m_mHitTest(&lvinfo);
/*if(nItem != -1)
{
CString strtemp;
("单击的是第%d行第%d列.", , em);
AfxMessageBox(strtemp);
}*/
if (em == 4) //指定ListCtrl控件中第5列下单元格可编辑
{
hitRow = ;
hitCol = em;
if (editItem.m_hWnd == NULL) //editItem为一输入框控件
{
RECT rect;
= 0;
= 0;
= 15;
= 200;
(WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL |
ES_WANTRETURN | ES_MULTILINE, rect, this, 101);
t(this -> GetFont(), FALSE);
}
CRect rect;
m_ItemRect(, em, LVIR_BOUNDS, rect);
+= 13;
+= 13;
+= 13;
+= 13;
dowText(m_mText(, em));
ndow(&rect, TRUE);
ndow(1); us();
}
*pResult = 0;
}
最后,将输入到Edit Control 控件框中内容显示到ListCtrl控件单元格中,还需添加单击消息响应函数,代码如下:
void CPVDSDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast
if(editItem.m_hWnd != NULL)
{
ndow(0);
if(hitRow != -1)
{
CString text;
dowText(text);
m_mText(hitRow, hitCol, text);
}
}
hitCol = hitRow = -1;
*pResult = 0;
}
版权声明:本文标题:ListCtrl+CEdit 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1702332795a1510.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论