亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? numfrm.cpp

?? xiazai
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
        FRM_THOUSAND_SEP,
        _T(']'), 0 };

    int nLen;

    m_nDec = 0;
    m_pTmpBuffer[0] = 0;
    _stscanf(sFrm, szSScanfFormat1, m_pTmpBuffer);      // INTEGER PART

    if(nLen = lstrlen(m_pTmpBuffer))
        sFrm = sFrm.Mid(nLen);

    ProcessNumFlags(m_pTmpBuffer, m_nLeftFlags);

    if(sFrm.GetLength() && sFrm[0] == FRM_DEC_POINT)
    {
        sFrm = sFrm.Mid(1);
        m_pTmpBuffer[0] = 0;
        _stscanf(sFrm, szSScanfFormat2, m_pTmpBuffer);  // DEC PART
        ProcessNumFlags(m_pTmpBuffer, m_nRightFlags);
        m_nDec = lstrlen(m_pTmpBuffer);

        if(m_nDec)
            sFrm = sFrm.Mid(m_nDec);

        m_pTmpBuffer[0] = 0;
        _stscanf(sFrm, szSScanfFormat3, m_pTmpBuffer);  // POWER PART

        if(nLen = lstrlen(m_pTmpBuffer))
            sFrm = sFrm.Mid(nLen);
    }
    ProcessPower(m_pTmpBuffer);

    return TRUE;    
}

void CNumFrmNode::ProcessNumFlags(LPCTSTR pBuff, int& nFlags)
{
    if(_tcschr(pBuff, FRM_DIGIT))           nFlags |= DF_DIGIT;
    if(_tcschr(pBuff, FRM_DIGIT_ZERO))      nFlags |= DF_DIGIT_ZERO;
    if(_tcschr(pBuff, FRM_DIGIT_BALNKS))    nFlags |= DF_DIGIT_BALNKS;
    if(_tcschr(pBuff, FRM_THOUSAND_SEP))    nFlags |= DF_THOUSANDS;
}

void CNumFrmNode::ProcessPower(LPCTSTR pBuff)
{
    int nLen = lstrlen(pBuff);
    int i;
    if(nLen)
    {
        int nPowers = 0;
        for(i = nLen - 1; i >= 0; i--)
        {
            if(pBuff[i] == FRM_THOUSAND_SEP)
                nPowers++;
            else
                break;
        }
        if(nPowers)
        {
            m_nCommonFlags |= CF_USE_POWER;
            m_nPowered = m_nPowered / pow(10.0, (double)(nPowers * INTL_GROUP_DIGIT_LEN));
        }
    }
}

static COLORREF colOldColor;

