www.pudn.com > GOS.rar > GIME.cpp


// GIME.cpp: implementation of the GIME class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "..\stdafx.h" 
#include "GIME.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
GIME::GIME() 
{ 
	m_nMode=0; 
} 
 
GIME::~GIME() 
{ 
 
} 
 
//消息处理函数 
void GIME::WndProc(int nMessage, int wParam, int lParam) 
{ 
	switch(nMessage) 
	{ 
	case WM_PAINT: 
		if(wParam & ~ODA_CLIENT)OnNcPaint(); 
		if(wParam & ODA_CLIENT){OnPaint();DrawControls();} 
		break; 
	case WM_COMMAND: 
		OnClick(wParam); 
		break; 
	case WM_LBUTTONUP: 
		if(wParam!=POINT_INVALID && lParam!=POINT_INVALID  
			&& !PtInRect(wParam,lParam,m_rectWnd)) 
		{ 
			m_nDlgResult=-1; 
		} 
		GDialog::WndProc(nMessage, wParam, lParam); 
		break; 
	case WM_CREATE: 
		OnCreate(); 
		break; 
	default: 
		GDialog::WndProc(nMessage, wParam,lParam); 
		break; 
	} 
} 
 
void GIME::OnCreate() 
{ 
	int x,y,i; 
	m_strText="输入法 - 选择"; 
	m_nStyle|=DS_CENTER; 
	m_rectWnd=MakeRect(0,0,200,200); 
	GDialog::OnCreate(); 
 
	AddControl(&m_btn[0],NULL,WS_CLIENT|BS_FLAT); 
	m_btn[0].MoveWindow(10,10,176,30); 
	m_btn[0].m_nBackColor=RGB(255,255,255)|EdgeRGB(255,255,255); 
	m_btn[0].m_nForeColor=RGB(0,0,0); 
	for(y=0;y<4;y++) 
	{ 
		for(x=0;x<3;x++) 
		{ 
			i=y*3+x+1; 
			AddControl(&m_btn[i],"1234",0); 
			m_btn[i].MoveWindow(10+x*61,50+y*30,55,28); 
		} 
	} 
	m_btn[11].m_strText="IME"; 
	m_btn[12].m_strText="清除"; 
	if(m_nMode<1)SetMode(IME_NUMBER); 
	m_pPreBtn=this; 
} 
 
void GIME::OnClick(int wParam) 
{ 
	GWnd* pWnd=(GWnd*)wParam; 
	if(pWnd==&m_btn[0]) 
	{ 
		; 
	} 
	else if(pWnd==&m_btn[11]) 
	{ 
		SetMode(m_nMode+1); 
		PostMessage(WM_PAINT,ODA_ALL,-1); 
	} 
	else if(pWnd==&m_btn[12]) 
	{ 
		if(m_pPreBtn==pWnd) 
		{ 
			KString str=m_btn[0].m_strText; 
			int i=str.GetLength(); 
			if(i>0) 
			{ 
				if(GUI_CHARCODE(str.Right(2))>0xff)str=str.Left(i-2); 
				else str=str.Left(i-1); 
			} 
			m_btn[0].m_strText=str; 
		} 
		else m_btn[0].m_strText+=" "; 
		m_btn[0].PostMessage(WM_PAINT,ODA_CLIENT,-1); 
	} 
	else 
	{ 
		switch(m_nMode) 
		{ 
		case IME_LETTER_UPPER: 
		case IME_LETTER_LOWER: 
		case IME_SYMBOL_ASC: 
		{ 
			int i,nAT; 
			KString str=m_btn[0].m_strText; 
			i=str.GetLength(); 
			if(i>0) 
			{ 
				nAT=pWnd->m_strText.Find(str.Right(1),0); 
				if(nAT<0)m_btn[0].m_strText+=pWnd->m_strText.Left(1); 
				else 
				{ 
					if(m_pPreBtn==pWnd) 
					{ 
						if(nATm_strText.GetLength()-1)nAT++; 
						else nAT=0; 
						m_btn[0].m_strText=str.Left(i-1)+pWnd->m_strText.Mid(nAT,1); 
					} 
					else m_btn[0].m_strText+=pWnd->m_strText.Mid(nAT,1); 
				} 
			} 
			else m_btn[0].m_strText=pWnd->m_strText.Left(1); 
			break; 
		} 
		case IME_NUMBER: 
			m_btn[0].m_strText+=pWnd->m_strText; 
			break; 
		} 
		m_btn[0].PostMessage(WM_PAINT,ODA_CLIENT,-1); 
	} 
	m_pPreBtn=pWnd; 
} 
 
void GIME::SetMode(int nMode) 
{ 
	 
	if(nMode>IME_SYMBOL_ASC) 
	{ 
		nMode=IME_LETTER_UPPER; 
	} 
	m_nMode=nMode; 
	m_strText="输入法 - "; 
	switch(nMode) 
	{ 
	case IME_LETTER_UPPER: 
		m_strText+="ABC"; 
		m_btn[1].m_strText="AB"; 
		m_btn[2].m_strText="CD"; 
		m_btn[3].m_strText="EFG"; 
		m_btn[4].m_strText="HI"; 
		m_btn[5].m_strText="JK"; 
		m_btn[6].m_strText="LMN"; 
		m_btn[7].m_strText="OPQ"; 
		m_btn[8].m_strText="RST"; 
		m_btn[9].m_strText="UVW"; 
		m_btn[10].m_strText="XYZ"; 
		break; 
	case IME_LETTER_LOWER: 
		m_strText+="abc"; 
		m_btn[1].m_strText="ab"; 
		m_btn[2].m_strText="cd"; 
		m_btn[3].m_strText="efg"; 
		m_btn[4].m_strText="hi"; 
		m_btn[5].m_strText="jk"; 
		m_btn[6].m_strText="lmn"; 
		m_btn[7].m_strText="opq"; 
		m_btn[8].m_strText="rst"; 
		m_btn[9].m_strText="uvw"; 
		m_btn[10].m_strText="xyz"; 
		break; 
	case IME_NUMBER: 
		m_strText+="数字"; 
		m_btn[1].m_strText="1"; 
		m_btn[2].m_strText="2"; 
		m_btn[3].m_strText="3"; 
		m_btn[4].m_strText="4"; 
		m_btn[5].m_strText="5"; 
		m_btn[6].m_strText="6"; 
		m_btn[7].m_strText="7"; 
		m_btn[8].m_strText="8"; 
		m_btn[9].m_strText="9"; 
		m_btn[10].m_strText="0"; 
		break; 
	case IME_SYMBOL_ASC: 
		m_strText+="字符"; 
		m_btn[1].m_strText=".="; 
		m_btn[2].m_strText="+-"; 
		m_btn[3].m_strText="*/"; 
		m_btn[4].m_strText=",.;:"; 
		m_btn[5].m_strText="!'\""; 
		m_btn[6].m_strText="([{"; 
		m_btn[7].m_strText=")]}"; 
		m_btn[8].m_strText="~@#$"; 
		m_btn[9].m_strText="%^&*"; 
		m_btn[10].m_strText="?_|\\"; 
		break; 
	} 
}