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

📄 status.cpp

📁 支持Windows 3.x、Windows 9x平台上的中文(GB、Big5)、日文(Shift JIS、EUC JIS)、韩文(KS C 5601)、HZ码的显示与输入,智能内码识别
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//状态
#include	"stdafx.h"
#include	<ver.h>
#include	"resource.h"
#include	"cspublic.h"

#include	"systemse.h"
#include	"status.h"
#include	"hooks.h"

extern CHotKeyParam	OHotKeyParam ;	//热键参数对象

CWinStatus	OWinStatus ;	//主窗口状态对象

CWinStatus::CWinStatus( void )
{
	m_hMainWnd	=NULL ;
	//得到主窗口状态
	m_nMainWinStatus	=GetPrivateProfileInt( "窗口参数" , 
				"浮动条状态" , 2 , INI_FILE_NAME ) ;
	m_bLine	=GetPrivateProfileInt( "窗口参数" ,
				"退化显示" , 1 , INI_FILE_NAME ) ;
	m_bLineSwitch	=1 ;
//-----------------------------------------------------------------------------------//				
	m_hInputWnd	=NULL ;
	//得到输入板窗口状态
	m_nInputWinStatus	=GetPrivateProfileInt( "输入板参数" ,
				"输入板状态" , 1 , INI_FILE_NAME ) ;				
//-----------------------------------------------------------------------------------------------//
	//得到输入内码
	m_nInputCode	=GetPrivateProfileInt( "输入方法" , 
				"输入内码" , 0 , INI_FILE_NAME ) ;
	//得到当前输入法
	m_nInputMethod	=GetPrivateProfileInt( "输入方法" , "当前输入法" , 0 , 
				INI_FILE_NAME ) ;
//----------------------------------------------------------------------------------------------//
	//得到是西文字符还是中文字符,缺省为西文字符
	m_bInputStatus123[0]	=GetPrivateProfileInt( "输入方法" ,
				"西文字符还是中文字符" , 1 , INI_FILE_NAME ) ;				
	//得到输入汉字后是否自动加空格,缺省为不加
	m_bInputStatus123[1]	=GetPrivateProfileInt( "输入方法" ,
				"汉字后是否加空格" , 1 , INI_FILE_NAME ) ;
	//得到是半角字母还是全角字母,缺省为半角字母
	m_bInputStatus123[2]	=GetPrivateProfileInt( "输入方法" ,
				"半角字母还是全角字母" , 1 , INI_FILE_NAME ) ;
//-------------------------------------------------------------------------------------------//
	//得到是否自动识别GB、BIG5
	m_bRecGbBig5	=GetPrivateProfileInt( "输出" , "是否自动识别GB码与BIG5码" , 
		1 , INI_FILE_NAME ) ;
	//得到是否自动识别HZ码
	m_bRecHz	=GetPrivateProfileInt( "输出" , "是否自动识别HZ码" , 
		1 , INI_FILE_NAME ) ;
	//得到输出汉字是简体还是繁体
	m_bIsJt	=GetPrivateProfileInt( "输出" , 
		"简体汉字还是繁体汉字" , 1 , INI_FILE_NAME ) ;
	//得到缺省输出内码
	m_nOutputCode	=GetPrivateProfileInt( "输出" , 
		"缺省输出内码" , 0 , INI_FILE_NAME ) ;	 
	//得到是否以系统的内码为优先
	m_bSystemFirst	=GetPrivateProfileInt( "输出" ,
			"是否以系统内码为先" , 1 , INI_FILE_NAME ) ;
	//得到当前系统的内码
	m_nSystemCode	=GetPrivateProfileInt( "输出" ,
			"当前系统的内码" , 1 , INI_FILE_NAME ) ;
//---------------------------------------------------------------------------------------------------------------//
	m_bWinOrBar	=GetPrivateProfileInt( "指取翻译" , "详细解释还是简单解释" ,
		1 , INI_FILE_NAME ) ;
	//得到是否进行指取翻译
	m_nFingerTranslate	=GetPrivateProfileInt( "指取翻译" , "是否进行指取翻译" ,
		1 , INI_FILE_NAME ) ;
	if( m_nFingerTranslate )
		m_nFingerTranslate	=1 ;
	m_nFingerAid	=GetPrivateProfileInt( "指取翻译" ,
		"是否需要辅助键" , 0 , INI_FILE_NAME ) ;
	if( m_nFingerAid )
		m_nFingerAid	=1 ;
//---------------------------------------------------------------------------------------------//
	m_bPrompt	=GetPrivateProfileInt( "系统参数" , 
		"系统退出时是否提示" , 1 , INI_FILE_NAME ) ;
	m_bExitWin	=GetPrivateProfileInt( "系统参数" ,
		"是否同时退出Windows" , 0 , INI_FILE_NAME ) ;		
//-------------------------------------------------------------------------------------------//
	m_bMenuCharFlag	=0 ;
//-------------------------------------------------------------------------------------------//
	//判断Windows版本
	//低字0为Win,1为95;高字0为西文,1为外挂,2为中文Win
	WORD	wLow , wHigh ;
	if( HIBYTE(LOWORD( GetVersion() ))==95 )
		wLow	=1 ;
	else
		wLow	=0 ;

	wHigh	=0 ;	//缺省为西文
		
	char	sProgramName[100] ;
	//得到Windows 所在路径
	if( !::GetWindowsDirectory( sProgramName , sizeof( sProgramName ) ) )
	{
		m_dwWinVersion	=MAKELONG( wLow , wHigh ) ;
		return ;
	}
	strcat( sProgramName , "\\winver.exe" ) ;

	BYTE   abData[512];
	DWORD  handle;
	DWORD  dwSize;
	LANGUAGE_PAGE *lpLang ;
	dwSize =::GetFileVersionInfoSize(sProgramName, &handle);
	::GetFileVersionInfo(sProgramName, handle, dwSize, abData);
	::VerQueryValue(abData, "\\VarFileInfo\\Translation", 
								(void FAR* FAR*)&lpLang, (UINT FAR*)&dwSize);
	if(!dwSize) 
	{
		m_dwWinVersion	=MAKELONG( wLow , wHigh ) ;
		return ;
	}
	if( lpLang->wLanguage==0x0404 ||	//繁体字汉语
		lpLang->wLanguage==0x0411 ||	//日语
		lpLang->wLanguage==0x0412 ||	//朝鲜语
		lpLang->wLanguage==0x0804 )	//简体字汉语
		wHigh	=2 ;

	m_dwWinVersion	=MAKELONG( wLow , wHigh ) ;
}

