📄 chnconv_exe.cpp
字号:
for ( int nCount = 0 ; nCount < AVAILABLE_CODE_LIST_NELEM ; nCount ++ ) {
if ( IsNT () ) Dlg_ComboBox_InsertStringW ( hWnd, IDC_COMBO_SRC_CODE, -1, GetStringW ( ( AvailableCodeList [ nCount ] ).nNameId ) ) ;
else Dlg_ComboBox_InsertStringA ( hWnd, IDC_COMBO_SRC_CODE, -1, GetStringA ( ( AvailableCodeList [ nCount ] ).nNameId ) ) ;
}
Dlg_ComboBox_ResetContent ( hWnd, IDC_COMBO_DST_CODE ) ;
for ( int nCount = 0 ; nCount < AVAILABLE_CODE_LIST_NELEM ; nCount ++ ) {
if ( IsNecChineseCodePage ( ( AvailableCodeList [ nCount ] ).nCodePage ) ) continue ;
if ( IsNT () ) Dlg_ComboBox_InsertStringW ( hWnd, IDC_COMBO_DST_CODE, -1, GetStringW ( ( AvailableCodeList [ nCount ] ).nNameId ) ) ;
else Dlg_ComboBox_InsertStringA ( hWnd, IDC_COMBO_DST_CODE, -1, GetStringA ( ( AvailableCodeList [ nCount ] ).nNameId ) ) ;
}
if ( nSrcType == TYPE_PSEUDO ) {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_SRC_CODE, nSrcCode ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_SRC_CODE, TRUE ) ;
}
else {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_SRC_CODE, -1 ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_SRC_CODE, FALSE ) ;
}
if ( nDstType == TYPE_PSEUDO ) {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_DST_CODE, nDstCode ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_DST_CODE, TRUE ) ;
}
else {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_DST_CODE, -1 ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_DST_CODE, FALSE ) ;
}
// 僼僅儞僩嶌惉
hFont = CreateFontByCodePage ( GetDialogFontHeight ( IDD_DIALOG_MAIN ), 0 ) ;
for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) {
Dlg_Wm_SetFont ( hWnd, IDC_EDIT_SRC_MIN + nCount, hFont, TRUE ) ;
Dlg_Wm_SetFont ( hWnd, IDC_EDIT_DST_MIN + nCount, hFont, TRUE ) ;
}
for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) {
Dlg_Wm_SetFont ( hWnd, IDC_BUTTON_SRC_MIN + nCount, hFont, TRUE ) ;
Dlg_Wm_SetFont ( hWnd, IDC_BUTTON_DST_MIN + nCount, hFont, TRUE ) ;
}
// 僄僨傿僢僩僐儞僩儘乕儖偺儅乕僕儞傪愝掕 (Win95懳嶔)
for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) {
if ( IsWin95 () ) Dlg_Edit_SetMargins ( hWnd, IDC_EDIT_SRC_MIN + nCount, 1, 1 ) ;
if ( IsWin95 () ) Dlg_Edit_SetMargins ( hWnd, IDC_EDIT_DST_MIN + nCount, 1, 1 ) ;
}
// 僄僨傿僢僩僐儞僩儘乕儖擖椡偺挿偝偺惂尷
for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) {
Dlg_Edit_LimitText ( hWnd, IDC_EDIT_SRC_MIN + nCount, MAX_PATH - 1 ) ;
Dlg_Edit_LimitText ( hWnd, IDC_EDIT_DST_MIN + nCount, MAX_PATH - 1 ) ;
}
// 僄僨傿僢僩僐儞僩儘乕儖傪僼僢僋
if ( IsNT () ) OldEditCtrlProc = GetWindowProcW ( GetDlgItem ( hWnd, IDC_EDIT_SRC_MIN ) ) ;
else OldEditCtrlProc = GetWindowProcA ( GetDlgItem ( hWnd, IDC_EDIT_SRC_MIN ) ) ;
for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) {
if ( IsNT () ) {
SetWindowProcW ( GetDlgItem ( hWnd, IDC_EDIT_SRC_MIN + nCount ), NewEditCtrlProcW ) ;
SetWindowProcW ( GetDlgItem ( hWnd, IDC_EDIT_DST_MIN + nCount ), NewEditCtrlProcW ) ;
}
else {
SetWindowProcA ( GetDlgItem ( hWnd, IDC_EDIT_SRC_MIN + nCount ), NewEditCtrlProcA ) ;
SetWindowProcA ( GetDlgItem ( hWnd, IDC_EDIT_DST_MIN + nCount ), NewEditCtrlProcA ) ;
}
DragAcceptFiles ( GetDlgItem ( hWnd, IDC_EDIT_SRC_MIN + nCount ), TRUE ) ;
DragAcceptFiles ( GetDlgItem ( hWnd, IDC_EDIT_DST_MIN + nCount ), TRUE ) ;
}
return TRUE ;
case WM_COMMAND :
// 曄姺拞偼柍岠偵
if ( IsLockedSemaphore () ) {
if ( LOWORD ( wParam ) == IDCANCEL ) {
if ( AbortChnconv ) AbortChnconv () ;
IsAborted = 1 ;
return TRUE ;
}
if ( HIWORD ( wParam ) == CBN_SETFOCUS ) {
Dlg_SetFocus ( hWnd, IDOK ) ;
return TRUE ;
}
if ( HIWORD ( wParam ) == EN_SETFOCUS ) {
Dlg_SetFocus ( hWnd, IDOK ) ;
return TRUE ;
}
if ( HIWORD ( wParam ) == BN_CLICKED ) {
Dlg_SetFocus ( hWnd, IDOK ) ;
CheckRadioButton ( hWnd, IDC_CHECK_SRC_TYPE_MIN, IDC_CHECK_SRC_TYPE_MIN + SRC_TYPE_NELEM - 1, nSrcType + IDC_CHECK_SRC_TYPE_MIN ) ;
CheckRadioButton ( hWnd, IDC_CHECK_DST_TYPE_MIN, IDC_CHECK_DST_TYPE_MIN + DST_TYPE_NELEM - 1, nDstType + IDC_CHECK_DST_TYPE_MIN ) ;
return TRUE ;
}
return TRUE ;
}
// 曄姺偺幚峴
if ( LOWORD ( wParam ) == IDOK ) {
// 弶婜壔
IsAborted = 0 ;
static CONVERSIONTHREADINFO ConversionThreadInfo ;
ConversionThreadInfo.hWnd = hWnd ;
ConversionThreadInfo.pIsAborted = & IsAborted ;
#ifdef _MT
// 幚峴娭悢傪屇傃弌偡乮儅儖僠僗儗僢僪乯
if ( BeginThread ( ConversionThread, (void*) & ConversionThreadInfo, NULL ) ) {
if ( IsNT () ) MessageBoxW ( NULL, GetStringW ( IDS_NOT_ENOUGH_MEMORY ), szCommandNameW, MB_OK ) ;
else MessageBoxA ( NULL, GetStringA ( IDS_NOT_ENOUGH_MEMORY ), szCommandNameA, MB_OK ) ;
}
#else
// 幚峴娭悢傪屇傃弌偡乮僔儞僌儖僗儗僢僪乯
ConversionThread ( (void*) & ConversionThreadInfo ) ;
#endif
return TRUE ;
}
// 廔椆
if ( LOWORD ( wParam ) == IDCANCEL ) {
if ( IsConfirmOnExit ) {
int nResult ;
if ( IsNT () ) nResult = MessageBoxW ( hWnd, GetStringW ( IDS_CONFIRM_ON_EXIT ), szCommandNameW, MB_YESNO ) ;
else nResult = MessageBoxA ( hWnd, GetStringA ( IDS_CONFIRM_ON_EXIT ), szCommandNameA, MB_YESNO ) ;
if ( nResult != IDYES ) return TRUE ;
}
if ( IsSaveWindow ) {
if ( GetMainDialogPos ( hWnd, & nSavedWindowX, & nSavedWindowY ) ) IsSaveWindow = 0 ;
}
EndDialog ( hWnd, IDCANCEL ) ;
return TRUE ;
}
// 擖椡僼傽僀儖柤偺嶲徠
if ( (unsigned) ( LOWORD ( wParam ) - IDC_BUTTON_SRC_MIN ) < SRC_DST_FILE_NELEM ) {
BrowseSrcFileName ( hWnd, LOWORD ( wParam ) - IDC_BUTTON_SRC_MIN ) ;
return TRUE ;
}
// 弌椡偺僼傽僀儖柤偺嶲徠
if ( (unsigned) ( LOWORD ( wParam ) - IDC_BUTTON_DST_MIN ) < SRC_DST_FILE_NELEM ) {
BrowseDstFileName ( hWnd, LOWORD ( wParam ) - IDC_BUTTON_DST_MIN ) ;
return TRUE ;
}
// 擖椡儔僕僆儃僞儞偺愝掕
if ( (unsigned) ( LOWORD ( wParam ) - IDC_CHECK_SRC_TYPE_MIN ) < SRC_TYPE_NELEM ) {
nSrcType = LOWORD ( wParam ) - IDC_CHECK_SRC_TYPE_MIN ;
// 惉岟儊僢僙乕僕偺弶婜壔
for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) SetStatusIcon ( hWnd, nCount, STATUS_ICON_READY ) ;
if ( nSrcType == TYPE_PSEUDO ) {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_SRC_CODE, nSrcCode ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_SRC_CODE, TRUE ) ;
}
else {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_SRC_CODE, -1 ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_SRC_CODE, FALSE ) ;
}
DisplayAvailableForm ( hWnd, nSrcType, nSrcCode ) ;
return TRUE ;
}
// 弌椡儔僕僆儃僞儞偺愝掕
if ( (unsigned) ( LOWORD ( wParam ) - IDC_CHECK_DST_TYPE_MIN ) < DST_TYPE_NELEM ) {
nDstType = LOWORD ( wParam ) - IDC_CHECK_DST_TYPE_MIN ;
// 惉岟儊僢僙乕僕偺弶婜壔
for ( int nCount = 0 ; nCount < SRC_DST_FILE_NELEM ; nCount ++ ) SetStatusIcon ( hWnd, nCount, STATUS_ICON_READY ) ;
if ( nDstType == TYPE_PSEUDO ) {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_DST_CODE, nDstCode ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_DST_CODE, TRUE ) ;
}
else {
Dlg_ComboBox_SetCurSel ( hWnd, IDC_COMBO_DST_CODE, -1 ) ;
Dlg_EnableWindow ( hWnd, IDC_COMBO_DST_CODE, FALSE ) ;
}
return TRUE ;
}
// 僆僾僔儑儞傪愝掕
if ( LOWORD ( wParam ) == IDC_BUTTON_OPTION ) {
SetOption ( hWnd ) ;
return TRUE ;
}
// 僿儖僾昞帵
if ( LOWORD ( wParam ) == IDC_BUTTON_HELP ) {
DisplayHelp ( hWnd ) ;
return TRUE ;
}
// 僐儞儃儃僢僋僗偺慖戰傪曄峏偟偨偲偒
if ( HIWORD ( wParam ) == CBN_SELCHANGE ) {
if ( LOWORD ( wParam ) == IDC_COMBO_SRC_CODE ) {
nSrcCode = Dlg_ComboBox_GetCurSel ( hWnd, IDC_COMBO_SRC_CODE ) ;
DisplayAvailableForm ( hWnd, nSrcType, nSrcCode ) ;
return TRUE ;
}
if ( LOWORD ( wParam ) == IDC_COMBO_DST_CODE ) {
nDstCode = Dlg_ComboBox_GetCurSel ( hWnd, IDC_COMBO_DST_CODE ) ;
return TRUE ;
}
}
break ;
case WM_CTLCOLOREDIT :
case WM_CTLCOLORSTATIC :
nId = GetDlgCtrlID ( (HWND) lParam ) ;
if ( (unsigned) ( nId - IDC_EDIT_SRC_MIN ) < SRC_DST_FILE_NELEM ) return (INT_PTR) GetStockObject ( WHITE_BRUSH ) ;
if ( (unsigned) ( nId - IDC_EDIT_DST_MIN ) < SRC_DST_FILE_NELEM ) return (INT_PTR) GetStockObject ( WHITE_BRUSH ) ;
break ;
case WM_DRAWITEM :
if ( (unsigned) ( wParam - IDC_STATIC_STATUS_MIN ) < SRC_DST_FILE_NELEM ) {
DrawStatusIcon ( hWnd, (DRAWITEMSTRUCT*) lParam, (int) ( wParam - IDC_STATIC_STATUS_MIN ) ) ;
SetDlgMsgResult ( hWnd, TRUE ) ;
return TRUE ;
}
break ;
case WM_DESTROY :
if ( hFont ) {
DeleteObject ( hFont ) ;
hFont = NULL ;
}
break ;
default :
break ;
}
return FALSE ;
}
int SetDraggedFileNameA ( HWND hWnd, HDROP hDrop ) ;
int SetDraggedFileNameW ( HWND hWnd, HDROP hDrop ) ;
// 僄僨傿僢僩僐儞僩儘乕儖傪僼僢僋偟丄僪儔僢僌傾儞僪僪儘僢僾傪張棟乮ANSI斉乯
LRESULT CALLBACK NewEditCtrlProcA ( HWND hWnd, unsigned int dwMessage, WPARAM wParam, LPARAM lParam ) {
if ( dwMessage == WM_DROPFILES ) return SetDraggedFileNameA ( hWnd, (HDROP) wParam ) ;
else return CallWindowProcA ( OldEditCtrlProc, hWnd, dwMessage, wParam, lParam ) ;
}
// 僄僨傿僢僩僐儞僩儘乕儖傪僼僢僋偟丄僪儔僢僌傾儞僪僪儘僢僾傪張棟乮UNICODE斉乯
LRESULT CALLBACK NewEditCtrlProcW ( HWND hWnd, unsigned int dwMessage, WPARAM wParam, LPARAM lParam ) {
if ( dwMessage == WM_DROPFILES ) return SetDraggedFileNameW ( hWnd, (HDROP) wParam ) ;
else return CallWindowProcW ( OldEditCtrlProc, hWnd, dwMessage, wParam, lParam ) ;
}
// 僪儔僢僌偝傟偨僼傽僀儖柤傪僂傿儞僪僂偵昞帵乮ANSI斉乯
int SetDraggedFileNameA ( HWND hWnd, HDROP hDrop ) {
char szFileName [ MAX_PATH ] ;
if ( DragQueryFileA ( hDrop, (unsigned int) -1, NULL, 0 ) == 1 ) {
DragQueryFileA ( hDrop, 0, szFileName, MAX_PATH ) ;
char *szExtension = GetExtensionA ( szFileName ) ;
if ( szExtension && ( ! stricmp ( szExtension, "lnk" ) || ! stricmp ( szExtension, "url" ) ) ) GetShortcutA ( szFileName, szFileName, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ;
Wm_SetTextA ( hWnd, szFileName ) ;
MoveCaretToEnd ( hWnd ) ;
}
else {
SetForegroundWindow ( GetParent ( hWnd ) ) ;
MessageBoxA ( GetParent ( hWnd ), GetStringA ( IDS_DRAGFILE_ERROR ), szCommandNameA, MB_OK ) ;
}
DragFinish ( hDrop ) ;
return 0 ;
}
// 僪儔僢僌偝傟偨僼傽僀儖柤傪僂傿儞僪僂偵昞帵乮UNICODE斉乯
int SetDraggedFileNameW ( HWND hWnd, HDROP hDrop ) {
wchar_t szFileName [ MAX_PATH ] ;
if ( DragQueryFileW ( hDrop, (unsigned int) -1, NULL, 0 ) == 1 ) {
DragQueryFileW ( hDrop, 0, szFileName, MAX_PATH ) ;
wchar_t *szExtension = GetExtensionW ( szFileName ) ;
if ( szExtension && ( ! wcsicmp ( szExtension, L"lnk" ) || ! wcsicmp ( szExtension, L"url" ) ) ) GetShortcutW ( szFileName, szFileName, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ;
Wm_SetTextW ( hWnd, szFileName ) ;
MoveCaretToEnd ( hWnd ) ;
}
else {
SetForegroundWindow ( GetParent ( hWnd ) ) ;
MessageBoxW ( GetParent ( hWnd ), GetStringW ( IDS_DRAGFILE_ERROR ), szCommandNameW, MB_OK ) ;
}
DragFinish ( hDrop ) ;
return 0 ;
}
// 儊僀儞僟僀傾儘僌偺僞僀僩儖傪愝掕
// nMode 偑 0 偱側偗傟偽丄乽曄姺拞乿偵
int SetMainDialogTitle ( HWND hWnd, int nMode ) {
if ( nMode ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -