MFC中如何设置与控件关联的变量的小数点位数
MFC中怎么设置与控件关联的变量的小数点位数?
我现在把EDIT1 和EDIT2 关联变量float型m_a,和m_b后,现在怎么改变它的小数点位数啊?急~~~~~~~~~
我是C++新人,麻烦了~~~
------解决方案--------------------
在对话框的.CPP文件里:
void CSpinDotDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_Edit1);
DDX_Control(pDX, IDC_SPIN1, m_Spin1);
}
BEGIN_MESSAGE_MAP(CSpinDotDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CSpinDotDlg::OnDeltaposSpin1)
END_MESSAGE_MAP()
// CSpinDotDlg 消息处理程序
BOOL CSpinDotDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
m_PrePos=0;
CRect rect,rect1;
GetDlgItem(IDC_EDIT1)->GetClientRect(rect);
GetDlgItem(IDC_EDIT1)->GetWindowRect(rect);
m_Spin1.GetClientRect(rect1);
ScreenToClient(rect);
m_Edit1=0.0f;
// m_Spin1.SetBuddy(GetDlgItem(IDC_EDIT1));//这句一定要去掉,在资源对话框里SPIN的属性里关于Buddy也要先FALSE;
m_Spin1.SetRange32(-100,100);
m_Spin1.SetPos(1);
m_Spin1.SetWindowPos(GetDlgItem(IDC_EDIT1),rect.right,rect.top, rect1.Width(),rect1.Height(),SWP_NOSIZE);
UpdateData(FALSE);
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CSpinDotDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CString str;
int pos,Delta;
pos=pNMUpDown->iPos;
Delta=pNMUpDown->iDelta;
UpdateData();
m_Edit1+=((float)Delta/10.0f);
str.Format("%5.1f",m_Edit1);
GetDlgItem(IDC_EDIT1)->SetWindowTextA(str);
m_PrePos=pos;
*pResult = 0;
}
在对话框里的.h文件:
// SpinDotDlg.h : 头文件
//
#pragma once
#include "afxcmn.h"
// CSpinDotDlg 对话框
class CSpinDotDlg : public CDialogEx
{
// 构造
public:
CSpinDotDlg(CWnd* pParent = NULL); // 标准构造函数
int m_PrePos;
// 对话框数据
enum { IDD = IDD_SPINDOT_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
float m_Edit1;
afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);
CSpinButtonCtrl m_Spin1;
};
------解决方案--------------------
关联为CString类型的变量
读写的时候,做一下转换/格式化
我现在把EDIT1 和EDIT2 关联变量float型m_a,和m_b后,现在怎么改变它的小数点位数啊?急~~~~~~~~~
我是C++新人,麻烦了~~~
------解决方案--------------------
在对话框的.CPP文件里:
void CSpinDotDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_Edit1);
DDX_Control(pDX, IDC_SPIN1, m_Spin1);
}
BEGIN_MESSAGE_MAP(CSpinDotDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CSpinDotDlg::OnDeltaposSpin1)
END_MESSAGE_MAP()
// CSpinDotDlg 消息处理程序
BOOL CSpinDotDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
m_PrePos=0;
CRect rect,rect1;
GetDlgItem(IDC_EDIT1)->GetClientRect(rect);
GetDlgItem(IDC_EDIT1)->GetWindowRect(rect);
m_Spin1.GetClientRect(rect1);
ScreenToClient(rect);
m_Edit1=0.0f;
// m_Spin1.SetBuddy(GetDlgItem(IDC_EDIT1));//这句一定要去掉,在资源对话框里SPIN的属性里关于Buddy也要先FALSE;
m_Spin1.SetRange32(-100,100);
m_Spin1.SetPos(1);
m_Spin1.SetWindowPos(GetDlgItem(IDC_EDIT1),rect.right,rect.top, rect1.Width(),rect1.Height(),SWP_NOSIZE);
UpdateData(FALSE);
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CSpinDotDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CString str;
int pos,Delta;
pos=pNMUpDown->iPos;
Delta=pNMUpDown->iDelta;
UpdateData();
m_Edit1+=((float)Delta/10.0f);
str.Format("%5.1f",m_Edit1);
GetDlgItem(IDC_EDIT1)->SetWindowTextA(str);
m_PrePos=pos;
*pResult = 0;
}
在对话框里的.h文件:
// SpinDotDlg.h : 头文件
//
#pragma once
#include "afxcmn.h"
// CSpinDotDlg 对话框
class CSpinDotDlg : public CDialogEx
{
// 构造
public:
CSpinDotDlg(CWnd* pParent = NULL); // 标准构造函数
int m_PrePos;
// 对话框数据
enum { IDD = IDD_SPINDOT_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
float m_Edit1;
afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);
CSpinButtonCtrl m_Spin1;
};
------解决方案--------------------
关联为CString类型的变量
读写的时候,做一下转换/格式化