⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chnconv_exe.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      if ( IsNT () ) Wm_SetTextFormatW ( hWnd, GetStringW ( IDS_NOWCONVERTING ), szCommandNameW ) ;
      else           Wm_SetTextFormatA ( hWnd, GetStringA ( IDS_NOWCONVERTING ), szCommandNameA ) ;
   }
   else {
      if ( IsNT () ) Wm_SetTextFormatW ( hWnd, GetStringW ( IDS_WINDOWTITLE ), szCommandNameW, nVersion / 100, nVersion % 100 ) ;
      else           Wm_SetTextFormatA ( hWnd, GetStringA ( IDS_WINDOWTITLE ), szCommandNameA, nVersion / 100, nVersion % 100 ) ;
   }

   return 0 ;
}



// 儊僀儞僟僀傾儘僌偺埵抲傪庢摼
// 惉岟偟偨傜 0 傪丄幐攕偟偨傜 0 埲奜傪
int GetMainDialogPos ( HWND hWnd, int *pX, int *pY ) {

   if ( IsIconic ( hWnd ) ) {

      WINDOWPLACEMENT WindowPlacement = { sizeof(WINDOWPLACEMENT) } ;
      if ( ! GetWindowPlacement ( hWnd, & WindowPlacement ) ) return 1 ;

      RECT Rect ;
      if ( IsNT () ) { if ( ! SystemParametersInfoW ( SPI_GETWORKAREA, 0, & Rect, 0 ) ) return 1 ; }
      else           { if ( ! SystemParametersInfoA ( SPI_GETWORKAREA, 0, & Rect, 0 ) ) return 1 ; }

      *pX = WindowPlacement.rcNormalPosition.left + Rect.left ;
      *pY = WindowPlacement.rcNormalPosition.top + Rect.top ;
   }
   else {

      RECT Rect ;
      GetWindowRect ( hWnd, & Rect ) ;

      *pX = Rect.left ;
      *pY = Rect.top ;
   }

   return 0 ;
}



////////////////////////////////////////////
//            僼傽僀儖柤偺嶲徠            //
////////////////////////////////////////////



int CallBrowseForFileA ( HWND hWnd, int nFileNumber, int IsDestination ) ;
int CallBrowseForFileW ( HWND hWnd, int nFileNumber, int IsDestination ) ;



// 嶲徠儃僞儞偺摦嶌
int CallBrowseForFile ( HWND hWnd, int nFileNumber, int IsDestination ) {

   if ( IsNT () ) return CallBrowseForFileW ( hWnd, nFileNumber, IsDestination ) ;
   else           return CallBrowseForFileA ( hWnd, nFileNumber, IsDestination ) ;
}



char *GetFileNameFilterA ( int nCodePage, int IsOnlyTxtOrRtf ) ;
wchar_t *GetFileNameFilterW ( int nCodePage, int IsOnlyTxtOrRtf ) ;
int GetCodePageFromTypeAndCode ( int nType, int nCode ) ;



