其他分享
首页 > 其他分享> > mfc vc6.00 Spin控件实现小数0.1调节

mfc vc6.00 Spin控件实现小数0.1调节

作者:互联网

spin空间经常用到,近期帮客户写一个小程序,需要实现点击spin控件值以0.1增加和减少,兴致勃勃的百度了下,一大把,步骤都很详细,基本都是重载WM_VSCROLL消息,但是出现的问题是不能按指定数值调节,最后又翻了很多博客没找到合适的,最后在msdn找到spin控件消息UDN_DELTAPOS,完美解决

指定默认值20,

实现了!!!

#pragma once
//ps:测试spin按钮上下加减

// CSpinAndEditDlg 对话框

class CSpinAndEditDlg : public CDialogEx
{
    DECLARE_DYNAMIC(CSpinAndEditDlg)

public:
    CSpinAndEditDlg(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~CSpinAndEditDlg();

    // 对话框数据
    enum { IDD = IDD_DLG_SPIN_EDIT };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);
    //    double m_dNum;
    afx_msg void OnBnClickedButton1();
    double m_dNum;
};

 

 

// SpinAndEditDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "LoadDllDemo.h"
#include "SpinAndEditDlg.h"
#include "afxdialogex.h"
#define dMax 10.0
#define dMin 0.0

// CSpinAndEditDlg 对话框

IMPLEMENT_DYNAMIC(CSpinAndEditDlg, CDialogEx)

    CSpinAndEditDlg::CSpinAndEditDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CSpinAndEditDlg::IDD, pParent)
    , m_dNum(0)
{

    m_dNum = 0.5;
}

CSpinAndEditDlg::~CSpinAndEditDlg()
{
}

void CSpinAndEditDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    //  DDX_Text(pDX, IDC_EDIT1, m_dNum);
    DDX_Text(pDX, IDC_EDIT1, m_dNum);
    DDV_MinMaxDouble(pDX, m_dNum, dMin, dMax);
}


BEGIN_MESSAGE_MAP(CSpinAndEditDlg, CDialogEx)
    ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CSpinAndEditDlg::OnDeltaposSpin1)
    ON_BN_CLICKED(IDC_BUTTON1, &CSpinAndEditDlg::OnBnClickedButton1)
END_MESSAGE_MAP()


// CSpinAndEditDlg 消息处理程序


void CSpinAndEditDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    if(!UpdateData(TRUE))
    {
        m_dNum = 0;
        UpdateData(FALSE);
        return;
    }
    if(pNMUpDown->iDelta == -1)  // 如果此值为-1 , 说明点击了Spin的往上箭头
    {
        m_dNum = m_dNum + 0.1;
    }
    else if(pNMUpDown->iDelta == 1)  // 如果此值为, 说明点击了Spin的往下箭头
    {
        m_dNum = m_dNum - 0.1;
    }
    if(m_dNum > dMax || m_dNum < dMin)
    {
        UpdateData(TRUE);
    }
    UpdateData(FALSE);
    *pResult = 0;
}


void CSpinAndEditDlg::OnBnClickedButton1()
{
    UpdateData(TRUE);
    m_dNum;
}

标签:控件,mfc,pDX,0.1,CSpinAndEditDlg,dNum,UpdateData,CDialogEx,void
来源: https://blog.csdn.net/tangjinhu/article/details/95343167