void CNumFrmNode::BeforePrint(double nVal, CDC* pDC, LPCRECT lpRect, int nForceDec, BOOL bFull) const
{
    int         nLenBuffer;
    int         nNumDec;

    m_pTmpBuffer[0] = 0;
    
    if(nForceDec != -1)
        nNumDec = nForceDec;
    else
        nNumDec = m_nDec;

    if(bFull)   // BEFORE MAIN NUMBER
    {
        if(m_nCommonFlags & (CF_USE_POWER | CF_USE_PERCENT))
            nVal = nVal * m_nPowered;

        lstrcpy(m_pTmpBuffer, m_sText1);
    }

    if( (m_nLeftFlags  & (DF_DIGIT | DF_DIGIT_BALNKS | DF_DIGIT_ZERO ) ) |
        (m_nRightFlags & (DF_DIGIT | DF_DIGIT_BALNKS | DF_DIGIT_ZERO ) )   )
    {
        if(bFull)
		{
            WinFormat(m_pTmpBuffer + m_sText1.GetLength(), 
                MAX_NFORMAT_LEN - m_sText1.GetLength() - m_sText2.GetLength() - 1,
                nVal, nNumDec, m_nLeftFlags & DF_THOUSANDS,
                m_nLeftFlags & DF_DIGIT_ZERO);

			if( (m_nCommonFlags & CF_PURGE_SIGN) && nVal < 0.0 )
			{
				PTCHAR pch;
				pch =  _tcsstr(m_pTmpBuffer + m_sText1.GetLength(), INTL_NEGATIVE_STR);
				if(pch)
					memmove(pch, pch + 1, (lstrlen(pch + 1) + 1) * sizeof(TCHAR));
			}
		}
        else
            WinFormat(m_pTmpBuffer, MAX_NFORMAT_LEN - 1,
                nVal, nNumDec, m_nLeftFlags & DF_THOUSANDS, m_nLeftFlags & DF_DIGIT_ZERO );
    }

    if(m_nDec)
    {
        int i;
        if(m_nRightFlags & DF_DIGIT)
        {
            nLenBuffer = lstrlen(m_pTmpBuffer);
            for(i = nLenBuffer - 1; i >= 0; i--)
            {
                if(m_pTmpBuffer[i] == _T('0'))
                    m_pTmpBuffer[i] = 0;
                else
                    break;
            }
        }
        //if(m_nRightFlags & DF_DIGIT_ZERO)
        //{ /* Nothing to do */ }

        if(m_nRightFlags & DF_DIGIT_BALNKS)
        {
            nLenBuffer = lstrlen(m_pTmpBuffer);
            for(i = nLenBuffer - 1; i >= 0; i--)
            {
                if(m_pTmpBuffer[i] == _T('0'))
                    m_pTmpBuffer[i] = OUTCHAR_BLANK;
                else
                    break;
            }
        }
    }
    
    if(bFull)   // AFTER MAIN NUMBER
    {
        lstrcat(m_pTmpBuffer, m_sText2);

        if( m_nCommonFlags & CF_USE_PERCENT )
        {
            int nCurrLength = lstrlen(m_pTmpBuffer);
            m_pTmpBuffer[nCurrLength] = FRM_PERSENT;
            m_pTmpBuffer[nCurrLength + 1] = _T('\0');
        }
    }

    if(pDC && lpRect && (m_nCommonFlags & CF_USE_COLOR))
        colOldColor = pDC->SetTextColor(m_Color);
}

void CNumFrmNode::AfterPrint(CDC* pDC, LPCRECT lpRect) const
{
    if(pDC && lpRect && (m_nCommonFlags & CF_USE_COLOR))
        pDC->SetTextColor(colOldColor);
}

LPCTSTR CNumFrmNode::PrintNumFormat(double nVal, CDC* pDC, LPRECT lpRect, UINT nFormat, int nForceDec, BOOL bFull) const
{
	BeforePrint(nVal, pDC, lpRect, nForceDec, bFull);
    if(pDC && lpRect)
        pDC->DrawText(m_pTmpBuffer, -1, lpRect, nFormat);

    AfterPrint(pDC, lpRect);
    return (LPCTSTR)m_pTmpBuffer;
}

LPCTSTR CNumFrmNode::PrintNumFormatETO(double nVal, CDC* pDC, int x, int y, UINT nOptions, LPCRECT lpRect, int nForceDec, BOOL bFull) const
{
	BeforePrint(nVal, pDC, lpRect, nForceDec, bFull);
    if(pDC && lpRect)
		pDC->ExtTextOut(x, y, nOptions, lpRect, m_pTmpBuffer, lstrlen(m_pTmpBuffer), NULL );

    AfterPrint(pDC, lpRect);
    return (LPCTSTR)m_pTmpBuffer;
}


LPCTSTR CNumFrmNode::PrintSimpleNumFormat(double nOut, int nForceDec) const
{
    CString sSprintfFormat;

    m_pTmpBuffer[0] = 0;
    
    sSprintfFormat.Format(_T("%%16.%dlf"), 
        nForceDec == -1 ? m_nDec : nForceDec);

    _stprintf(m_pTmpBuffer, sSprintfFormat, nOut);
    return (LPCTSTR)m_pTmpBuffer;
}

