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

📄 jyinput.c

📁 基于minigui的软键盘设计的相关资料
💻 C
📖 第 1 页 / 共 4 页
字号:
			_Py_Select_Change();
			m_nSelectPos = 0;

			return TRUE;
		}
	}
	else if (key == KEY_RFUNC)
	{
		if(piinfo->outcode_cur > 0){
			piinfo->outcode_cur--;
			piinfo->hz_outcode[piinfo->outcode_cur] = 0;

			m_nPySelect = 0;
			if (piinfo->outcode_cur !=0) {
				m_nPyCount = _proc_py_index();
			}else{
				m_nPyCount = 0;
			}

			memcpy(piinfo->py_code , m_szPylist + (piinfo->outcode_cur + 1) * m_nPySelect, piinfo->outcode_cur) ;
			piinfo->py_code[piinfo->outcode_cur] = 0;

			_Py_Select_Change();

			return TRUE;
		}
		else
		{
			PostMessage(g_hImeWnd, MSG_IME_CLOSE, 0, 0);
		}
	}

	return FALSE;
}

static BOOL _proc_bh_key_press(unsigned short key)
{
	ST_INPUT_INFO *piinfo = &m_piinfo;
	if(key >= KEY_1 && key <= KEY_5)
	{
		if (g_pstBhTable != NULL)
		{
			if (piinfo->outcode_cur >= 10) 
				return TRUE;

			piinfo->hz_outcode[piinfo->outcode_cur++] = key - 48;
			piinfo->hz_outcode[piinfo->outcode_cur] = '\0';

			m_nSelectPos = 0;
			piinfo->hz_found_cur = 0;
			_find_bh_hzcode();
			_put_bh_to_array();
		}

		return TRUE;
	}
	else if (key == KEY_RFUNC)
	{
		if (piinfo->outcode_cur > 0)
		{
			piinfo->outcode_cur--;
			piinfo->hz_outcode[piinfo->outcode_cur] = 0;
			m_nSelectPos = 0;

			_find_bh_hzcode();
			_put_bh_to_array();
		}
		else
		{
			PostMessage(g_hImeWnd, MSG_IME_CLOSE, 0, 0);
		}
		return TRUE;
	}

	return FALSE;
}

static BOOL _proc_hw_key_press(unsigned short key)
{
	ST_INPUT_INFO *piinfo = &m_piinfo;
	if(key >= KEY_1 && key <= KEY_9)
	{
		//m_nSelectPos
	}
	else if (key == KEY_RFUNC)
	{
		PostMessage(g_hImeWnd, MSG_IME_CLOSE, 0, 0);
	}
	return FALSE;
}

static void _proc_hz_keyup()
{
	ST_INPUT_INFO *piinfo = &m_piinfo;
	if (piinfo->outcode_cur == 0) 
	{
		if (m_bHZAssn)
		{
			if (m_nSelectPos >= LINE_DISPLAY_MAXCOUNT) 
			{
				m_assn_Hz_Pos -= LINE_DISPLAY_MAXCOUNT;
				m_nSelectPos = m_assn_Hz_Pos;
			}
			
			_put_assn_to_array();
		}
		else
		{
			if (m_often_Hz_Pos >= LINE_DISPLAY_MAXCOUNT) 
			{
				m_often_Hz_Pos -= LINE_DISPLAY_MAXCOUNT;
				m_nSelectPos = m_often_Hz_Pos;

			}
			_put_often_to_array();
		}
	}
	else
	{
		if(piinfo->hz_found_begin == piinfo->hz_found_end)
			return;

		if((piinfo->hz_found_cur - piinfo->hz_found_begin) > LINE_DISPLAY_MAXCOUNT * 2)
			piinfo->hz_found_cur -= LINE_DISPLAY_MAXCOUNT * 2;
		else 
			piinfo->hz_found_cur = piinfo->hz_found_begin;

		m_nSelectPos = (piinfo->hz_found_cur - piinfo->hz_found_begin) / 2;

		if (piinfo->keymode & IME_MODE_T9PY)
			_put_py_to_array();
		else if (piinfo->keymode & IME_MODE_T9BH)
			_put_bh_to_array();
		////else if (piinfo->keymode & IME_MODE_HANDWRITE)
		////	_put_bh_to_array();
	}
}

static void _proc_hz_keydown()
{
	ST_INPUT_INFO *piinfo = &m_piinfo;
	if (piinfo->outcode_cur == 0) {
		if (m_bHZAssn)
		{
			if (m_assn_Hz_Pos + LINE_DISPLAY_MAXCOUNT < g_pstAssnArray[m_nAssnSelectIndex].nCounts) 
			{
				m_assn_Hz_Pos += LINE_DISPLAY_MAXCOUNT;
				m_nSelectPos = m_assn_Hz_Pos;
			}

			_put_assn_to_array();
		}
		else
		{
			if (m_often_Hz_Pos + LINE_DISPLAY_MAXCOUNT < OFTEN_COUNT) 
			{
				m_often_Hz_Pos += LINE_DISPLAY_MAXCOUNT;
				m_nSelectPos = m_often_Hz_Pos;
			}

			_put_often_to_array();
		}
	}
	else
	{
		if(piinfo->hz_found_begin == piinfo->hz_found_end)
			return;

		if((piinfo->hz_found_end - piinfo->hz_found_cur) > LINE_DISPLAY_MAXCOUNT * 2)
		{
			piinfo->hz_found_cur += LINE_DISPLAY_MAXCOUNT * 2;
			m_nSelectPos = (piinfo->hz_found_cur - piinfo->hz_found_begin) / 2;
		}

		if (piinfo->keymode & IME_MODE_T9PY)
			_put_py_to_array();
		else if (piinfo->keymode & IME_MODE_T9BH)
			_put_bh_to_array();
		////else if (piinfo->keymode & IME_MODE_HANDWRITE)
		////	_put_bh_to_array();
	}
}

static void _proc_hz_keyleft()
{
	ST_INPUT_INFO *piinfo = &m_piinfo;
	m_nSelectPos = (m_nSelectPos == 0) ? 0 : m_nSelectPos - 1;

	if (piinfo->outcode_cur == 0) 
	{
		if (m_bHZAssn)
		{
			if (m_nSelectPos < m_assn_Hz_Pos)
				m_assn_Hz_Pos -= LINE_DISPLAY_MAXCOUNT;

			_put_assn_to_array();
		}
		else
		{
			if (m_nSelectPos < m_often_Hz_Pos)
				m_often_Hz_Pos -= LINE_DISPLAY_MAXCOUNT;

			_put_often_to_array();
		}
	}
	else
	{
		if(piinfo->hz_found_begin == piinfo->hz_found_end)
			return;

		if(m_nSelectPos < (piinfo->hz_found_cur - piinfo->hz_found_begin) / 2)
			piinfo->hz_found_cur -= LINE_DISPLAY_MAXCOUNT * 2;

		if (piinfo->keymode & IME_MODE_T9PY)
			_put_py_to_array();
		else if (piinfo->keymode & IME_MODE_T9BH)
			_put_bh_to_array();
		////else if (piinfo->keymode & IME_MODE_HANDWRITE)
		////	_put_bh_to_array();
	}
}

static BOOL _proc_hz_keyright()
{
	ST_INPUT_INFO *piinfo = &m_piinfo;
	m_nSelectPos++;
	if (piinfo->outcode_cur == 0) 
	{
		if (m_bHZAssn)
		{
			if (m_nSelectPos > g_pstAssnArray[m_nAssnSelectIndex].nCounts - 1)
				m_nSelectPos = g_pstAssnArray[m_nAssnSelectIndex].nCounts - 1;

			if (m_nSelectPos >= m_assn_Hz_Pos + LINE_DISPLAY_MAXCOUNT)
				m_assn_Hz_Pos += LINE_DISPLAY_MAXCOUNT;

			_put_assn_to_array();
		}
		else
		{
			if (m_nSelectPos > OFTEN_COUNT - 1)
				m_nSelectPos = OFTEN_COUNT - 1;

			if (m_nSelectPos >= m_often_Hz_Pos + LINE_DISPLAY_MAXCOUNT)
				m_often_Hz_Pos += LINE_DISPLAY_MAXCOUNT;

			_put_often_to_array();
		}
	}
	else
	{
		if(piinfo->hz_found_begin == piinfo->hz_found_end)
			return FALSE;

		if (m_nSelectPos >=(piinfo->hz_found_end - piinfo->hz_found_begin) / 2)
			m_nSelectPos = (piinfo->hz_found_end - piinfo->hz_found_begin) / 2 - 1;

		if(m_nSelectPos >= ((piinfo->hz_found_cur - piinfo->hz_found_begin) / 2) + 10)
			piinfo->hz_found_cur += LINE_DISPLAY_MAXCOUNT * 2;

		if (piinfo->keymode & IME_MODE_T9PY)
			_put_py_to_array();
		else if (piinfo->keymode & IME_MODE_T9BH)
			_put_bh_to_array();
		////else if (piinfo->keymode & IME_MODE_HANDWRITE)
		////	_put_bh_to_array();
	}
}

static BOOL _proc_hz_key_press(unsigned short key)
{
	ST_INPUT_INFO *piinfo = &m_piinfo;
	if (piinfo->keymode & IME_MODE_T9PY)
	{
		if (_proc_py_key_press(key) == TRUE)
			return 1;
	}
	else if (piinfo->keymode & IME_MODE_T9BH)
	{
		if (_proc_bh_key_press(key) == TRUE)
			return 1;
	}
	else if (piinfo->keymode & IME_MODE_HANDWRITE)
	{
		if (_proc_hw_key_press(key) == TRUE)
			return 1;
	}

	switch(key)
	{
	//case KEY_XING:
	//	{
	//		_Backspace();			
	//		return 1;
	//	}
	//	break;
	case KEY_UP:
		_proc_hz_keyup();
		break;
	case KEY_DOWN:
		_proc_hz_keydown();
		break;
	case KEY_LEFT:
		_proc_hz_keyleft();
		break;
	case KEY_RIGHT:
		_proc_hz_keyright();
		break;
	case KEY_RFUNC:
		if (piinfo->outcode_cur == 0)	// || piinfo->outcode_cur == 100 /* =100 为手写输入 */)
			PostMessage(g_hImeWnd, MSG_IME_CLOSE, 0, 0);

		break;
	default:
		return FALSE;
	}

	return TRUE;
}

