app_config.cpp
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:3k
源码类别:

打印编程

开发平台:

Visual C++

  1. #include "app_config.h"
  2. #include <shlobj.h>
  3. LPCTSTR appName = _T("SETTINGS");
  4. BOOL load_app_config( HINSTANCE hInst, LPAPPCONFIG ac, LPCTSTR iniFileName, 
  5.   t_load_additional_config lac, LPVOID param )
  6. {
  7. BOOL ret = FALSE;
  8. if( NULL != ac )
  9. {
  10. GetModuleFileName( (NULL!=hInst)?hInst:GetModuleHandle(NULL), ac->workPath, ARRAYSIZE(ac->workPath) );
  11. //load the current path of the module
  12. _tsplitpath_s( ac->workPath, ac->lang, ARRAYSIZE(ac->lang), ac->langFile, ARRAYSIZE(ac->langFile),
  13.            NULL, 0, NULL, 0);
  14. _stprintf_s( ac->workPath, ARRAYSIZE(ac->workPath), _T("%s%s"), ac->lang, ac->langFile );
  15. //check if app_config.ini exists
  16. _stprintf_s( ac->iniFile, ARRAYSIZE(ac->iniFile), _T("%s%s"), ac->workPath, (NULL!=iniFileName)?iniFileName:_T("app_config.ini") );
  17. if(CheckConfigFile(ac->iniFile))
  18. {
  19. TCHAR newPath[MAX_PATH];
  20. if(SUCCEEDED(SHGetFolderPath(NULL,CSIDL_APPDATA|CSIDL_FLAG_CREATE,NULL,0,newPath)))
  21. {
  22. _stprintf_s(newPath,ARRAYSIZE(newPath),_T("%s\%s"),newPath,(NULL!=iniFileName)?iniFileName:_T("app_config.ini"));
  23. MoveFileEx(ac->iniFile,newPath,MOVEFILE_REPLACE_EXISTING);
  24. _stprintf_s(ac->iniFile,ARRAYSIZE(ac->iniFile),_T("%s"),newPath);
  25. }
  26. }
  27. else
  28. {
  29. TCHAR newPath[MAX_PATH];
  30. if(SUCCEEDED(SHGetFolderPath(NULL,CSIDL_APPDATA|CSIDL_FLAG_CREATE,NULL,0,newPath)))
  31. {
  32. _stprintf_s( ac->iniFile, ARRAYSIZE(ac->iniFile), _T("%s\%s"),newPath, (NULL!=iniFileName)?iniFileName:_T("app_config.ini") );
  33. }
  34. }
  35. GetPrivateProfileString( appName, _T("lang"), _T("en"), ac->lang, ARRAYSIZE(ac->lang), ac->iniFile );
  36. GetPrivateProfileString( appName, _T("langFile"), _T("lang.ini"), ac->langFile, ARRAYSIZE(ac->langFile), ac->iniFile );
  37. if( (NULL == _tcschr( ac->langFile, _T(':') )) )
  38. {
  39. _tcscpy_s( ac->langFile, ARRAYSIZE(ac->langFile), ac->workPath );
  40. GetPrivateProfileString( appName, _T("langFile"), _T("lang.ini"), ac->langFile+_tcslen(ac->langFile), 
  41.                      ARRAYSIZE(ac->langFile)-(DWORD)_tcslen(ac->langFile), ac->iniFile );
  42. }
  43. if( -1 == _taccess( ac->langFile, 0 ) )
  44. _stprintf_s( ac->langFile, ARRAYSIZE(ac->langFile), _T("%s%s"), ac->workPath, _T("lang.ini") );
  45. lm.init_lang( ac->langFile, ac->lang );
  46. //while( lm.get_lang_from_file( i++, lg, lgs, lnm, lnms ) );
  47. }
  48. if( NULL != lac )
  49. lac( ac, param );
  50. return ret;
  51. }
  52. BOOL save_app_config( LPAPPCONFIG ac, t_save_additional_config sac )
  53. {
  54. BOOL ret = FALSE;
  55. if( NULL != ac )
  56. {
  57. WritePrivateProfileString( appName, _T("lang"), ac->lang, ac->iniFile );
  58. WritePrivateProfileString( appName, _T("langFile"), ac->langFile, ac->iniFile );
  59. }
  60. if( NULL != sac )
  61. sac( ac );
  62. return ret;
  63. }
  64. BOOL CheckConfigFile(const TCHAR * link)
  65. {
  66. return _access((char*)link,06);
  67. }