首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

响应WM_VSCROLL有关问题

2012-01-15 
响应WM_VSCROLL问题请高手指点,在对话框上我放置了几个Spin控件,我响应了响应了此消息函数如下:C/C++ code

响应WM_VSCROLL问题
请高手指点,在对话框上我放置了几个Spin控件,我响应了响应了此消息函数如下:

C/C++ code
void CCircularDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {    // TODO: Add your message handler code here and/or call default    switch(nSBCode)    {    case SB_LINEDOWN:        MessageBox("xia");        break;    case SB_LINEUP:        MessageBox("shang");        break;    }        CDialog::OnVScroll(nSBCode, nPos, pScrollBar);}


这里我想问一下就上面这个函数他可以确定你是按的spin控件的向上还是向下的按钮吗?它是怎么确定的,我上面是那样写的发现在按spin控件向上或是向下的按钮时他是不执行case对应代码的。这里如果能确定的话。我该怎么做在这个函数里才能确定是按的spin控件向上还是向下的按钮呢?谢谢 请高手指点

[解决办法]
判断spin向上还是向下,不是响应对话框的WM_VSCROLL消息,而应该响应Spin控件的UDN_DELTAPOS消息。

你添加一个SPIN控件,在类向导可以看到两个可响应的消息.NM_OUTOFMEMORY和UDN_DELTAPOS,你响应UDN_DELTAPOS就可以了的,如下:
C/C++ code
void CTestDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult)  {  NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;  if(pNMUpDown->iDelta == 1) // 如果此值为1 , 说明点击了Spin的往下箭头  {  //do something!  }  else if(pNMUpDown->iDelta == -1) // 如果此值为-1 , 说明点击了Spin的往上箭头  {  //do something!  }  UpdateData(FALSE);//更新数据  *pResult = 0;}
[解决办法]
UDN_DELTAPOS
C/C++ code
void CXXXDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) {    NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;    // TODO: Add your control notification handler code here    switch(pNMUpDown->hdr.idFrom)    {    case IDC_SPIN1:        {            if(pNMUpDown->iDelta > 0)            {                AfxMessageBox(_T("DOWN"));            }            else            {                AfxMessageBox(_T("UP"));            }                    }        break;    default:        break;    }    *pResult = 0;} 

热点排行