CWinStatus::~CWinStatus( void )
{
	char	sBuff[10] ;
	
	wsprintf( sBuff , "%d" , m_nMainWinStatus ) ;
	WritePrivateProfileString( "窗口参数" , "浮动条状态" , sBuff , 
		INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_bLine ) ;
	WritePrivateProfileString( "窗口参数" ,
		"退化显示" , sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_nInputWinStatus ) ;
	WritePrivateProfileString( "输入板参数" , "输入板状态" , sBuff , 
		INI_FILE_NAME ) ;
//--------------------------------------------------------------------------------//	
	wsprintf( sBuff , "%d" , m_nInputCode ) ;
	WritePrivateProfileString( "输入方法" , "输入内码" , sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_nInputMethod ) ;
	WritePrivateProfileString( "输入方法" , "当前输入法" , sBuff , INI_FILE_NAME ) ;
//---------------------------------------------------------------------------------//	
	wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[0] ) ;
	WritePrivateProfileString( "输入方法" ,
				"西文字符还是中文字符" , sBuff , INI_FILE_NAME ) ;				
	wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[1] ) ;
	WritePrivateProfileString( "输入方法" ,
				"汉字后是否加空格" , sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[2] ) ;
	WritePrivateProfileString( "输入方法" ,
				"半角字母还是全角字母" , sBuff , INI_FILE_NAME ) ;