BOOL CNumFrmNode::WinFormat(LPTSTR szOutput, int nOutBufferLen, double nNumb, int nDec, BOOL bThousandSepareted, BOOL bIntZeroObligated)
{
    const int nBufferLen = 16;
    
    if(!m_bLocaleInitialized)
    {
        // Locale initialzation
        if(!GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, m_sThousand.GetBuffer(nBufferLen), nBufferLen))
            m_sThousand = _T(" ");
        m_sThousand.ReleaseBuffer();
        
        if(!GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, m_sDecimal.GetBuffer(nBufferLen), nBufferLen))
            m_sDecimal = _T(".");
        m_sDecimal.ReleaseBuffer();
        
        m_bLocaleInitialized = TRUE;
    }
    
    int         nPosDecimal;
    int         nSign;
    
    LPTSTR      pfcvtBuffer;
    LPTSTR      pPos;
    
    if( fabs(nNumb) > 1.0e+030 )
    {
        lstrcpy(szOutput, _T("Overflow"));
        return FALSE;
    }
    
#ifdef _UNICODE
    LPCSTR pAStr = fcvt(nNumb, nDec, &nPosDecimal, &nSign );
    USES_CONVERSION;
    pfcvtBuffer = A2W(pAStr);
#else
    pfcvtBuffer = fcvt(nNumb, nDec, &nPosDecimal, &nSign );
#endif
    
    int nfcvtLen = lstrlen(pfcvtBuffer);
    
    // Calculating approximate length of result
    int nEstimatedLength = 
        (nSign ? lstrlen(INTL_NEGATIVE_STR) : 0) +
        max(nfcvtLen, nDec + 1) +
        (nDec ? m_sDecimal.GetLength() : 0) +
        (bThousandSepareted ? ((nPosDecimal / INTL_GROUP_DIGIT_LEN) * m_sThousand.GetLength()) : 0);
    
    if(nEstimatedLength > nOutBufferLen)
    {
        lstrcpy(szOutput, _T("Overflow"));
        return FALSE;
    }
    
    pPos = szOutput;
    if(nSign && NonZero(nNumb))
    {
        lstrcpy(pPos, INTL_NEGATIVE_STR);
        pPos += lstrlen(INTL_NEGATIVE_STR);
    }
    
    // zero length
    if(nPosDecimal <= 0 && bIntZeroObligated)
        *pPos++ = _T('0');

    if(nPosDecimal < 0 && nDec > 0)
    {
        lstrcpy(pPos, m_sDecimal);
        pPos += m_sDecimal.GetLength();
        for(int pos = nPosDecimal; pos < 0 && (pos - nPosDecimal) < nDec; pos++)
            *pPos++ = _T('0');
    }

    for(int i = 0; i < nfcvtLen; i++)
    {
        // Check for thousand separator insertion
        if( i > 0 && i < nPosDecimal && 
            bThousandSepareted && 
            (nPosDecimal - i) % INTL_GROUP_DIGIT_LEN == 0)
        {
            lstrcpy(pPos, m_sThousand);
            pPos += m_sThousand.GetLength();
        }
        // Check for decimal separator insertion
        else if(i == nPosDecimal)
        {
            lstrcpy(pPos, m_sDecimal);
            pPos += m_sDecimal.GetLength();
        }
        *pPos++ = pfcvtBuffer[i];
    }
    *pPos = _T('\0');
    return TRUE;
}

//_________________________________________________________________
//
CNumericFormat::CNumericFormat()
{
    m_pNodes        = NULL;
    m_nNodeCount    = 0;
}

CNumericFormat::CNumericFormat(const CString& sFormat)
{
    m_pNodes        = NULL;
    m_nNodeCount    = 0;

    SetFormat(sFormat);
}

CNumericFormat::~CNumericFormat()
{
    if(m_pNodes)
        delete [] m_pNodes;
}

CString CNumericFormat::GetFormat() const
{
    return m_sFormat;
}

