我在我的程序中使用了CListctrl类,然后将窗口大小调整为每次只能让一行显示在可见区域,然后我使用EnsureVisible()函数让指定行显示在可见区域,
这个过程在XP系统下一切正常,可在Vista系统下就不正常了,显示的总不是我指定的那行?有没有人遇到过这种问题?怎么解决?谢谢

解决方案 »

  1.   

    代码是很简单的:BOOL CtestDlg::OnInitDialog()
    {
             ........... // TODO: 在此添加额外的初始化代码
    CString strHeader(_T(""));
    for(int i = 0; i < 7; i++)
    {
    strHeader.Format(L"%d", i);
    m_list.InsertColumn(i, strHeader);
    m_list.SetColumnWidth(i, 60);
    }
    int count = 0;
    for(int i = 0; i < 10; i++)
    {
    count += 1;
    strHeader.Format(L"%d", count);
    m_list.InsertItem(i, strHeader);
    for(int j = 1; j < 7; j++)
    {
    count += 1;
    strHeader.Format(L"%d", count);
    m_list.SetItemText(i, j, strHeader);
    }
    }
    int nCount = m_list.GetItemCount();
    nVisibleLine = 0; //nVisibleLine是一个int
    if(nCount > 0)
    {
    m_list.EnsureVisible(0, FALSE);
    } return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }void CtestDlg::OnBnClickedButton1()
    {
    // 前一行
    if(nVisibleLine > 0)
    {
    nVisibleLine =nVisibleLine- 1;
    m_list.EnsureVisible(nVisibleLine, FALSE);
    }
    }void CtestDlg::OnBnClickedButton2()
    {
    //后一行
    if(nVisibleLine < m_list.GetItemCount() - 1)
    {
    nVisibleLine =nVisibleLine+ 1;
    m_list.EnsureVisible(nVisibleLine, FALSE);
    }
    }
    代码就是这些了,Vista下运行就不正常