3 #ifndef GET_SAFE_STRING
\r
4 #define GET_SAFE_STRING(str) ( (str)?(str):_T("") )
\r
7 #ifndef _vsnprintf_hw
\r
9 #define _vsnprintf_hw _vsnwprintf
\r
11 #define _vsnprintf_hw _vsnprintf
\r
14 #define HANDLE_IS_VALID(h) ( (HANDLE)(h)!=NULL && (HANDLE)(h)!=INVALID_HANDLE_VALUE )
\r
17 int FindFromStaticArray ( IN T *pAry, IN int nArySize, IN T Find )
\r
19 if ( !pAry ) return -1;
\r
20 for ( int i=0; i<nArySize; i++ )
\r
22 if ( pAry[i] == Find )
\r
29 // ×¢Ò⣺Èç¹ûÊÇ´Ó CString ÖвéÕÒʱ Find ǧÍò²»ÒªÓà LPCTSTR »òÕß char* ±äÁ¿£¬Ò»¶¨ÊÇÒªÓà CString ±äÁ¿
\r
31 template<class T1, class T2>
\r
32 int FindFromArray ( IN T1 &Ary, IN T2 Find )
\r
34 int nCount = (int)Ary.GetSize();
\r
35 for ( int i=0; i<nCount; i++ )
\r
37 T2 tGetValue = Ary.GetAt(i);
\r
38 if ( tGetValue == Find )
\r
45 // ´ÓÊý×é Ary_Org ÖвéÕÒ£¬Ö»Òª Ary_Find ÖÐÈκÎÒ»¸öÔªËØÔÚ Ary_Org ÖгöÏÖ¹ý
\r
46 // ¾Í·µ»Ø¸ÃÔªËØÔÚ Ary_Org ÖеÄλÖÃ
\r
48 template<class T1, class T2>
\r
49 int FindFromArray ( IN T1 &Ary_Org, IN T1 &Ary_Find, OUT T2 &Element )
\r
51 int nCount = Ary_Find.GetSize();
\r
52 for ( int i=0; i<nCount; i++ )
\r
54 T2 tGetValue = Ary_Find.GetAt(i);
\r
55 int nFindPos = FindFromArray ( Ary_Org, tGetValue );
\r
56 if ( nFindPos >= 0 )
\r
58 Element = Ary_Org.GetAt ( nFindPos );
\r
65 template<class T1, class T2, class T3, class T4>
\r
66 int FindFromArray ( IN T1 &Ary, IN T2 Find, IN T3 &AppAry, IN T4 AppFind )
\r
68 int nCount = Ary.GetSize();
\r
69 for ( int i=0; i<nCount; i++ )
\r
71 if ( Ary.GetAt(i) == Find &&
\r
72 AppAry.GetAt(i) == AppFind )
\r
81 int FindFromArray ( IN T1 &Ary_Src, IN T1 &Ary_Find )
\r
83 int nCount = Ary_Src.GetSize();
\r
84 for ( int i=0; i<nCount; i++ )
\r
86 if ( FindFromArray ( Ary_Find, Ary_Src.GetAt(i) ) >= 0 )
\r
94 STRING_IS_MULTICHARS = 0, // ÊǶà×Ö½Ú×Ö·û´®
\r
95 STRING_IS_UNICODE, // ÊÇUNICODE×Ö·û´®
\r
96 STRING_IS_SOFTCODE, // ÊǺͳÌÐòÒ»ÑùµÄ×Ö·û´®±àÂë
\r
99 class CMultiByteString
\r
102 CMultiByteString ( LPCTSTR lpszOrg, int nOrgStringEncodeType=STRING_IS_SOFTCODE, OUT char *pOutBuf=NULL, int nOutBufSize=0 );
\r
103 ~CMultiByteString ();
\r
106 if ( m_pszData ) return m_pszData;
\r
112 return m_nCharactersNumber;
\r
114 // »ñÈ¡×Ö·û´®Õ¼ÓÃÄÚ´æ´óС£¨×Ö½ÚÊý£¬°üÀ¨×Ö·û´®½áÊøµÄ'\0'ËùÕ¼µÄλÖã©
\r
117 return m_nDataSize;
\r
120 char *m_pszData; // ±£´æÄ¿±ê×Ö·û´®µÄ»º³å
\r
121 int m_nDataSize; // Ä¿±ê×Ö·û´®Õ¼ÓõÄÄÚ´æ´óС£¨×Ö½ÚÊý£¬°üÀ¨×Ö·û´®½áÊøµÄ'\0'£©
\r
122 int m_nCharactersNumber; // Ä¿±ê×Ö·û´®µÄ¸öÊý
\r
123 BOOL m_bNewBuffer; // ÊÇ·ñÔÚÕâ¸öÀàÖÐÉêÇëÁËÄÚ´æ
\r
126 CString GetCompatibleString ( LPVOID lpszOrg, BOOL bOrgIsUnicode, int nOrgLength=-1 );
\r
127 CString FormatDateTime ( COleDateTime &DateTime, LPCTSTR pFormat );
\r
128 CString FormatString ( LPCTSTR lpszStr, ... );
\r
129 int hwGetFileAttr ( LPCTSTR lpFileName, OUT CFileStatus *pFileStatus=NULL );
\r
130 CString FormatBytes ( double fBytesNum, BOOL bShowUnit=TRUE, int nFlag=0 );
\r
131 BOOL WaitForThreadEnd ( HANDLE *phThread, DWORD dwWaitTime=10*1000 );
\r
133 //{{AFX_INSERT_LOCATION}}
\r
134 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.