最近一直没睡好觉,彻底成了夜猫子一个,
最近用了两天时间做了个数据库课程设计,总体说是完成得还好,不过后面回想一下的话就是太简单了点。
这次做的是报刊订购系统,具体流程就不多说了,反正也就连接数据库,操纵各种数据,
得到的数据是显示在ListControl控件上的,由于我有个功能是想实现即时对List控件的编辑,所以上网找了一下方法,发现了这样的一篇文章:
我根据自己的需要做了一下改动
我自己的最终实现的方法就是,
生成一个新的子类继承于CListCtrl
1 class CEditListCtrl : public CListCtrl
下面是响应控件的点击事件OnLButtonDown
具体流程如下
代码如下
1 void CEditListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 2 { 3 // TODO: 在此添加消息处理程序代码和/或调用默认值 4 5 m_bFocus = TRUE; 6 LVHITTESTINFO lvhit; 7 lvhit.pt = point; 8 int item = SubItemHitTest(&lvhit); 9 10 //if (over a item/subitem)11 if (item != -1 && (lvhit.flags & LVHT_ONITEM))12 {13 CListCtrl::OnLButtonDown(nFlags, point);14 15 if(m_bHighLight && m_iItem == item )16 {17 //第二次单击18 m_edtItemEdit.ShowWindow(SW_SHOW);19 m_edtItemEdit.SetFocus();20 //m_edtItemEdit.SetSel(-1);21 return;22 }23 else24 {25 //第一次单击26 if(m_editCreate)27 {28 m_edtItemEdit.ShowWindow(SW_HIDE);29 SetListText();30 m_edtItemEdit.SetWindowTextW(NULL);31 }32 m_iItem =item;33 m_iSubItem = lvhit.iSubItem;34 m_bHighLight = TRUE;35 36 37 38 }39 }40 else41 {42 if(m_edtItemEdit.m_hWnd == NULL)43 {44 //未出现文本编辑框时45 m_bHighLight = FALSE;46 }47 48 CListCtrl::OnLButtonDown(nFlags, point);49 }50 51 Invalidate(); //强制重绘控件52 53 if (m_iSubItem >= 0)54 {55 if(m_iItem != item) return;56 CRect rcSubItem;57 m_iSubItem=2;58 GetSubItemRect( item, m_iSubItem, LVIR_BOUNDS, rcSubItem);59 60 //get edit control and subclass61 62 if(!m_editCreate)63 64 {65 if(m_edtItemEdit.Create(WS_CHILD|WS_VISIBLE|WS_BORDER,rcSubItem,this,IDC_EDIT))66 m_editCreate=TRUE;67 m_edtItemEdit.SetFocus();68 m_edtItemEdit.ShowWindow(SW_HIDE);69 }70 //ASSERT(hWnd != NULL);71 //VERIFY(m_edtItemEdit.SubclassWindow(hWnd));72 73 //move edit control text 4 pixel to the right of org label,74 //as Windows does it...编辑框定位75 rcSubItem.left += 4;76 m_edtItemEdit.MoveWindow (&rcSubItem) ;77 m_edtItemEdit.SetWindowText(GetItemText(item, m_iSubItem));78 }79 80 }
注:本人的代码是只能修改列号为2的单元格