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

📄 mbandwc.c

📁 选择字符集
💻 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 + -