//////////////////////////////////////////////////////////////////////////
static BOOL _proc_keydown(int nCharKey)
{
	if ( m_piinfo.keymode & IME_MODE_T9PY
		|| m_piinfo.keymode & IME_MODE_T9BH
		|| m_piinfo.keymode & IME_MODE_HANDWRITE
		) 
	{
		if (_proc_hz_key_press(nCharKey) == TRUE)
		{
			InvalidateRect (g_hImeWnd, NULL, TRUE);
			return 1;
		}
		else
		{
			if (nCharKey == KEY_0)
			{
				nCharKey = ' ';
				_PostChar2Edit((char*)&nCharKey, 1);
				return 1;
			}
		}
	}
	else if ( (m_piinfo.keymode & IME_MODE_ALPHABET_LOW) || (m_piinfo.keymode & IME_MODE_ALPHABET_UP) )
	{
		unsigned char sChars = _proc_en_key_press(nCharKey);
		if (sChars > 0)
			_PostChar2Edit((char *)&sChars, 1);
		else
		{
			if (nCharKey == KEY_0)
			{
				nCharKey = ' ';
				_PostChar2Edit((char*)&nCharKey, 1);
				return 1;
			}
			else if (nCharKey == KEY_RFUNC)
			{
				PostMessage(g_hImeWnd, MSG_IME_CLOSE, 0, 0);
				return 1;
			}
		}

	}
	else if (m_piinfo.keymode & IME_MODE_NUMBER)
	{
		if (nCharKey >= KEY_0 && nCharKey <= KEY_9)
		{
			_PostChar2Edit((char*)&nCharKey, 1);
			return 1;
		}
		//else if (nCharKey == KEY_XING)
		//{
		//	_Backspace();			
		//	return 1;
		//}
		else if (nCharKey == KEY_RFUNC)
		{
			PostMessage(g_hImeWnd, MSG_IME_CLOSE, 0, 0);
			return 1;
		}
	}
	else if (m_piinfo.keymode & IME_MODE_SYMBOL)
	{
		switch(nCharKey)
		{
		//case KEY_XING:
		//	_Backspace();			
		//	return 1;
		//	break;
		case KEY_RFUNC:
			PostMessage(g_hImeWnd, MSG_IME_CLOSE, 0, 0);
			return 1;
			break;
		case KEY_0:
			nCharKey = ' ';
			_PostChar2Edit((char*)&nCharKey, 1);
			return 1;
			break;
/*
		case KEY_1:
		case KEY_2:
		case KEY_3:
		case KEY_4:
		case KEY_5:
		case KEY_6:
		case KEY_7:
		case KEY_8:
		case KEY_9:
			m_nSelectPos = (m_nSymbolPage * LINE_DISPLAY_MAXCOUNT) + nCharKey -  KEY_1;
			nCharKey = KEY_LFUNC;
			//_PostChar2Edit((char*)&nCharKey, 1);
			//return 1;
			break;
*/
		default:
			break;
		}
	}

	InvalidateRect (g_hImeWnd, NULL, TRUE);

	switch(nCharKey)
	{
	case KEY_1:
		if (!(m_piinfo.keymode & IME_MODE_NUMBER))
		{
			if (_GetModeEnable(IME_MODE_SYMBOL))
			{
				_SwitchVariable();
				m_bHZAssn = FALSE;
				m_piinfo.keymode = IME_MODE_SYMBOL;
			}
		}

		break;
	case KEY_LFUNC:
		if (m_piinfo.keymode & IME_MODE_ALPHABET_UP || m_piinfo.keymode & IME_MODE_ALPHABET_LOW)
		{
			char cAlphabet = _proc_en_key_press(0);
			_PostChar2Edit((char*)&(cAlphabet), 1);
		}
		else if (m_piinfo.keymode & IME_MODE_SYMBOL) 
		{
			_PostChar2Edit((char*)&(array_symbol [m_nSelectPos]), 1);
			m_nSymbolPage = 0;
			m_nSelectPos = 0;
		}
		else if ( (m_piinfo.keymode & IME_MODE_T9PY) || (m_piinfo.keymode & IME_MODE_T9BH) 
			|| (m_piinfo.keymode & IME_MODE_HANDWRITE) )
		{
			_PostChar2Edit((char*)&(key_arrary_hz_select[m_nSelectPos % LINE_DISPLAY_MAXCOUNT]), 2);
			_SwitchVariable();
		}
		break;
	case KEY_UP:
		if (m_piinfo.keymode & IME_MODE_SYMBOL) 
		{
			m_nSymbolPage--;
			if (m_nSymbolPage < 0) 
				m_nSymbolPage = 0;
			else
				m_nSelectPos -= LINE_DISPLAY_MAXCOUNT;
		}
		break;
	case KEY_DOWN:
		if (m_piinfo.keymode & IME_MODE_SYMBOL) 
		{
			int k = sizeof(array_symbol) / LINE_DISPLAY_MAXCOUNT;
			m_nSymbolPage++;
			if (m_nSymbolPage > k) 
				m_nSymbolPage = k;
			else
				m_nSelectPos += LINE_DISPLAY_MAXCOUNT;
		}
		break;
	case KEY_LEFT:
		if (m_piinfo.keymode & IME_MODE_SYMBOL) {
			m_nSelectPos = (m_nSelectPos == 0) ? 0 : m_nSelectPos - 1;

			if (m_nSelectPos < m_nSymbolPage * LINE_DISPLAY_MAXCOUNT) {
				m_nSymbolPage --;
			}
		}
		break;
	case KEY_RIGHT:
		if (m_piinfo.keymode & IME_MODE_SYMBOL) 
		{
			m_nSelectPos ++;
			if (m_nSelectPos > sizeof(array_symbol) - 1)
			{
				m_nSelectPos = sizeof(array_symbol) - 1;
			}
			if (m_nSelectPos > (m_nSymbolPage + 1) * LINE_DISPLAY_MAXCOUNT -1) {
				m_nSymbolPage ++;
			}
		}
		break;
		////#ifdef IME_HANDWRITE_ENABLE
		////		case XM_POINTERDOWN:
		////			if (m_piinfo.keymode & IME_MODE_HANDWRITE)
		////			{
		////				m_bHWSelect = FALSE;
		////				return 1;
		////			}
		////			break;
		////		case KEY_XING:
		////			if (m_piinfo.keymode & IME_MODE_HANDWRITE)
		////			{
		////				g_nHWHZCount = 0;
		////			}
		////			break;
		////#endif
	case KEY_JING:
		_SwitchVariable();
		m_piinfo.keymode = _GetNextMode(m_piinfo.keymode);
		if ( m_piinfo.keymode & IME_MODE_T9PY
			|| m_piinfo.keymode & IME_MODE_T9BH
			|| m_piinfo.keymode & IME_MODE_HANDWRITE
			) 
		{
			m_bHZAssn = FALSE;
			_put_often_to_array();
		}
		break;

	default:
		return 0;
	}
	return 1;
}

