www.pudn.com > 智能内码识别,支持屏幕取词翻译的程序.zip > INIINPUT.CPP


//初始化输入法环境 
 
#include	"stdafx.h" 
 
#include	"cspublic.h" 
 
#include	"iniinput.h" 
#include	"csinput.h" 
 
CInputInit	OInputInit ;	//输入菜单初始化对象 
 
CInputInit::CInputInit( void ) 
{ 
	m_nMethodNum	=1 ;		//至少有一个菜单项,即区位输入输入法 
	m_nCurrentMethod	=0 ; 
	if( !m_InputMenu.CreatePopupMenu() )		//创建空白菜单 
	{ 
		AfxMessageBox( "CreateMenu error" ) ; 
		return ; 
	} 
} 
 
CInputInit::~CInputInit( void ) 
{ 
	m_InputMenu.DestroyMenu() ; 
 
	//改变当前输入法 
	SetInputMethod( m_nCurrentMethod ) ; 
} 
 
//初始化输入法菜单 
void	CInputInit::InitInputMenu( void ) 
{ 
	//得到输入法数 
	m_nMethodNum	=GetPrivateProfileInt( INPUT_METHOD , 
										INPUT_NUM , 0 ,  
										INI_FILE_NAME ) ; 
	if( !m_nMethodNum )		//没有该文件或该文件有错 
	{ 
		m_nMethodNum	=1 ;		//至少有一个菜单项,即区位输入输入法 
		m_nCurrentMethod	=0 ;	//当前菜单项 
		char	sBuff[100] ; 
		wsprintf( sBuff , "%d" , m_nMethodNum ) ;	//输入法数 
		//改变输入法数 
		WritePrivateProfileString( INPUT_METHOD , 
								INPUT_NUM , sBuff , INI_FILE_NAME ) ; 
		wsprintf( sBuff , "%d" , m_nCurrentMethod ) ;	//当前输入法 
		//改变当前输入法 
		WritePrivateProfileString( INPUT_METHOD ,  
								CURRENT_INPUT_METHOD ,  
								sBuff , INI_FILE_NAME ) ; 
		//向这个输入法信息写入INI文件 
		WriteInputMethodInfo( 0 , "内码输入" , "" ) ; 
		//加入菜单 
		m_InputMenu.AppendMenu( MF_CHECKED|MF_DISABLED , 
						100 , "内码输入" ) ; 
	} 
	else 
	{ 
		//读出当前输入法 
		m_nCurrentMethod	=GetPrivateProfileInt( INPUT_METHOD , 
					CURRENT_INPUT_METHOD , 
					m_nMethodNum , INI_FILE_NAME ) ; 
		if( m_nCurrentMethod == m_nMethodNum )	//没读出来 
			m_nCurrentMethod	=0 ;		//设为第一个输入法 
		 
		char	sInputName[100] ;			//输入法名 
		char	sInputFileName[100] ;		//输入法文件 
	        //加入所有输入法 
		for( int i=0 ; i=m_nMethodNum )	//英文输入法不能被删除 
	{ 
		AfxMessageBox( "要删除的输入法位置不对!" ) ; 
		return	0 ; 
	} 
 
	char	sInputName[100] ;			//输入法名 
	char	sInputFileName[100] ;		//输入法文件 
	for( int i=n1 ; i=m_nMethodNum ) 
	{ 
		AfxMessageBox( "GetInputMethodMess 中的n有问题!" ) ; 
		return	0 ; 
	}								 
 
	char	sBuff[100] ; 
									 
	//组织输入法名 
	wsprintf( sBuff , "%s%d" , INPUT_METHOD_NAME , n ) ; 
	//得到输入法名 
	GetPrivateProfileString( INPUT_METHOD , 
			sBuff , "英文" , lpsName , nMaxNameLen , INI_FILE_NAME ) ; 
	//组织输入法文件名 
	wsprintf( sBuff , "%s%d" , INPUT_METHOD_FILE_NAME , n ) ; 
	//得到输入法文件 
	GetPrivateProfileString( INPUT_METHOD , sBuff ,  
			"abc@123" , lpsFileName , nMaxFileNameLen ,  
			INI_FILE_NAME ) ; 
	if( !_fstrcmp( lpsFileName , "abc@123" ) ) 	//有问题 
			lpsFileName[0]	='\0' ; 
	 
	return	1 ; 
} 
 
//得到当前输入法的名字与文件名 
BOOL	CInputInit::GetCurrentInputMethod( LPSTR lpsName ,  
								int nMaxNameLen , 
								LPSTR lpsFileName , int nMaxFileNameLen ) 
{ 
	return	GetInputMethodMess( m_nCurrentMethod , lpsName , 
								nMaxNameLen , 
								lpsFileName , nMaxFileNameLen ) ; 
} 
 
//改变输入法状态								 
void	CInputInit::ChangeMenuStatus( int n ) 
{ 
	if( n<0 || n>=m_nMethodNum ) 
	{ 
		AfxMessageBox( "ChangeMenuStatus 中的n有问题!" ) ; 
		return	; 
	} 
	 
	if( n==m_nCurrentMethod )	//是当前输入法,不用改变了 
		return	; 
 
	//将该菜单项打上标记,并且无效		 
	m_InputMenu.CheckMenuItem( m_nMethodNum-1-n ,  
								MF_BYPOSITION|MF_CHECKED ) ; 
	m_InputMenu.EnableMenuItem( m_nMethodNum-1-n , 
								MF_BYPOSITION|MF_DISABLED ) ;								  
	 
	//将以前的当前菜单项消除标记,并且有效 
	m_InputMenu.CheckMenuItem( m_nMethodNum-1-m_nCurrentMethod ,  
								MF_BYPOSITION|MF_UNCHECKED ) ; 
	m_InputMenu.EnableMenuItem( m_nMethodNum-1-m_nCurrentMethod , 
								MF_BYPOSITION|MF_ENABLED ) ;								  
 
	//改变当前输入法 
	m_nCurrentMethod	=n ; 
	SetInputMethod( m_nCurrentMethod ) ; 
 
	//关闭以前的输入法 
	UnloadInputLib() ; 
	if( n )		//不是英文输入法 
	{ 
		//得到当前输入法文件名 
		char	sName[100] ; 
		char	sFileName[100] ; 
		GetCurrentInputMethod( sName , 100 , sFileName , 100 ) ; 
		//装入现在的输入法 
		LoadInputLib( sFileName ) ; 
	} 
} 
 
//向INI文件写入一种输入法的信息 
BOOL	CInputInit::WriteInputMethodInfo( int n , LPCSTR lpcsName ,  
										LPCSTR lpcsFileName ) 
{ 
	char	sBuff[100] ; 
 
	wsprintf( sBuff , "%s%d" , INPUT_METHOD_NAME , n ) ; 
	//增加输入法名称 
	WritePrivateProfileString( INPUT_METHOD ,  
												sBuff , lpcsName , INI_FILE_NAME ) ; 
	wsprintf( sBuff , "%s%d" , INPUT_METHOD_FILE_NAME , n ) ; 
	//增加输入法文件名称 
	WritePrivateProfileString( INPUT_METHOD ,  
												sBuff , lpcsFileName , INI_FILE_NAME ) ; 
 
	return	1 ; 
}												 
 
int	CInputInit::GetCurrentMenu( void ) 
{ 
	return	(m_nMethodNum-1-m_nCurrentMethod) ; 
} 
 
//返回当前输入法位置 
int	CInputInit::GetCurrentMethod( void ) 
{ 
	return	m_nCurrentMethod ; 
} 
 
//得到输入法数 
int	CInputInit::GetInputMethodNum( void ) 
{ 
	return	m_nMethodNum ; 
}