做四个按扭函数,如何让这四个按扭响应键盘上的四个左右和上下按键 在工程中,做了四个按扭,和一个list控件,想通过点激这四个按扭,使list控件的内容能够左右,上下移动,达到替代键盘上的左右上下键的功能,,,,我做了一下,可以实现,选中和移动 ,但是没能实现滚动条的移动,,,,必须要实现滚动条的移动,不然就看不到当前移动到那一条记录了!!!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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);} SetScrollPos 这个可以吧,你在按钮事件中,设这个,可以不 ??自己算好,应该可以的。 呵呵,新手,不要骂我。 CListCtrl 有个Scroll函数,可以滚动 还有EnsureVisible函数,确保你移动的时候item可见 //为了测试,定义在这里,实际的话,避免这样做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; }} 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); void C**List::ScrollToLine(int iLine){ int a = GetTopIndex( ); Scroll(CSize(0,33*(iLine-a)));} 急求!VC++实现L系统血管树绘制 vc读取局域网内主机注册表的问题? MFC 对话框 初学者请教下CAsyncSocket网络编程的一些原理问题,谢谢 webbrower控件无法使用 如何获取当前Windows的窗口颜色? 问个多接口的问题 BitBlt使用问题 MFC ODBC database DuiLib 一个消息响应(消息来自线程)和updatedata的奇怪问题 单文档创建多视图
{
// 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);
}
呵呵,新手,不要骂我。
//为了测试,定义在这里,实际的话,避免这样做
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;
}
}
//水平滚动条
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);
{
int a = GetTopIndex( );
Scroll(CSize(0,33*(iLine-a)));
}