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

Alb*_*cio 2 mfc spinner

是否有任何方法可以区分a的向上或向下箭头CSpinButtonCtrl

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

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

我会感激任何帮助.

And*_*kle 7

是否有任何方法可以区分a的向上或向下箭头CSpinButtonCtrl

你应该UDN_DELTAPOS这样做.

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

添加事件处理程序

  • 选择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;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 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;
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

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