static void _refresh_input_method_area(HWND hwnd, HDC hDC)
{
	RECT rc;
	GetClientRect (hwnd, &rc);

	if (m_piinfo.keymode & IME_MODE_HANDWRITE)
	{
		DisabledTextOutEx (hDC, hwnd, METHODAREA_XPOS, METHODAREA_YPOS, "【手】");
		//if (!GetHWSelect())
		//{
		//	//Show_HWInput_page(g_hImeWnd);
		//}	
		_Draw_Select_HZ(hDC);
	}
	else if (m_piinfo.keymode & IME_MODE_T9PY)
	{
		DisabledTextOutEx (hDC, hwnd, METHODAREA_XPOS, METHODAREA_YPOS, "【拼】");
		_XorPyList(hDC);
		_Draw_Select_HZ(hDC);	
	}
	else if (m_piinfo.keymode & IME_MODE_T9BH)
	{
		DisabledTextOutEx (hDC, hwnd, METHODAREA_XPOS, METHODAREA_YPOS, "【笔】");
		_XorBhList(hDC);	
		_Draw_Select_HZ(hDC);
	}
	else if (m_piinfo.keymode & IME_MODE_ALPHABET_UP)
	{
		DisabledTextOutEx (hDC, hwnd, METHODAREA_XPOS, METHODAREA_YPOS, "【EN】");
		_Draw_EN_AlphaList(hDC);
	}
	else if (m_piinfo.keymode & IME_MODE_ALPHABET_LOW)
	{
		DisabledTextOutEx (hDC, hwnd, METHODAREA_XPOS, METHODAREA_YPOS, "【en】");
		_Draw_EN_AlphaList(hDC);
	}
	else if (m_piinfo.keymode & IME_MODE_NUMBER)
	{
		DisabledTextOutEx (hDC, hwnd, METHODAREA_XPOS, METHODAREA_YPOS, "【数】");
	}
	else if (m_piinfo.keymode & IME_MODE_SYMBOL)
	{
		DisabledTextOutEx (hDC, hwnd, METHODAREA_XPOS, METHODAREA_YPOS, "【符】");
		_DrawSymbolKeyPad(hDC);
	}
}

int JYInputWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
	//...
	HDC hdc;

⌨️ 快捷键说明

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