BOOL CNumericFormat::SetFormat(const CString& sFormat)
{
    if(sFormat.IsEmpty())
        return FALSE;

    if(sFormat != m_sFormat)
    {
        CString sFrm = sFormat;

        // Check for old style format (sprintf style),
        // and automatic convertion into new style if 
        // nessesory.
        if(sFrm[0] == _T('%') && sFrm.Right(2) == _T("lf"))
        {
            int pos = sFrm.Find(_T('.'));
            int nNumDec;
            if(pos != -1)
            {
                nNumDec = _ttoi(&(((LPCTSTR)sFrm)[pos + 1]));

                sFrm = CString(FRM_DIGIT) + FRM_THOUSAND_SEP;
                sFrm += CString(FRM_DIGIT, INTL_GROUP_DIGIT_LEN);

                if(nNumDec)
                {
                    sFrm += FRM_DEC_POINT;
                    sFrm += CString(FRM_DIGIT_ZERO, nNumDec);
                }
            }
        }

        CString sNode;
		int  i;

		// Calculate number of sections in new format string
		m_nNodeCount = 0;

		for(i = 0; i < sFrm.GetLength(); i++)
		{
			if(sFrm[i] == FRM_SECTION_DELIM) 
				m_nNodeCount++;
		}
		if(sFrm[sFrm.GetLength() - 1] != FRM_SECTION_DELIM)
			m_nNodeCount++;

        // Obligatory clean up old content of array
        if(m_pNodes)
            delete [] m_pNodes;

        m_pNodes = new CNumFrmNode[m_nNodeCount];
        if(!m_pNodes)
            return FALSE;

		BOOL bConditionalFormat = FALSE;
		for(i = 0; i < m_nNodeCount; i++)
		{
	        sNode = GetLine(sFrm, FRM_SECTION_DELIM);
		    if( !(m_pNodes[i].SetFormat(sNode)) )
				return FALSE;

			if(m_pNodes[i].IsConditional())
				bConditionalFormat = TRUE;
		}

		// Set up default conditions (if requered)
		if(!bConditionalFormat && m_nNodeCount > 1)
		{
			if(m_nNodeCount == 2)
			{
				m_pNodes[0].SetCondition(SGN_GREATER_OR_EQUAL_1, 0.0);
			}
			else /* m_nNodeCount >= 3 */
			{
				m_pNodes[0].SetCondition(SGN_GREATER, 0.0);
				m_pNodes[1].SetCondition(SGN_LESS,    0.0);
			}
		}

        m_sFormat = sFormat;
    }
    return TRUE;
}

LPCTSTR CNumericFormat::SPrintNumber(double nVal, BOOL bFull) const
{
    LPCTSTR lpszBuffer = NULL; 
    if(bFull)
        lpszBuffer = PrintNumber(nVal, NULL, NULL, 0, -1);
    else
        lpszBuffer = m_pNodes[0].PrintNumFormat(nVal, NULL, NULL, 0, -1, bFull);
    return lpszBuffer;
}

LPCTSTR CNumericFormat::SPrintNumberSimple(double nOut, int nForceDec) const
{
    LPCTSTR lpszBuffer = NULL; 
    if(!m_sFormat.IsEmpty())
    {
        lpszBuffer = m_pNodes[0].PrintSimpleNumFormat(nOut, nForceDec);
    }
    else
        TRACE(_T("CNumericFormat: Attemption to print on noninitialized format !\n"));
    return lpszBuffer;
}

LPCTSTR CNumericFormat::PrintNumber(double nVal, CDC* pDC, LPRECT lpRect, UINT nFormat, int nForceDec) const
{
    LPCTSTR lpszBuffer = NULL; 
    if(!m_sFormat.IsEmpty() && m_pNodes != NULL)
    {
		for(int i = 0; i < m_nNodeCount; i++)
		{
			if(m_pNodes[i].Satisfied(nVal))
			{
	            lpszBuffer = m_pNodes[i].PrintNumFormat(nVal, pDC, lpRect, nFormat, nForceDec, TRUE);
				return lpszBuffer;
			}
		}
    }
    else
        TRACE(_T("CNumericFormat: Attemption to print by uninitialized format !\n"));
    return lpszBuffer;
}

