用spin和edit控件来用spin控制edit里面小数的增减

1.响应SPIN的消息,就是点SPIN的上键头和下键头的消息,在这个消息里改变值是以0.1步进量增减.
2.使用UpdateData(FALSE)来更新EDIT的关联的double型的变量。

创建步骤

1、首先新建一个Dialog窗口,在新建窗口中右击鼠标,添加类,如:CSpinAndEditDlg

2、然后通过工具箱把Spin Control控件、Edit Control控件分别拖拽到Dialog窗口中,

   Spin属性中设置
   Alignment: Right Align
   Auto Buddy:True 
   Set Buddy Integer: True(ps:可以不选)

"Ctrl+D"设置Edit和Spin的Tab顺序(例如Edit为1,Spin为2)(ps:如果不设置Tab 顺序,spin会显示不出来)

3、双击Spin Control控件即可在CSpinAndEditDlg.cpp中生成如下几段相应代码。

SpinAndEditDlg.h

 1 #pragma once
 2 //ps:测试spin按钮上下加减
 3 
 4 // CSpinAndEditDlg 对话框
 5 
 6 class CSpinAndEditDlg : public CDialogEx
 7 {
 8     DECLARE_DYNAMIC(CSpinAndEditDlg)
 9 
10 public:
11     CSpinAndEditDlg(CWnd* pParent = NULL);   // 标准构造函数
12     virtual ~CSpinAndEditDlg();
13 
14     // 对话框数据
15     enum { IDD = IDD_DLG_SPIN_EDIT };
16 
17 protected:
18     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
19 
20     DECLARE_MESSAGE_MAP()
21 public:
22     afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);
23     //    double m_dNum;
24     afx_msg void OnBnClickedButton1();
25     double m_dNum;
26 };
View Code

SpinAndEditDlg.cpp

 1 // SpinAndEditDlg.cpp : 实现文件
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "LoadDllDemo.h"
 6 #include "SpinAndEditDlg.h"
 7 #include "afxdialogex.h"
 8 #define dMax 10.0
 9 #define dMin 0.0
10 
11 // CSpinAndEditDlg 对话框
12 
13 IMPLEMENT_DYNAMIC(CSpinAndEditDlg, CDialogEx)
14 
15     CSpinAndEditDlg::CSpinAndEditDlg(CWnd* pParent /*=NULL*/)
16     : CDialogEx(CSpinAndEditDlg::IDD, pParent)
17     , m_dNum(0)
18 {
19 
20     m_dNum = 0.5;
21 }
22 
23 CSpinAndEditDlg::~CSpinAndEditDlg()
24 {
25 }
26 
27 void CSpinAndEditDlg::DoDataExchange(CDataExchange* pDX)
28 {
29     CDialogEx::DoDataExchange(pDX);
30     //  DDX_Text(pDX, IDC_EDIT1, m_dNum);
31     DDX_Text(pDX, IDC_EDIT1, m_dNum);
32     DDV_MinMaxDouble(pDX, m_dNum, dMin, dMax);
33 }
34 
35 
36 BEGIN_MESSAGE_MAP(CSpinAndEditDlg, CDialogEx)
37     ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CSpinAndEditDlg::OnDeltaposSpin1)
38     ON_BN_CLICKED(IDC_BUTTON1, &CSpinAndEditDlg::OnBnClickedButton1)
39 END_MESSAGE_MAP()
40 
41 
42 // CSpinAndEditDlg 消息处理程序
43 
44 
45 void CSpinAndEditDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
46 {
47     LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
48     // TODO: 在此添加控件通知处理程序代码
49     if(!UpdateData(TRUE))
50     {
51         m_dNum = 0;
52         UpdateData(FALSE);
53         return;
54     }
55     if(pNMUpDown->iDelta == -1)  // 如果此值为-1 , 说明点击了Spin的往上箭头
56     {
57         m_dNum = m_dNum + 0.1;
58     }
59     else if(pNMUpDown->iDelta == 1)  // 如果此值为, 说明点击了Spin的往下箭头
60     {
61         m_dNum = m_dNum - 0.1;
62     }
63     if(m_dNum > dMax || m_dNum < dMin)
64     {
65         UpdateData(TRUE);
66     }
67     UpdateData(FALSE);
68     *pResult = 0;
69 }
70 
71 
72 void CSpinAndEditDlg::OnBnClickedButton1()
73 {
74     UpdateData(TRUE);
75     m_dNum;
76 }
View Code
原文地址:https://www.cnblogs.com/lpxblog/p/4900246.html