在工程中,做了四个按扭,和一个list控件,想通过点激这四个按扭,使list控件的内容能够左右,上下移动,达到替代键盘上的左右上下键的功能,,,,我做了一下,可以实现,选中和移动  ,但是没能实现滚动条的移动,,,,必须要实现滚动条的移动,不然就看不到当前移动到那一条记录了!!!!!!!!!!!                        

解决方案 »

  1.   

    BOOL CtimeDlg::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: 在此添加专用代码和/或调用基类 if(pMsg->message == WM_KEYDOWN) 

    switch(pMsg->wParam ) 
    {
    case VK_LEFT: AfxMessageBox(_T("adaf"));
     break;
    }
    }   
    return CDialog::PreTranslateMessage ( pMsg ); 
    }void CtimeDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    MSG *pMsg = new MSG;
    pMsg->message = WM_KEYDOWN;
    pMsg->wParam = VK_LEFT;
    this->PreTranslateMessage(pMsg);
    }
      

  2.   

    SetScrollPos  这个可以吧,你在按钮事件中,设这个,可以不 ??自己算好,应该可以的。
     
    呵呵,新手,不要骂我。
      

  3.   

    CListCtrl 有个Scroll函数,可以滚动
      

  4.   

    还有EnsureVisible函数,确保你移动的时候item可见
      

  5.   


    //为了测试,定义在这里,实际的话,避免这样做
    int index=0;
    void Cldlg1Dlg::OnBnClickedButton1()
    {
    if(index>0)
    {
    m_list.SetItemState(index-1, 0, LVIS_SELECTED);
    } m_list.SetItemState(index, LVIS_SELECTED, LVIS_SELECTED);
    m_list.EnsureVisible(index,FALSE);
    m_list.SetFocus();
    index++; if(index>=m_list.GetItemCount())
    {
    index=0;
    }
    }
      

  6.   

    1.创建列表框之后,设置它的水平与垂直滚动条位置与范围,假设列表框句柄是hList,父窗体句柄是hWnd;
    //水平滚动条
    SCROLLINFO si;
    si.cbSize=sizeof(SCROLLINFO);
    si.fMask=SIF_POS|SIF_RANGE|SIF_PAGE;
    si.nMax=100;
    si.nMin=0;
    si.nPos=10;
    si.nPage=10;
    ::SetScrollInfo(hList,SB_HORZ,&si,TRUE);//垂直滚动条
     si.cbSize=sizeof(SCROLLINFO);
    si.fMask=SIF_POS|SIF_RANGE|SIF_PAGE;
    si.nMax=100;
    si.nMin=0;
    si.nPos=10;
    si.nPage=10;
    ::SetScrollInfo(hList,SB_VERT,&si,TRUE);2.响应键盘消息,分析WM_KEYDOWN中的WPARAM参数值
    当wParam为VK_LEFT时,
    SCROLLINFO si={sizeof(SCROLLINFO)};
    si.fMask=SIF_POS|SIF_RANGE;
    GetScrollInfo(hList,SB_HORZ,&si);
    si.nPos-=1;
    if(si.nPos<si.nMin)
    si.nPos=si.nMin;
    SetScrollInfo(hList,SB_HORZ,&si,TRUE);当wParam为VK_RIGHT时,
    SCROLLINFO si={sizeof(SCROLLINFO)};
    si.fMask=SIF_POS|SIF_RANGE;
    GetScrollInfo(hList,SB_HORZ,&si);
    si.nPos+=1;
    if(si.nPos>si.nMax)
    si.nPos=si.nMax;
    SetScrollInfo(hList,SB_HORZ,&si,TRUE);当wParam为VK_UP时,
    SCROLLINFO si={sizeof(SCROLLINFO)};
    si.fMask=SIF_POS|SIF_RANGE;
    GetScrollInfo(hList,SB_VERT,&si);
    si.nPos-=1;
    if(si.nPos>si.nMax)
    si.nPos=si.nMax;
    SetScrollInfo(hList,SB_VERT,&si,TRUE);当wParam为VK_DOWN时,
    SCROLLINFO si={sizeof(SCROLLINFO)};
    si.fMask=SIF_POS|SIF_RANGE;
    GetScrollInfo(hList,SB_VERT,&si);
    si.nPos+=1;
    if(si.nPos>si.nMax)
    si.nPos=si.nMax;
    SetScrollInfo(hList,SB_VERT,&si,TRUE);、3.当用户点击四个按钮时,分别向列表框发送四类按键消息:
    //相同于用户按下左箭头
    SendMessage(hWnd,WM_KEYDOWN,(WPARAM)VK_LEFT,0);
    //相当于用户按下右箭头
    SendMessage(hWnd,WM_KEYDOWN,(WPARAM)VK_RIGHT,0);
    //相当于用户按下上箭头
    SendMessage(hWnd,WM_KEYDOWN,(WPARAM)VK_UP,0);
    //相当于用户按下下箭头
    SendMessage(hWnd,WM_KEYDOWN,(WPARAM)VK_DOWN,0);
      

  7.   

    void C**List::ScrollToLine(int iLine)
    {
    int a = GetTopIndex( );
    Scroll(CSize(0,33*(iLine-a)));
    }