📄 mbandwc.c
字号:
#include <windows.h>
#include <stdio.h>
#include "mbandwc.h"
#include "Utility.h"
#define NUM_CHARSET 5
HANDLE g_hInst = NULL;
HANDLE g_hInstNls = NULL;
HWND g_hWndMain = NULL;
HWND g_hWndCB = NULL;
HWND g_hWndCode = NULL;
typedef struct tagCHARINFO {
TCHAR szCharSet[64];
WORD wCharSet;
} CHARINFO, *LPCHARINFO;
CHARINFO ci[NUM_CHARSET] = {
{ "ANSI", ANSI_CHARSET },
{ "GB2312", GB2312_CHARSET },
{ "Big5", CHINESEBIG5_CHARSET },
{ "Shift-JIS", SHIFTJIS_CHARSET },
{ "Korean", HANGEUL_CHARSET }
};
typedef struct tagMBWC {
WORD wCharSet;
BYTE szMB[256];
WORD szWC[256];
} MBWC, *LPMBWC;
MBWC mw;
void FormatOutput()
{
unsigned char szTemp[5];
char szCode[256];
int iCurSel, nLen;
iCurSel = SendMessage( g_hWndCB, CB_GETCURSEL, 0, 0 );
mw.wCharSet = (WORD)SendMessage( g_hWndCB, CB_GETITEMDATA, iCurSel, 0 );
nLen = lstrlen( mw.szMB );
if( nLen == 0 )
{
MessageBox( g_hWndMain, "No input", "Too few", MB_OK|MB_ICONINFORMATION );
return;
}
if( nLen > 2 )
{
MessageBox( g_hWndMain, "Don't exceed 2 chars", "Too many", MB_OK|MB_ICONINFORMATION );
return;
}
if( nLen == 1 )
{
if( mw.wCharSet != ANSI_CHARSET )
{
MessageBox( g_hWndMain, "One Char must be ANSI", "Wrong CharSet", MB_OK|MB_ICONINFORMATION );
return;
}
else
{
lstrcpy( szCode, "0x" );
_itoa( (unsigned char)mw.szMB[0], szTemp, 16 );
lstrcat( szCode, szTemp );
}
}
if( nLen == 2 )
{
/*
if( !( TCIsDBCSLeadByte( mw.wCharSet, mw.szMB[0] ) &&
TCIsDBCSLeadByteFollow( mw.wCharSet, mw.szMB[1] ) ) )
{
MessageBox( g_hWndMain, "Check specified CharSet", "Wrong CharSet", MB_OK|MB_ICONINFORMATION );
return;
}
else
*/
if( TRUE )
{
TCMB2WC( mw.wCharSet, mw.szMB, 2, mw.szWC, 1 );
lstrcpy( szCode, "MB= " );
sprintf( szTemp, "%02x", (unsigned char)mw.szMB[0] );
lstrcat( szCode, szTemp );
lstrcat( szCode, " " );
sprintf( szTemp, "%02x", (unsigned char)mw.szMB[1] );
lstrcat( szCode, szTemp );
lstrcat( szCode, " WC= " );
sprintf( szTemp, "%02x", (unsigned char)LOBYTE(mw.szWC[0]) );
lstrcat( szCode, szTemp );
lstrcat( szCode, " " );
sprintf( szTemp, "%02x", (unsigned char)HIBYTE(mw.szWC[0]) );
lstrcat( szCode, szTemp );
}
}
SetWindowText( g_hWndCode, szCode );
}
BOOL CALLBACK CharTableDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
int i, nIndex;
RECT rc;
switch( message )
{
case WM_INITDIALOG:
g_hWndMain = hDlg;
g_hWndCB = GetDlgItem( hDlg, ID_CHARSET );
g_hWndCode = GetDlgItem( hDlg, ID_CODE );
GetClientRect( g_hWndCB, &rc );
SetWindowPos( g_hWndCB, 0, 0, 0, rc.right-rc.left, (rc.bottom-rc.top)*5, SWP_NOMOVE );
for( i = 0; i < NUM_CHARSET; i++ )
{
nIndex = SendMessage( g_hWndCB, CB_ADDSTRING, 0, (LPARAM)ci[i].szCharSet );
SendMessage( g_hWndCB, CB_SETITEMDATA, nIndex, (LPARAM)ci[i].wCharSet );
}
SendMessage( g_hWndCB, CB_SETCURSEL, (WPARAM)0, 0L );
return TRUE;
case WM_COMMAND:
if( wParam == ID_GET )
{
GetDlgItemText( hDlg, ID_INPUT, (LPTSTR)mw.szMB, sizeof(mw.szMB)/sizeof(TCHAR) );
FormatOutput();
}
else if( wParam == ID_CLOSE || wParam == IDCANCEL )
{
EndDialog( hDlg, TRUE );
return TRUE;
}
break;
}
return FALSE;
}
int PASCAL WinMain( HANDLE hInst, HANDLE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
{
g_hInst = hInst;
g_hInstNls = LoadLibrary( TEXT("ROBONLS") );
if( !g_hInstNls )
return 0;
DialogBox( g_hInst, "CHARTABLE", NULL, (DLGPROC)CharTableDlgProc );
FreeLibrary( g_hInstNls );
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -