www.pudn.com > GameEngine_src.rar > BaseUtil.cpp
#include "BaseUtil.h" #include#include #include #include #pragma comment( lib, "winmm.lib" ) //************************************对话框基类实现****************************************** CBaseDlg::CBaseDlg( int id ) { m_iTemplate = id; } CBaseDlg::~CBaseDlg() { } bool CBaseDlg::CreateModeDlgHelp( HWND &hDlg, HWND hwnd, HINSTANCE hInstance, DLGPROC dlgproc ) { if ( hDlg == NULL ) { int re; re = DialogBox( hInstance, MAKEINTRESOURCE( m_iTemplate ), hwnd, dlgproc ); if ( re == -1 ) { return false; } else { hDlg = (HWND)re; return true; } } else return false; } bool CBaseDlg::CreateModelessDlgHelp( HWND &hDlg, HWND hwnd, HINSTANCE hInstance, DLGPROC dlgproc ) { if ( hDlg == NULL ) { hDlg = CreateDialog( hInstance, MAKEINTRESOURCE( m_iTemplate ), hwnd, dlgproc ); if ( hDlg == NULL ) { return false; } else { ShowWindow( hDlg, SW_SHOW ); SendMessage( hwnd, WM_ACTIVATE, WA_ACTIVE, 0 ); return true; } } else return false; } void CBaseDlg::DestroyModeDlg( HWND hdlg, HWND &hDlg ) { EndDialog( hdlg, (int)hDlg ); hDlg = NULL; } void CBaseDlg::DestroyModelessDlg( HWND hdlg, HWND &hDlg ) { DestroyWindow( hDlg ); hDlg = NULL; } //********************************************************************************************* //*****************************************消息助手函数************************************ void Warn( LPCTSTR sz ) { MessageBox( NULL, sz, "warn", MB_OK ); } bool Ask( LPCTSTR sz ) { int re = MessageBox( NULL, sz, "warn", MB_YESNO ); if ( re == IDYES ) return true; else return false; } void Show( long i ) { char sz[32]; wsprintf( sz, "%d", i ); MessageBox( NULL, sz, "debug", MB_OK ); } void Show( LPCTSTR sz, DWORD dwValue ) { char buf[128]; wsprintf( buf, sz, dwValue ); MessageBox( NULL, buf, "debug", MB_OK ); } //********************************************************************************************* //******************************************CInfoDlg类定义*************************************************** CInfoDlg::CInfoDlg() { m_sz = new char[128]; } CInfoDlg::~CInfoDlg() { if ( m_sz != NULL ) { delete [] m_sz; m_sz = NULL; } } void CInfoDlg::ShowInfo() { MessageBox( NULL, m_sz, "info", NULL ); ZeroMemory( m_sz, 128 ); } void CInfoDlg::AddInfo( char *sz, long i ) { char buf[64]; sprintf( buf, sz, i ); //strcat( buf, "\t\t\t\t" ); strcat( buf, "\n" ); strcat( m_sz, buf ); } void CInfoDlg::AddInfoFloat( char *sz, float f ) { char buf[64]; sprintf( buf, sz, f ); //strcat( buf, "\t\t\t\t" ); strcat( buf, "\n" ); strcat( m_sz, buf ); } //********************************************************************************************* //*******************************************字符串辅助函数************************************************** bool IsNum( char c ) { return ( c >= '0' && c <= '9' ); } int ChToInt( char c ) { return int( c - 48 ); } //////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////// int Calc10E( int n ) { int re = 1; for ( int i = 1; i <= n; i++ ) re *= 10; return re; } /////////////////////////////////////////////////////////// //字符串转换为整数 /////////////////////////////////////////////////////////// int StringToInt( char *str ) { int len = strlen( str ); int sum = 0; for ( int i = 0; i < len; ++i ) { sum += ChToInt( str[i] ) * Calc10E( len - i - 1 ); } return sum; } //////////////////////////////////////////////////////////// //字符串转变为浮点数 //////////////////////////////////////////////////////////// float StringToFloat( char *sz ) { int n = GetDigit( sz ); float j = 1.0f; float re = 0.0f; if ( *sz == '-' ) { j = -1.0f; ++sz; } while ( *sz != '\0' && ( IsNum( *sz ) || *sz == '.' ) ) { if ( *sz == '.' ) { ++sz; continue; } else { re += float( ChToInt( *sz ) ) * Compute10E( n - 1 ); ++sz; --n; } } return re * j; } //////////////////////////////////////////////////////////// //字符串转变为符点数,注意改变了字符指针 //////////////////////////////////////////////////////////// float StringToFloat( char **sz ) { int n = GetDigit( *sz ); float j = 1.0f; float re = 0.0f; if ( **sz == '-' ) { j = -1.0f; ++(*sz); } while ( **sz != '\0' && ( IsNum( **sz ) || **sz == '.' ) ) { if ( **sz == '.' ) { ++(*sz); continue; } else { re += float( ChToInt( **sz ) ) * Compute10E( n - 1 ); ++(*sz); --n; } } return re * j; } //////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////// int GetDigit( char *sz ) { int n = 0; if ( *sz == '-' ) ++sz; while ( *sz != '\0' && ( IsNum( *sz ) || *sz == '.' ) ) { if ( *sz == '.' ) break; else { ++n; ++sz; } } return n; } //////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////// float Compute10E( int n ) { float re = 1.0f; if ( n > 0 ) { for ( int i = 1; i <= n; i++ ) re *= 10.0f; return re; } else if ( n == 0 ) return 1; else return 1 / Compute10E( abs(n) ); } //////////////////////////////////////////////////////////// //去掉一个字符串 //////////////////////////////////////////////////////////// void RemoveSpace( char * out, const char *in ) { if ( in == 0 || out == 0 ) return; while ( *in != '\0' ) { if ( *in != ' ' ) { *out = *in; ++out; } ++in; } *out = '\0'; } //////////////////////////////////////////////////////////// //去掉一个字符串里的指定字符,out和in可以相同 //////////////////////////////////////////////////////////// void RemoveCh( char *out, const char *in, char ch ) { if ( in == 0 || out == 0 ) return; while ( *in != '\0' ) { if ( *in != ch ) { *out = *in; ++out; } ++in; } *out = '\0'; } //////////////////////////////////////////////////////////// //把一个文件名的扩展名去掉,返回去掉扩展名后的文件名的长度 //////////////////////////////////////////////////////////// int GetFileNameWithoutEx( const char *namein, //原文件名 char *nameex, //扩展名 char *nameout, //去除扩展名后的文件名 int size ) //nameout的长度 { if ( namein == 0 || 0 == nameout ) return false; int len = strlen( namein ); for ( int i = len - 1; i >= 0; --i ) { if ( namein[i] == '.' ) break; } if ( i == len-1 || i < 0 ) //如果失败 return 0; if ( nameex != 0 ) { int k = 0; for ( int j = i; j < len; ++j ) nameex[k++] = namein[j]; nameex[k] = '\0'; } memset( nameout, 0, size ); for ( int j = 0; j < i; ++j ) nameout[j] = namein[j]; nameout[j] = '\0'; return j; } //////////////////////////////////////////////////////////// //去除一个文件名的路径,返回文件名的长度 //////////////////////////////////////////////////////////// int GetFileNameWithoutPath( const char *namein, //原文件名 char *namepath, //路径 char *nameout, //去除扩展名后的文件名 int size ) //nameout的长度 { if ( namein == 0 || 0 == nameout ) return false; int len = strlen( namein ); for ( int i = len - 1; i >= 0; --i ) { if ( namein[i] == '\\' || namein[i] == '/' ) break; } if ( i == len-1 || i < 0 ) //如果失败 return 0; if ( namepath != 0 ) { for ( int j = 0; j <= i; ++j ) namepath[j] = namein[j]; namepath[j] = '\0'; } memset( nameout, 0, size ); int k = 0; for ( int j = i+1; j < len; ++j ) nameout[k++] = namein[j]; return k; } //********************************************************************************************* //*******************************************通用对话框辅助函数************************************************** //////////////////////////////////////////////////////////////////////////////////// //调用"打开"对话框来获取文件名,返回 //////////////////////////////////////////////////////////////////////////////////// int GetFileName( HWND hWnd, char *szBuffer, int iBufferSize, const char *szFilter ) { OPENFILENAME ofn; ZeroMemory( szBuffer, iBufferSize ); ofn.lStructSize = sizeof (OPENFILENAME) ; ofn.hwndOwner = hWnd ; ofn.hInstance = NULL ; ofn.lpstrFilter = szFilter ; ofn.lpstrCustomFilter = NULL ; ofn.nMaxCustFilter = 0 ; ofn.nFilterIndex = 1 ; ofn.lpstrFile = szBuffer ; ofn.nMaxFile = _MAX_PATH ; ofn.lpstrFileTitle = NULL ; ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT ; ofn.lpstrInitialDir = NULL ; ofn.lpstrTitle = NULL ; ofn.Flags = 0; ofn.nFileOffset = 0 ; ofn.nFileExtension = 0 ; ofn.lpstrDefExt = "txt" ; ofn.lCustData = 0L ; ofn.lpfnHook = NULL ; ofn.lpTemplateName = NULL ; GetOpenFileName( &ofn ); int i = ofn.nFileOffset; return i; } //////////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////////// bool GetColor( HWND hwnd, DWORD *pColor ) { CHOOSECOLOR cc ; COLORREF crCustColors[16] ; cc.lStructSize = sizeof (CHOOSECOLOR) ; cc.hwndOwner = hwnd; cc.hInstance = NULL; cc.rgbResult = RGB (0x80, 0x80, 0x80) ; cc.lpCustColors = crCustColors ; cc.Flags = CC_RGBINIT | CC_FULLOPEN ; cc.lCustData = 0 ; cc.lpfnHook = NULL ; cc.lpTemplateName = NULL ; if ( ChooseColor(&cc) != 0 && pColor != NULL ) { *pColor = (DWORD)cc.rgbResult; return true; } return false; } ////////////////////////////////////////////////////////////////////// //获取一个文件的长度 ////////////////////////////////////////////////////////////////////// DWORD GetFileSizeHelp( FILE *fp ) { if ( fp == NULL ) return 0; fseek( fp, 0, SEEK_SET ); fseek( fp, 0, SEEK_END ); fpos_t size; fgetpos( fp, &size ); fseek( fp, 0, SEEK_SET ); return (DWORD)size; } ////////////////////////////////////////////////////////////////////// //获取一个文件的长度 ////////////////////////////////////////////////////////////////////// DWORD GetFileSize( char *filename ) { FILE *fp = fopen( filename, "rb" ); fclose(fp); return GetFileSizeHelp(fp); } //////////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////////// float GetDlgItemFloat( HWND hwnd, int nID ) { char sz[32]; GetDlgItemText( hwnd, nID, sz, 32 ); return StringToFloat( sz ); } //////////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////////// void SetDlgItemFloat( HWND hwnd, int nID, float f ) { char sz[32]; sprintf( sz, "%f", f ); SetDlgItemText( hwnd, nID, sz ); } ////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////// bool UpdateTime( int &iLastTick, int iInterval ) { int iThisTick = timeGetTime(); if ( iThisTick - iLastTick >= iInterval ) { iLastTick = iThisTick; return true; } return false; }