LPCTSTR CNumericFormat::PrintNumberETO(double nVal, CDC* pDC, int x, int y, UINT nOptions, LPCRECT lpRect, int nForceDec) const
{
    LPCTSTR lpszBuffer = NULL; 
    if(!m_sFormat.IsEmpty() && m_pNodes != NULL)
    {
		for(int i = 0; i < m_nNodeCount; i++)
		{
			if(m_pNodes[i].Satisfied(nVal))
			{
	            lpszBuffer = m_pNodes[i].PrintNumFormatETO(nVal, pDC, x, y, nOptions, lpRect, nForceDec, TRUE);
				return lpszBuffer;
			}
		}
    }
    else
        TRACE(_T("CNumericFormat: Attemption to print by uninitialized format !\n"));
    return lpszBuffer;
}


CArchive& operator<<(CArchive& ar, const CNumericFormat& frmt)
{ 
    return ar << frmt.m_sFormat; 
}

CArchive& operator>>(CArchive& ar, CNumericFormat& frmt)
{
    CString sFormat; 
    ar >> sFormat; 
    frmt.SetFormat(sFormat); 
    return ar; 
}

BOOL CNumericFormat::LoadString(UINT nRes)
{
    CString sStr;
    if(sStr.LoadString(nRes))
        return SetFormat(sStr); 
    else
        return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本亚洲欧美天堂免费| 欧美疯狂性受xxxxx喷水图片| 7777精品伊人久久久大香线蕉完整版| 无吗不卡中文字幕| 精品久久久久久久久久久久久久久久久| 美女视频黄久久| 国产精品高清亚洲| 欧美一区二区三区视频免费 | 亚洲免费视频中文字幕| 91国偷自产一区二区三区成为亚洲经典 | 激情深爱一区二区| 欧美国产日韩a欧美在线观看| 国产一区二区三区美女| 亚洲一卡二卡三卡四卡| 久久久精品综合| 欧美三级日韩三级国产三级| 国产一区二区三区综合| 午夜精品久久久久久不卡8050| 亚洲精品一区二区三区精华液| 色综合一个色综合| 韩国av一区二区三区在线观看| 亚洲国产精品精华液2区45| 91玉足脚交白嫩脚丫在线播放| 蜜桃一区二区三区在线观看| 亚洲一区在线免费观看| 久久久久久久久久久久久女国产乱| 欧美特级限制片免费在线观看| 成人免费观看视频| 国产成人亚洲综合色影视| 蜜桃精品视频在线观看| 亚洲精品美腿丝袜| 精品国产乱码久久久久久1区2区| 欧美色手机在线观看| 在线精品观看国产| 欧美日韩国产成人在线91| 91麻豆国产在线观看| 国产精品资源网站| 成人免费视频播放| 99精品热视频| 色一情一乱一乱一91av| 国产不卡在线一区| av亚洲精华国产精华| 99精品黄色片免费大全| 国产一区二区三区久久久 | 国产精品久久久久久久久久久免费看 | 亚洲男人天堂av网| 亚洲综合成人在线视频| 日韩电影在线免费观看| 麻豆精品国产91久久久久久| 亚洲猫色日本管| 亚洲超碰精品一区二区| 久久99精品久久久久| 成人毛片在线观看| 欧美精品乱人伦久久久久久| 26uuu久久天堂性欧美| 亚洲欧美电影一区二区| 偷窥少妇高潮呻吟av久久免费| 日韩高清在线电影| 欧美午夜宅男影院| 日韩午夜在线播放| 国产精品初高中害羞小美女文| 亚洲第一会所有码转帖| 韩国理伦片一区二区三区在线播放 | 久久机这里只有精品| 不卡的av在线播放| 欧美一区二区在线视频| 伊人开心综合网| 国产成人av一区二区三区在线观看| 色噜噜狠狠一区二区三区果冻| 欧美高清精品3d| 日韩成人一级片| 日本久久一区二区三区| 国产精品久久精品日日| 日本aⅴ免费视频一区二区三区| 不卡欧美aaaaa| 久久久综合激的五月天| 激情综合五月婷婷| 欧美一区二区三区四区高清| 亚洲激情校园春色| 99re热这里只有精品视频| 中文字幕精品在线不卡| 国产剧情一区在线| 26uuu久久天堂性欧美| 精品一区二区精品| 久久无码av三级| 国产大片一区二区| 亚洲欧洲日本在线| 国产精品国产三级国产普通话99| 国产亚洲美州欧州综合国| 天天影视网天天综合色在线播放 | 久久国产精品色婷婷| 91精品国产一区二区三区蜜臀| 亚洲一二三四区| 欧美日韩精品高清| 韩国女主播一区| 日本一区二区三区在线不卡| 成人美女视频在线观看18| 一区二区三区小说| 欧美美女一区二区| 久久精品国产精品亚洲红杏 | 色一区在线观看| 视频一区欧美精品| 久久青草国产手机看片福利盒子 | 久久久www免费人成精品| 波多野结衣精品在线| 亚洲一区电影777| 亚洲久草在线视频| 欧美视频日韩视频在线观看| 蜜桃精品视频在线| 久久久国产精品午夜一区ai换脸| 国产成人免费视频一区| 久久综合九色综合久久久精品综合 | 成人理论电影网| 日韩激情视频网站| 一区二区三区在线视频免费 | 91亚洲资源网| 国产真实乱子伦精品视频| 亚洲成av人片| 国产色产综合色产在线视频| 日本高清不卡在线观看| 亚洲一区二区三区四区在线| 3d成人动漫网站| 色嗨嗨av一区二区三区| 国产v日产∨综合v精品视频| 视频一区中文字幕国产| 亚洲同性同志一二三专区| 26uuu国产日韩综合| 7777精品伊人久久久大香线蕉完整版 | 奇米影视一区二区三区| |精品福利一区二区三区| 日韩视频一区二区三区| 欧美三片在线视频观看| 欧洲精品视频在线观看| 不卡的av网站| jlzzjlzz亚洲女人18| 国产精品亚洲专一区二区三区| 美女看a上一区| 国内一区二区在线| 狠狠久久亚洲欧美| 成人禁用看黄a在线| 成人一区二区三区在线观看| 国产成人99久久亚洲综合精品| 韩国一区二区在线观看| 国产精品一线二线三线精华| 国产美女精品在线| 成+人+亚洲+综合天堂| 成人av片在线观看| 在线精品国精品国产尤物884a| 欧美色欧美亚洲另类二区| 这里只有精品视频在线观看| 日韩免费观看高清完整版| 久久久99免费| 亚洲一区二区三区四区中文字幕| 亚洲成人三级小说| 久久99国产精品尤物| 在线观看日韩一区| 欧美日韩高清一区| 在线不卡免费欧美| 国产精品美女久久久久久久| 亚洲乱码国产乱码精品精小说| 日韩高清一级片| 99久久久久久| 久久嫩草精品久久久久| 亚洲小说春色综合另类电影| 精品综合久久久久久8888| 91看片淫黄大片一级| 欧美大片一区二区| 亚洲国产成人高清精品| 国产a久久麻豆| 欧美一区二区人人喊爽| 亚洲精品成人a在线观看| 高清国产一区二区三区| 日韩一区二区三区免费观看| 国产精品三级电影| 国产一区二区精品久久99| 欧美精品乱码久久久久久按摩 | 一区二区日韩电影| 成人污视频在线观看| 久久这里只有精品首页| 日韩和欧美一区二区| 欧美老女人第四色| 亚洲主播在线播放| 色婷婷香蕉在线一区二区| 国产精品女上位| 欧美视频一区二区在线观看| 国产日韩欧美不卡| 蜜桃在线一区二区三区| 91看片淫黄大片一级在线观看| 欧美精品一区二区久久久 | 欧美高清在线一区| 国产精品1区二区.| 久久久久久久久久美女| 国产精品伊人色| 国产精品久久毛片| 一本久久a久久精品亚洲| 亚洲自拍都市欧美小说| 99re66热这里只有精品3直播| 久久免费视频色| 成人福利在线看| 国产精品三级电影|