// 嶲徠儃僞儞偺摦嶌乮ANSI斉乯
int CallBrowseForFileA ( HWND hWnd, int nFileNumber, int IsDestination ) {

   char szFileName [ MAX_PATH ] ;
   char szFileNameTmp [ MAX_PATH ] ;
   char szResult [ MAX_PATH ] ;

   int IsOnlyTxtOrRtf = 0 ;

   int nSrcCodePage = GetCodePageFromTypeAndCode ( nSrcType, nSrcCode ) ;
   int nDstCodePage = GetCodePageFromTypeAndCode ( nDstType, nDstCode ) ;

   // 惉岟儊僢僙乕僕偺弶婜壔
   for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) SetStatusIcon ( hWnd, nCount, STATUS_ICON_READY ) ;

   // 弌椡僼傽僀儖柤傪庢摼
   if ( IsDestination ) {
      Dlg_Wm_GetTextA ( hWnd, IDC_EDIT_DST_MIN + nFileNumber, szFileName, MAX_PATH ) ;
      UnquoteFileNameA ( szFileName ) ;
      if ( ! IsFolderExistA ( szFileName ) ) {
         ChangeFileNameA ( szFileName, NULL ) ;
         if ( ! IsFolderExistA ( szFileName ) ) *szFileName = 0 ;
      }
   }

   // 擖椡僼傽僀儖柤傪庢摼
   if ( ! IsDestination || ! *szFileName ) {
      Dlg_Wm_GetTextA ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber, szFileName, MAX_PATH ) ;
      UnquoteFileNameA ( szFileName ) ;
      if ( ! IsFolderExistA ( szFileName ) ) {
         ChangeFileNameA ( szFileName, NULL ) ;
         if ( ! IsFolderExistA ( szFileName ) ) strcpy ( szFileName, szBrowsePathA ) ;
      }
   }

   // 擖椡僼傽僀儖柤偺奼挘巕傪庢摼
   if ( IsDestination ) {
      Dlg_Wm_GetTextA ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber, szFileNameTmp, MAX_PATH ) ;
      UnquoteFileNameA ( szFileNameTmp ) ;
      char *szExtension = GetExtensionA ( szFileNameTmp ) ;
      if ( szExtension || nSrcCodePage == CP_HZ_CHINESE_SIMPLIFIED ) IsOnlyTxtOrRtf = 1 ;
      if ( szExtension && ! stricmp ( szExtension, "RTF" ) || IsNecChineseCodePage ( nSrcCodePage ) ) IsOnlyTxtOrRtf = 2 ;
   }

   if ( ! IsDestination ) {
      if ( ! BrowseForFileA ( hWnd, szResult, MAX_PATH, szFileName, GetStringA ( IDS_SELECTSRCFILE ), GetFileNameFilterA ( nSrcCodePage, 0 ), 0 ) ) {
         Dlg_SetFocus ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber ) ;
         Dlg_Wm_SetTextA ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber, szResult ) ;
         Dlg_MoveCaretToEnd ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber ) ;
         strcpy ( szBrowsePathA, szResult ) ;
         ChangeFileNameA ( szBrowsePathA, NULL ) ;
      }
   }
   else {
      if ( ! BrowseForFileA ( hWnd, szResult, MAX_PATH, szFileName, GetStringA ( IDS_SELECTDSTFILE ), GetFileNameFilterA ( nDstCodePage, IsOnlyTxtOrRtf ), 0 ) ) {
         Dlg_SetFocus ( hWnd, IDC_EDIT_DST_MIN + nFileNumber ) ;
         Dlg_Wm_SetTextA ( hWnd, IDC_EDIT_DST_MIN + nFileNumber, szResult ) ;
         Dlg_MoveCaretToEnd ( hWnd, IDC_EDIT_DST_MIN + nFileNumber ) ;
      }
   }

   return 0 ;
}