//----------------------------------------------------------------------------------//		
	//存储参数到INI文件中
	wsprintf( sBuff , "%d" , m_bRecGbBig5 ) ;
	WritePrivateProfileString( "输出" , "是否自动识别GB码与BIG5码" ,
		sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_bRecHz ) ;
	WritePrivateProfileString( "输出" , "是否自动识别HZ码" ,
		sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_bIsJt ) ;
	WritePrivateProfileString( "输出" , "简体汉字还是繁体汉字" , 
		sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_nOutputCode ) ;
	WritePrivateProfileString( "输出" , "缺省输出内码" ,
		sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_bSystemFirst ) ;
	WritePrivateProfileString( "输出" , "是否以系统内码为先" ,
		sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_nSystemCode ) ;
	WritePrivateProfileString( "输出" , "当前系统的内码" ,
		sBuff , INI_FILE_NAME ) ; 
//-----------------------------------------------------------------------------------------//
	wsprintf( sBuff , "%d" , m_bWinOrBar ) ;
	WritePrivateProfileString( "指取翻译" , "详细解释还是简单解释" ,
		sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_nFingerTranslate ) ;
	WritePrivateProfileString( "指取翻译" , "是否进行指取翻译" ,
			sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_nFingerAid ) ;
	WritePrivateProfileString( "指取翻译" ,
		"是否需要辅助键" , sBuff , INI_FILE_NAME ) ;
//---------------------------------------------------------------------------------------------//
	wsprintf( sBuff , "%d" , m_bPrompt ) ;
	WritePrivateProfileString( "系统参数" , 
		"系统退出时是否提示" , sBuff , INI_FILE_NAME ) ;
	wsprintf( sBuff , "%d" , m_bExitWin ) ;
	WritePrivateProfileString( "系统参数" ,
		"是否同时退出Windows" , sBuff , INI_FILE_NAME ) ;		
}

//-------------------------------------------------------------------//
#ifdef __cplusplus
extern "C" {
#endif

//主窗口状态对象的接口函数

//设置主窗口句柄
void __export FAR PASCAL	SetMainWinHandle( HWND hwnd )
{
	OWinStatus.m_hMainWnd	=hwnd ;
}

//得到主窗口句柄
HWND __export FAR PASCAL	GetMainWinHandle( void )
{
	return	OWinStatus.m_hMainWnd ;
}
	
//设置主窗口状态
void __export FAR PASCAL	SetMainWinStatus( int nStatus )
{
	OWinStatus.m_nMainWinStatus	=nStatus ;
}

//得到主窗口状态
int __export FAR PASCAL	GetMainWinStatus( void )
{
	return	OWinStatus.m_nMainWinStatus ;
}

//显示或隐藏主窗口
void __export FAR PASCAL	SwitchMainWin( void )
{
	if( !OWinStatus.m_hMainWnd )	//主窗口句柄为空
		return ;
		
	if( !OWinStatus.m_nMainWinStatus )	//当前为隐藏,显示之
	{
		SetMainWinStatus( 2 ) ;	//状态设为正常显示
		::SetWindowPos( OWinStatus.m_hMainWnd , HWND_TOPMOST ,
				0 , 0 , 0 , 0 , SWP_SHOWWINDOW|
					SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE ) ;  

		if( GetLineFlag() )	//允许退化显示
			//设上退化时间器
			::SendMessage( GetMainWinHandle() , WM_USER_SET_TIMER ,
				1 , 0 ) ;
	}
	else	//当前为显示,隐藏之
	{
		if( GetLineFlag() )	//允许退化显示
			::SendMessage( GetMainWinHandle() , WM_USER_SET_TIMER ,
				0 , 0 ) ;
			
		SetMainWinStatus( 0 ) ;
		::ShowWindow( OWinStatus.m_hMainWnd , SW_HIDE ) ;
	}
}

//设置退化显示状态
void __export FAR PASCAL	SetLineFlag( BOOL b )
{
	OWinStatus.m_bLine	=b ;
}

//得到退化显示状态
BOOL __export FAR PASCAL	GetLineFlag( void )
{
	return	OWinStatus.m_bLine ;
}

//设置退化显示开关
void __export FAR PASCAL	SetLineSwitch( BOOL b )
{
	OWinStatus.m_bLineSwitch	=b ;
}

//得到退化显示开关
BOOL __export FAR PASCAL	GetLineSwitch( void )
{
	return	OWinStatus.m_bLineSwitch ;
}
//-------------------------------------------------//
//输入板窗口状态的接口函数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -