admin管理员组

文章数量:1531662

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(pNMHDR);

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(pNMHDR);

if(editItem.m_hWnd != NULL)

{

ndow(0);

if(hitRow != -1)

{

CString text;

dowText(text);

m_mText(hitRow, hitCol, text);

}

}

hitCol = hitRow = -1;

*pResult = 0;

}

本文标签: 控件消息击中编辑列下