我在dialog中增加了个列表控件,现在想实现下面的功能:
当数据增加到当前页面的最下面一行时,自动将下一行置为最上方,看起来像翻页了似的。
因为涉及到打印功能,所以想弄个翻页的假象,但是不知道如何将某一行置为最上方。
比如列表控件是report属性,然后只能显示12行,数据满12行以后,我将13行置为列表框的最上方(类似翻了一个新页)。
怎么将13行置为最上方呢?不想用滚动条。谢谢大家

解决方案 »

  1.   

    我用的listctl控件,但是网格线是我自绘的。
    但是由于涉及到打印功能,如果使用真的翻页功能的话,
    还得修改打印功能。
    比如我翻页,那么前一页的内容怎么保存呢?
      

  2.   

    我的建议是:仿造EXCEL的冻结功能方法是:CSplitterWnd来分割,上面一个listctrl,下面一个listCtrl。上面一个数据不动,下面变化即可。
      

  3.   

    用虚拟列表,自己用vector或CList后台维护数据列表,CListCtrl::SetItemCount
      

  4.   

    适当的地方调用:
    void CxxDlg::ListCtrlScrollOnePage()
    {
      int inPage=m_ListCtrl.GetCountPerPage();
      CRect rc;
      m_ListCtrl.GetItemRect(0,&rc,LVIR_BOUNDS);
      CSize sz(0,rc.Height()*inPage);
      m_ListCtrl.Scroll(sz);
    }
      

  5.   

    不用滚动条的话,你自绘也难以实现啊。只能是把之前都删除,把从13开始到24显示出来。其实可以用滚动条,再用一个CStatic把滚动条拦住,这样看上去就像没有滚动条。