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