MSFlexGrid控件嵌入了CheckBox,但是当表格数据不止一页(需要滚动)时,CheckBox不会随滚动条滚动 。
要怎么解决这个问题啊 ? 求大神指点。

解决方案 »

  1.   

    MSFLXGRID好象一个函数可以获取第一行的行数(就是顶行(top)的行数是几),比如第5行在顶行,就是在MSFLXGRID的第一行,这时通过这个函数就可以获得顶行是5,这样你就可以把CHECKBOX显示在相应的位置上,1到4行的CHECKBOX就不显示了
      

  2.   

    悲剧,我以前倒是是自绘过一个ListCtrl,根据滚动条信息。可以自绘控件的。当时用的是进度条。MSFLXGRID难道没做到这点么?
      

  3.   

    你如果自绘的话。可以参考下这个LRESULT CMyListCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // TODO: Add your specialized code here and/or call the base class
    LRESULT ret= CListCtrl::WindowProc(message, wParam, lParam);
    if(WM_HSCROLL==message || WM_VSCROLL==message || WM_MOUSEWHEEL==message)
    {
    UpdateProgressCtrl();
    }
    return ret;
    }void CMyListCtrl::UpdateProgressCtrl()
    {
    int Top=GetTopIndex();
    int Total=GetItemCount();
    int PerPage=GetCountPerPage();
    int LastItem=((Top+PerPage)>Total)?Total:Top+PerPage;
    CHeaderCtrl* pHeader=GetHeaderCtrl();
    for(int i=0;i<Top;i++)
    {
    m_vecTaskProgress[i].ProgressCtrl->ShowWindow(SW_HIDE);
    }
    for(int i=Top;i<LastItem;i++)
    {
    CRect ColRt;
    pHeader->GetItemRect(1,&ColRt);
    // get the rect
    CRect rt;
    GetItemRect(i,&rt,LVIR_LABEL);
    rt.top+=1;
    rt.bottom-=1;
    rt.left+=ColRt.left;
    int Width=ColRt.Width();
    rt.right=rt.left+Width-4;
    m_vecTaskProgress[i].ProgressCtrl->ShowWindow(SW_HIDE);
    m_vecTaskProgress[i].ProgressCtrl->MoveWindow(&rt);
    // m_vecTaskProgress[i].ProgressCtrl->ShowWindow(SW_SHOW);
    }
    for(int i=LastItem;i<Total;i++)
    {
    m_vecTaskProgress[i].ProgressCtrl->ShowWindow(SW_HIDE);
    }
    for(int i=Top;i<LastItem;i++)
    { m_vecTaskProgress[i].ProgressCtrl->ShowWindow(SW_SHOW);
    }
    }