1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
#include <sstream>
#include <string>
#include <iomanip>
#include <iostream>
template<typename T>
bool FromCtrl( const CWnd & Ctrl, T & Dest )
{
CString Str;
Ctrl.GetWindowText(Str);
#ifdef _UNICODE
std::wistringstream iss( static_cast<LPCTSTR>( Str) );
#else
std::istringstream iss( static_cast<LPCTSTR>( Str) );
#endif
// tenter la conversion vers Dest
return iss >> Dest != 0;
}
class FormatNum
{
public :
FormatNum(){}
template <typename T>
FormatNum(const T&t)
{
operator <<(t);
}
template <typename T>
FormatNum & operator << (const T& t)
{
m_ss << t;
return *this;
}
public :
#ifdef _UNICODE
std::wstringstream m_ss;
#else
std::stringstream m_ss;
#endif
};
template<typename T>
void ToCtrl(CWnd & Ctrl,const T & Src,FormatNum &rFormat=FormatNum())
{
rFormat << Src;
#ifdef _UNICODE
std::wstring s=rFormat.m_ss.str();
#else
std::string s=rFormat.m_ss.str();
#endif
Ctrl.SetWindowText(s.c_str());
}
template<typename VAL>
bool AddToCtrl(CWnd & Ctrl,VAL val,FormatNum &rFormat=FormatNum())
{
VAL ret;
if(!FromCtrl(Ctrl,ret)) return false;
ret+=val;
ToCtrl(Ctrl,ret,rFormat);
return true;
}
template<>
bool AddToCtrl<TCHAR *>(CWnd & Ctrl,TCHAR *val,FormatNum &rFormat)
{
CString Str;
Ctrl.GetWindowText(Str);
Str+=val;
Ctrl.SetWindowText(Str);
return true;
} |
Partager