今天做双击List Control中某一行,并返回该行中的数据到指定对话框中,查了些资料也算实现了具体方法如下:
对 List Control 的双击事件的响应单击事件类似
首先为了响应 List Control 的双击事件就必须声明一个类继承自 CListCtrl 然后再其 NM_DBCLICK 事件中响应 .
CPoint point;
GetCursorPos(&point);
ScreenToClient(&point);
LVHITTESTINFO lvo;
lvo.pt = point; //point 保存鼠标双击时的位置
lvo.flags = LVHT_ABOVE;
int nItem = this->SubItemHitTest(&lvo); // 此时 lvo 中保存了所选中的项的下标(即所选中的行)和其子下标(所选中的列)
if (nItem != -1) // 当所点位置没有有效的 item 项时,则返回 -1
{
CStringArray strarray;
for (int i=0; i<GetHeaderCtrl()->GetItemCount() ; ++i) // 返回列数
{
strarray.Add(GetItemText(lvo.iItem, i));
}
m_dlgMessage.m_edit1 = strarray.GetAt(0); //m_dlgMessage 是所要弹出对话框,对话框所关联的 CEdit 控件
m_dlgMessage.m_edit2 = strarray.GetAt(1);
m_dlgMessage.m_edit3 = strarray.GetAt(2);
m_dlgMessage.m_edit4 = strarray.GetAt(3);
UpdateData(FALSE); // 将改变后的数据更新到对话框的响应控件去
m_dlgMessage.DoModal();
}