目的:建一张表格,然后往表格里填数据,再保存数据
我的实现:用ListCtrl,然后用一个EditBox,EditBox初始不可见,当点击单元格时可见于单元格处,进行输入之后保存数据,EditBox再为不可见
问题:因为表格较大,ListCtrl里出现了ScrollBar,当Bar滚动时,EditBox还留在了原地
解决方案:要么换一个实现方法,要么解决Scrollbar滚动时EditBox不动的问题
求:哪位大侠帮忙解决!呵呵很急,过几天要验收,在线等候,谢谢!

解决方案 »

  1.   

    好像不是很难的,首先你点击要修改的条目时,获得点击的项目的Index,然后获得该项目的RECT,最后在这个RECT上创建或者显示EDIT BOX即可// OnClick in the handler for the NM_CLICK notification
    void CMyListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
    {
       // Get the current mouse location and convert it to client
       // coordinates.
       DWORD pos = GetMessagePos();
       CPoint pt(LOWORD(pos), HIWORD(pos));
       ScreenToClient(&pt);   // Get indexes of the first and last visible items in 
       // the listview control.
       int index = GetTopIndex();
       int last_visible_index = index + GetCountPerPage();
       if (last_visible_index > GetItemCount())
           last_visible_index = GetItemCount();   // Loop until the number of visible items has been reached.
       while (index <= last_visible_index)
       {
           // Get the bounding rectangle of an item. If the mouse
           // location is within the bounding rectangle of the item,
           // you know you have found the item that was being clicked.
           CRect r;
           GetItemRect(index, &r, LVIR_BOUNDS);
           pParentWnd->ClientToScreen(&r); 
           pEditBox->MoveWindow(&r);  //当然这里要适当的计算一下了
                // Get the next item in listview control.
           index++;
       }
      

  2.   

    参照CListCtrlEditLabel的做法,当滚动条滚动时,如果发现焦点不是ListCtrl,强制把焦点设为ListCtrl.
    void CMyListCtrl::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
    if( GetFocus() != this ) SetFocus();
    CListCtrl::OnHScroll(nSBCode, nPos, pScrollBar);
    }void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
    if( GetFocus() != this ) SetFocus();
    CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
    }
      

  3.   

    to 小黑,我是在EVC下做程序,我找不到CListCtrl里的ScrollBar的消息啊,在Wizard里没有它的消息啊?
      

  4.   

    这个别EVC好象是没用过,不过肯定会有ScrollBar的消息吧,它应该也是基于消息机制的吧?应该也有继承关系吧?
      

  5.   

    EVC是MS用于开发WinCE应用程序的开发工具,就是VC的简装版(我觉得,呵呵),有些API不同,MFC简化了不少,大部分都是一样,
    请教小黑: 在VC里完成你说的,就是在wizard里找listctrl控件的scrollbar消息,然后添加响应函数,对吧?我在EVC里找不到啊,呵呵,真是急死人了
      

  6.   

    那就手工添加了,既然是为WinCE做的,那么除了UNICODE之外,我想它和VC也没什么大的区别了.
    Scroll消息是CWnd的,所以你手工添加好了,肯定没问题的.
      

  7.   

    to 小黑, 十分的不好意思,我现在是个很新的手,呵呵,概念很多都懂,但动手能力很差,能具体点么?呵呵,要不我先自己想想,试试,实在弄不出来了,再联系你好么?呵呵,我觉得100分应该归你了,呵呵!
    how to 联系你呢?
    我 [email protected]
      

  8.   

    我看了MSDN,winCE都有WM_HSCROLL和WM_VSCROLL这两个消息.你只要在你自己的ListCtrl里面响应这两个消息就可以了.
    具体的做法,就和你响应别的消息一样啊,因为可能和VC有点不一样,所以你可以在wizard先随便找个消息响应一下,然后依样画葫芦把OnHScroll和OnVScroll放上去,应该需要在3个地方添加代码,一处是你的listctrl的.h文件,两处是.cpp或者.cxx文件.
    你试试看,或者可以把代码给我看看
    [email protected]
      

  9.   

    好像不行耶,listctrl是写在afxcmn.h里面的,.cpp是没法找了
    我重载一个CMyListCtrl,但是如何把它跟对话框里的listctrl控件扯上关系?开始设计的时候就是,把一个listctrl往dialogbox里拖呀,
    我快郁闷死了