在CSpinButtonCtrl MFC C ++中检测向上/向下箭头

时间:2018-04-11 10:41:44

标签: mfc spinner

当按下CSpinButtonCtrl的向上或向下箭头时,有没有办法区分?

我正在尝试使用OnPointerdown活动,但我不知道该怎么做......

afx_msg LRESULT CMySpinButtonCtrl::OnPointerdown(WPARAM wParam, LPARAM lParam)
{
   if(IS_POINTER_PRIMARY_WPARAM(wParam))
   {
       //TODO
   }
   return 0;
}

我会感激任何帮助。

1 个答案:

答案 0 :(得分:7)

  

当按下CSpinButtonCtrl的向上或向下箭头时,有没有办法区分?

您应该使用UDN_DELTAPOS来执行此操作。

  • 资源编辑器中右键单击控件,然后选择添加事件处理程序

Add Event Handler

  • 选择UDN_DELTAPOS消息,然后点击添加和修改

UDN_DELTAPOS

  • 您将获得骨架代码:

    void CMFCApplication1Dlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
    {
        LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
        // TODO: Add your control notification handler code here
        *pResult = 0;
    }
    
  • NMUPDOWN文章介绍了您使用的结构。您需要做的是测试iDelta值。示例:

    void CColumnOrderDlg::OnDeltaposSpinColumns(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
    
        if (pNMUpDown != nullptr)
        {
            if( pNMUpDown->iDelta > 0)
                // Up - Do stuff;
            else if(pNMUpDown->iDelta < 0)
                // Down - Do stuff;
        }
    
        *pResult = 0;
    }
    

还有一篇有用的文章here,其中指出:

  

如果您将旋转控件用于其他目的,例如,翻阅一系列窗口或对话框,则为UDN_DELTAPOS消息添加处理程序并在那里执行自定义操作。