📄 chnconv_exe.cpp
字号:
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 + -