// 嶲徠儃僞儞偺摦嶌乮UNICODE斉乯
int CallBrowseForFileW ( HWND hWnd, int nFileNumber, int IsDestination ) {

   wchar_t szFileName [ MAX_PATH ] ;
   wchar_t szFileNameTmp [ MAX_PATH ] ;
   wchar_t szResult [ MAX_PATH ] ;

   int IsOnlyTxtOrRtf = 0 ;

   int nSrcCodePage = GetCodePageFromTypeAndCode ( nSrcType, nSrcCode ) ;
   int nDstCodePage = GetCodePageFromTypeAndCode ( nDstType, nDstCode ) ;

   // 惉岟儊僢僙乕僕偺弶婜壔
   for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) SetStatusIcon ( hWnd, nCount, STATUS_ICON_READY ) ;

   // 弌椡僼傽僀儖柤傪庢摼
   if ( IsDestination ) {
      Dlg_Wm_GetTextW ( hWnd, IDC_EDIT_DST_MIN + nFileNumber, szFileName, MAX_PATH ) ;
      UnquoteFileNameW ( szFileName ) ;
      if ( ! IsFolderExistW ( szFileName ) ) {
         ChangeFileNameW ( szFileName, NULL ) ;
         if ( ! IsFolderExistW ( szFileName ) ) *szFileName = 0 ;
      }
   }

   // 擖椡僼傽僀儖柤傪庢摼
   if ( ! IsDestination || ! *szFileName ) {
      Dlg_Wm_GetTextW ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber, szFileName, MAX_PATH ) ;
      UnquoteFileNameW ( szFileName ) ;
      if ( ! IsFolderExistW ( szFileName ) ) {
         ChangeFileNameW ( szFileName, NULL ) ;
         if ( ! IsFolderExistW ( szFileName ) ) wcscpy ( szFileName, szBrowsePathW ) ;
      }
   }

   // 擖椡僼傽僀儖柤偺奼挘巕傪庢摼
   if ( IsDestination ) {
      Dlg_Wm_GetTextW ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber, szFileNameTmp, MAX_PATH ) ;
      UnquoteFileNameW ( szFileNameTmp ) ;
      wchar_t *szExtension = GetExtensionW ( szFileNameTmp ) ;
      if ( szExtension || nSrcCodePage == CP_HZ_CHINESE_SIMPLIFIED ) IsOnlyTxtOrRtf = 1 ;
      if ( szExtension && ! wcsicmp ( szExtension, L"RTF" ) || IsNecChineseCodePage ( nSrcCodePage ) ) IsOnlyTxtOrRtf = 2 ;
   }

   if ( ! IsDestination ) {
      if ( ! BrowseForFileW ( hWnd, szResult, MAX_PATH, szFileName, GetStringW ( IDS_SELECTSRCFILE ), GetFileNameFilterW ( nSrcCodePage, 0 ), 0 ) ) {
         Dlg_SetFocus ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber ) ;
         Dlg_Wm_SetTextW ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber, szResult ) ;
         Dlg_MoveCaretToEnd ( hWnd, IDC_EDIT_SRC_MIN + nFileNumber ) ;
         wcscpy ( szBrowsePathW, szResult ) ;
         ChangeFileNameW ( szBrowsePathW, NULL ) ;
      }
   }
   else {
      if ( ! BrowseForFileW ( hWnd, szResult, MAX_PATH, szFileName, GetStringW ( IDS_SELECTDSTFILE ), GetFileNameFilterW ( nDstCodePage, IsOnlyTxtOrRtf ), 0 ) ) {
         Dlg_SetFocus ( hWnd, IDC_EDIT_DST_MIN + nFileNumber ) ;
         Dlg_Wm_SetTextW ( hWnd, IDC_EDIT_DST_MIN + nFileNumber, szResult ) ;
         Dlg_MoveCaretToEnd ( hWnd, IDC_EDIT_DST_MIN + nFileNumber ) ;
      }
   }

   return 0 ;
}



// 僼傽僀儖柤嶲徠偱巊偆僼傿儖僞傪摼傞乮ANSI斉乯
// IsOnlyTxtOrRtf 偼 1 側傜僥僉僗僩僼傽僀儖偺傒
//                   2 側傜儕僢僠僥僀僗僩僼傽僀儖偺傒
char *GetFileNameFilterA ( int nCodePage, int IsOnlyTxtOrRtf ) {

   static char szFilter [ MAX_PATH ] ;
   char *szNext = szFilter ;
   const char *szExtension ;
   const char *szExtensionAdditional ;
   const char *szName ;

   switch ( nCodePage ) {
      case CP_JAPANESE_CW :   szExtensionAdditional = ";*.CW" ; break ;
      case CP_JAPANESE_NH :   szExtensionAdditional = ";*.NH" ; break ;
      case CP_JAPANESE_CWN :  szExtensionAdditional = ";*.CWN" ; break ;
      case CP_JAPANESE_ZQ :   szExtensionAdditional = ";*.ZQ" ; break ;
      case CP_JAPANESE_CX :   szExtensionAdditional = ";*.CX" ; break ;
      case CP_JAPANESE_ZJ :   szExtensionAdditional = ";*.ZJ" ; break ;
      default :               szExtensionAdditional = "" ; break ;
   }

   switch ( nCodePage ) {
      case CP_JAPANESE_TM :            szExtension = "*.TXT;*.TEC" ; szName = GetStringA ( IDS_TMFILES ) ; break ;
      case CP_JAPANESE_FW :            szExtension = "*.TXT" ;       szName = GetStringA ( IDS_TEXTFILES ) ; break ;
      case CP_HZ_CHINESE_SIMPLIFIED :  szExtension = "*.TXT" ;       szName = GetStringA ( IDS_TEXTFILES ) ; break ;
      default :                        szExtension = "*.TXT;*.RTF" ; szName = GetStringA ( IDS_NORMALFILES ) ; break ;
   }

   switch ( IsOnlyTxtOrRtf ) {
      case 1 : szExtension = "*.TXT" ; szName = GetStringA ( IDS_TEXTFILES ) ; break ;
      case 2 : szExtension = "*.RTF" ; szName = GetStringA ( IDS_RICHTEXTFILES ) ; szExtensionAdditional = "" ; break ;
      default : break ;
   }

   strcpy ( szNext, szName ) ;
   szNext = strend ( szNext ) + 1 ;
   sprintf ( szNext, "%s%s", szExtension, szExtensionAdditional ) ;
   szNext = strend ( szNext ) + 1 ;

   strcpy ( szNext, GetStringA ( IDS_ALLFILES ) ) ;
   szNext = strend ( szNext ) + 1 ;
   strcpy ( szNext, "*.*" ) ;
   szNext = strend ( szNext ) + 1 ;

   strcpy ( szNext, "" ) ;

   return szFilter ;
}



// 僼傽僀儖柤嶲徠偱巊偆僼傿儖僞傪摼傞乮UNICODE斉乯
// IsOnlyTxtOrRtf 偼 1 側傜僥僉僗僩僼傽僀儖偺傒
//                   2 側傜儕僢僠僥僀僗僩僼傽僀儖偺傒
wchar_t *GetFileNameFilterW ( int nCodePage, int IsOnlyTxtOrRtf ) {

   static wchar_t szFilter [ MAX_PATH ] ;
   wchar_t *szNext = szFilter ;
   const wchar_t *szExtension ;
   const wchar_t *szExtensionAdditional ;
   const wchar_t *szName ;

   switch ( nCodePage ) {
      case CP_JAPANESE_CW :   szExtensionAdditional = L";*.CW" ; break ;
      case CP_JAPANESE_NH :   szExtensionAdditional = L";*.NH" ; break ;
      case CP_JAPANESE_CWN :  szExtensionAdditional = L";*.CWN" ; break ;
      case CP_JAPANESE_ZQ :   szExtensionAdditional = L";*.ZQ" ; break ;
      case CP_JAPANESE_CX :   szExtensionAdditional = L";*.CX" ; break ;
      case CP_JAPANESE_ZJ :   szExtensionAdditional = L";*.ZJ" ; break ;
      default :               szExtensionAdditional = L"" ; break ;
   }

   switch ( nCodePage ) {
      case CP_JAPANESE_TM :            szExtension = L"*.TXT;*.TEC" ; szName = GetStringW ( IDS_TMFILES ) ; break ;
      case CP_JAPANESE_FW :            szExtension = L"*.TXT" ;       szName = GetStringW ( IDS_TEXTFILES ) ; break ;
      case CP_HZ_CHINESE_SIMPLIFIED :  szExtension = L"*.TXT" ;       szName = GetStringW ( IDS_TEXTFILES ) ; break ;
      default :                        szExtension = L"*.TXT;*.RTF" ; szName = GetStringW ( IDS_NORMALFILES ) ; break ;
   }

   switch ( IsOnlyTxtOrRtf ) {
      case 1 : szExtension = L"*.TXT" ; szName = GetStringW ( IDS_TEXTFILES ) ; break ;
      case 2 : szExtension = L"*.RTF" ; szName = GetStringW ( IDS_RICHTEXTFILES ) ; szExtensionAdditional = L"" ; break ;
      default : break ;
   }

   wcscpy ( szNext, szName ) ;
   szNext = wcsend ( szNext ) + 1 ;
   swprintf ( szNext, L"%s%s", szExtension, szExtensionAdditional ) ;
   szNext = wcsend ( szNext ) + 1 ;

   wcscpy ( szNext, GetStringW ( IDS_ALLFILES ) ) ;
   szNext = wcsend ( szNext ) + 1 ;
   wcscpy ( szNext, L"*.*" ) ;
   szNext = wcsend ( szNext ) + 1 ;

   wcscpy ( szNext, L"" ) ;

   return szFilter ;
}



// 僼傽僀儖偺庬椶偺昞帵
int DisplayAvailableForm ( HWND hWnd, int nType, int nCode ) {

   int nCodePage = GetCodePageFromTypeAndCode ( nType, nCode ) ;

   if ( IsNT () ) {
      wchar_t szBuffer [ MAX_PATH ] ;
      LoadStringExW ( IDS_AVAILABLEFORMAT, szBuffer, MAX_PATH ) ;
      if ( nCodePage == CP_HZ_CHINESE_SIMPLIFIED ) Dlg_Wm_SetTextFormatW ( hWnd, IDC_STATIC_AVAFRM, L"%s%s", szBuffer, GetStringW ( IDS_TEXTFILES ) ) ;
      else if ( nCodePage == CP_JAPANESE_FW )      Dlg_Wm_SetTextFormatW ( hWnd, IDC_STATIC_AVAFRM, L"%s%s", szBuffer, GetStringW ( IDS_TEXTFILES ) ) ;
      else if ( nCodePage == CP_JAPANESE_TM )      Dlg_Wm_SetTextFormatW ( hWnd, IDC_STATIC_AVAFRM, L"%s%s", szBuffer, GetStringW ( IDS_TMFILES ) ) ;
      else                                         Dlg_Wm_SetTextFormatW ( hWnd, IDC_STATIC_AVAFRM, L"%s%s", szBuffer, GetStringW ( IDS_NORMALFILES ) ) ;
   }
   else {
      char szBuffer [ MAX_PATH ] ;
      LoadStringExA ( IDS_AVAILABLEFORMAT, szBuffer, MAX_PATH ) ;
      if ( nCodePage == CP_HZ_CHINESE_SIMPLIFIED ) Dlg_Wm_SetTextFormatA ( hWnd, IDC_STATIC_AVAFRM, "%s%s", szBuffer, GetStringA ( IDS_TEXTFILES ) ) ;
      else if ( nCodePage == CP_JAPANESE_FW )      Dlg_Wm_SetTextFormatA ( hWnd, IDC_STATIC_AVAFRM, "%s%s", szBuffer, GetStringA ( IDS_TEXTFILES ) ) ;
      else if ( nCodePage == CP_JAPANESE_TM )      Dlg_Wm_SetTextFormatA ( hWnd, IDC_STATIC_AVAFRM, "%s%s", szBuffer, GetStringA ( IDS_TMFILES ) ) ;
      else                                         Dlg_Wm_SetTextFormatA ( hWnd, IDC_STATIC_AVAFRM, "%s%s", szBuffer, GetStringA ( IDS_NORMALFILES ) ) ;
   }

   return 0 ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -