📄 cspin.cpp
字号:
#include "StdAfx.h"
#include "CNumEdit.h"
#include "CSpin.h"
IMPLEMENT_DYNAMIC(CSpin,CSpinButtonCtrl)
BEGIN_MESSAGE_MAP(CSpin,CSpinButtonCtrl)
//{{AFX_MSG_MAP(CSpin)
//}}AFX_MSG_MAP
ON_NOTIFY_REFLECT(UDN_DELTAPOS, OnDeltaPos)
END_MESSAGE_MAP()
// Class CSpin
CSpin::CSpin ()
{
m_delta = 1;
}
void CSpin::Change (int steps)
{
CWnd* b = GetBuddy();
CNumEdit* edit = dynamic_cast<CNumEdit*>(b);
ASSERT(edit); // cast falied
float fDelta = steps*m_delta;
float f = edit->GetValue();
// This messy bit of code gets around a floating point resolution problem.
// For example, if your step is -1 and m_Delta is .1, you would end up
// with -1.49xxx e-9 and it would never set the control to zero. The old
// 0 != 0 problem.
if( f == -fDelta )
f = 0;
else
f += fDelta;
edit->SetValue(f);
}
void CSpin::OnDeltaPos (NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
DWORD bWrap = (GetStyle() & UDS_WRAP);
if ((pNMUpDown->iPos <= pNMUpDown->iDelta) ||
(pNMUpDown->iPos >= 1000 - pNMUpDown->iDelta)) pNMUpDown->iPos = 500;
Change(pNMUpDown->iDelta);
*pResult = 0;
}
void CSpin::SetDelta (float x)
{
m_delta = x;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -