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

📄 setcontrol.h

📁 主要实现T9输入法功能!自已开发,并修正6万多汉字及使用频率,单键切换输入法,输入类型分为:英文,数字,T9拼音,常用符号等!
💻 H
字号:
#pragma once

#include<ctype.h>

// CControl 对话框

class CControl : public CStatic
{
public:
	//CWnd* pWnd;
	//CDC* pControlDC; //表示控件窗口的设备描述表.DC 

//	CColorStatic * m_Static[10];

	CStatic * m_Static[10];
	CString m_sChiWord[255];
	CString m_sEngWord[40];
	CString m_sShowWord[8];

	CRect m_rControl;
	CRect m_rt[12];
	CFont * m_pFont;
	int m_iQC;
	int m_iShowNum;
	int m_iWordNum;

	bool m_bIsShow; //保存控件显示状态

public:
	CControl(void);   // 标准构造函数
	~CControl(void);



	bool InitCStatic(CRect *rt, CWnd *pParent); //初始化CStatic
	void ShowCStatic(void);
	void HideCStatic(void);
	void DelData(void); //清空数据
	void SetChiData(CString str); //设置CStatic控件的汉字显示
	void SetEngData(CString str); //设置CStatic控件的英文显示
	void SetFHData(CString str); //设置CStatic控件的符号显示

	bool CheckABC(CString str); //检测是否为英文字母

	CRect GetControlRect(void); //返回控件大小
	CString SelectData(CPoint point,UINT type); //返回点击的数据
	void PageUp(UINT type);
	void PageDown(UINT type);
};


// SetControl.cpp : 实现文件
//


// CControl 对话框
CControl::CControl(void)
{
	m_iQC = 0;
	m_iShowNum = 8;
	m_iWordNum = 0;

	m_bIsShow = false;

	for(int i=0;i<10;i++)
	{
		m_sChiWord[i].Empty();
	}
	m_pFont = new CFont;
	
	m_pFont->CreateFont(18,0,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,_T("arial"));
}

CControl::~CControl()
{
}

/*
CControl::OnPaint()
{
	CClientDC* cdc;
	
	CRect rect;
	GetClientRect(&rect);


	//CFont *pFont=GetParent()->GetFont();	//获取主窗口的字体
	CFont *pOldFont;
	pOldFont=dc.SelectObject(m_pFont);

	dc.SetTextColor(RGB(0,130,255));

	CString strCaption;
	this->GetWindowText(strCaption);		//获取窗口文本

	dc.DrawText(strCaption,&rect,DT_CENTER);

	dc.SelectObject(pOldFont);
}
*/

bool CControl::InitCStatic(CRect *rt,CWnd *pParent)
{
	int num = rt->right/10;
	int right = 0;
	
	for(int i=0;i<10;i++)
	{
		m_rt[i].left = num * i + rt->left;
		m_rt[i].top = rt->top;
		m_rt[i].right = num + m_rt[i].left;
		m_rt[i].bottom = 20 + m_rt[i].top;



//		m_Static[i] = new CColorStatic();

//		if(!m_Static[i]->Create(_T(""),WS_CHILD|WS_VISIBLE|/*WS_BORDER|*/SS_CENTER,m_rt[i],pParent,i + 1000))
//		{
//			return false;
//		}
		//if(i == 0)
		//{
		//	m_Static[i]->SetWindowText("<");
		//}
		//if(i == 9)
		//{
		//	m_Static[i]->SetWindowText(">");
		//}

//		m_Static[i]->SetTextColor(RGB(0,130,255));
//		m_Static[i]->SetWindowText(_T(""));

		//m_Static[i]->ShowWindow(SW_HIDE);


		m_Static[i] = new CStatic;
		if(!m_Static[i]->Create(_T(""),WS_CHILD|WS_VISIBLE|/*WS_BORDER|*/SS_CENTER,m_rt[i],pParent,i))
		{
			return false;
		}

		m_Static[i]->SetFont(m_pFont);	
		//
		m_Static[i]->SetWindowText(_T(""));

		//if(i == 0)
		//{
		//	m_Static[i]->SetWindowText("<");
		//	//HICON hicon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
		//	//m_Static[i]->SetIcon(hicon);
		//}
		//if(i == 9)
		//{
		//	m_Static[i]->SetWindowText(">");
		//}

		m_Static[i]->ShowWindow(SW_HIDE);


		right += m_rt[i].right;
	}

	//m_bIsShow = true;


	m_rControl.left = m_rt[0].left;
	m_rControl.top = m_rt[0].top;
	m_rControl.right = right;
	m_rControl.bottom = m_rt[0].bottom;

	return true;
}

void CControl::ShowCStatic(void)
{
	m_bIsShow = true;
	for(int i=0;i<10;i++)
	{
		m_Static[i]->ShowWindow(SW_SHOW);

	}
}

void CControl::HideCStatic(void)
{
	m_bIsShow = false;
	for(int i=0;i<10;i++)
	{
		m_Static[i]->ShowWindow(SW_HIDE);
	}
}

void CControl::DelData(void)
{
	for(int i=0;i<255;i++)
	{
		if(i>0 && i<9)
		{
			m_Static[i]->SetWindowText(_T(""));
		}
		if(i<9)
		{
			m_sEngWord[i].Empty();
		}
		m_sChiWord[i].Empty();
	}
}

void CControl::SetFHData(CString str)
{
	m_iQC = 0; //显示符号起始值初始化
	
	m_bIsShow = true;

	m_iWordNum = str.GetLength();
	int index = m_iWordNum;
	if(index < 10)
	{
		index = 10;
	}
	
	for(int i=m_iQC;i<index;i++)
	{
		m_sChiWord[i] = str.Mid(i,1);
		m_sEngWord[i] = m_sChiWord[i];

		if(i<10)
		{
			if(i == 0)
			{
				m_Static[i]->SetWindowText(_T("<"));
			}
			if(i>0 && i < 9)
			{
				m_sShowWord[i-1] = m_sChiWord[i-1];
				m_Static[i]->SetWindowText(m_sShowWord[i-1]);
			}
			if(i == 9)
			{
				m_Static[i]->SetWindowText(_T(">"));
			}
			m_Static[i]->ShowWindow(SW_SHOW);
		}
	}
}

void CControl::SetEngData(CString str)
{
	m_iQC = 0; //显示汉字起始值初始化
	m_bIsShow = true;

	int index = 0;
	int count = str.GetLength();
	
	for(int i=0;i<10;i++)
	{
		
		if(i == 0)
		{
			m_Static[i]->SetWindowText(_T("<"));
		}
		if(i > 0 && i < count + 1)
		{
			m_sEngWord[index] = str.Mid(i-1,1);
			int num = m_sEngWord[index].GetLength();
			WCHAR *chTemp = m_sEngWord[index].GetBuffer(num);
			WCHAR chBig = *chTemp + 'A' - 'a'; //转小写字母为大写字母
			m_sEngWord[i-1].ReleaseBuffer();
			m_sEngWord[index + 1] = chBig;
			index += 2;
		}
		if(i > 0 && i < count * 2 + 1)
		{
			
			m_sShowWord[i-1] = m_sEngWord[i-1];
			m_Static[i]->SetWindowText(m_sShowWord[i-1]);

		}
		if(i == 9)
		{
			m_Static[i]->SetWindowText(_T(">"));
		}
		m_Static[i]->ShowWindow(SW_SHOW);
	}

}

void CControl::SetChiData(CString str)
{	
	m_iQC = 0; //显示汉字起始值初始化

	m_iWordNum = str.GetLength();


	int index = m_iWordNum;
	if(index < 10)
	{
		index = 10;
	}
	
	for(int i=m_iQC;i<index;i++)
	{
		if(i > m_iWordNum)
		{
			break;
		}
		m_sChiWord[i] = str.Mid(i,1);
		
		if(i == 0)
		{
			m_Static[i]->SetWindowText(_T("<"));
		}
		if(i>0 && i < 9)
		{
			m_sShowWord[i-1] = m_sChiWord[i-1];
			m_Static[i]->SetWindowText(m_sShowWord[i-1]);
		}
		if(i == 9)
		{
			m_Static[i]->SetWindowText(_T(">"));
		}
	}
}

void CControl::PageUp(UINT type)
{
	m_iQC -= 8;
	if(m_iQC < 0)
	{
		m_iQC += 8;
		//AfxMessageBox("已至起始页");
		return;
	}
	for(int i=0;i<10;i++)
	{
		if(i<8)
		{
			m_Static[i+1]->SetWindowText(m_sChiWord[i+m_iQC]);
		}
	}
}

void CControl::PageDown(UINT type)
{
	if(type == 1) //当输入为英文字母时,因不足二页,禁止翻页;
	{
		if(CheckABC(m_sEngWord[0]))
		{
			return ;
		}
	}

	m_iQC += 8;
	if(m_iQC >= m_iWordNum)
	{
		m_iQC -= 8;
		//AfxMessageBox("已至尾页");
		return;
	}
	for(int i=0;i<10;i++)
	{
		if(i<8)
		{
			m_Static[i+1]->SetWindowText(m_sChiWord[i+m_iQC]);
		}
	}
}

CRect CControl::GetControlRect(void)
{
	return m_rControl;
}

CString CControl::SelectData(CPoint point,UINT type)
{
	CString strData = _T("");
	for(int i=0;i<10;i++)
	{
		if(point.x > m_rt[i].left && point.y > m_rt[i].top && point.x < m_rt[i].right && point.y < m_rt[i].bottom)
		{
			if(i>0 && i<9)
			{
				if(type == 2)
				{
					strData = m_sChiWord[i-1+m_iQC];
					return strData;
				}
				if(type == 1)
				{
					if(CheckABC(m_sEngWord[i-1+m_iQC]))
					{
						strData = m_sEngWord[i-1+m_iQC];
						return strData;
					}
					if(!CheckABC(m_sEngWord[0]))
					{
						strData = m_sEngWord[i-1+m_iQC];
						return strData;
					}
				}
				if(type == 0)
				{
					strData = m_sEngWord[i-1+m_iQC];
					return strData;
				}
			}
			if(i == 0)
			{
				PageUp(type);
			}
			if(i == 9)
			{
				PageDown(type);
			}
			return strData;
		}
	}
	return strData;
}

bool CControl::CheckABC(CString str)
{
	int num = str.GetLength();
	WCHAR* chTemp = str.GetBuffer(num + 1);
	WCHAR temp = *chTemp;
	if(islower(temp) || isupper(temp))
	{
		str.ReleaseBuffer();
		return true;
	}
	str.ReleaseBuffer();
	return false;
}


⌨️ 快捷键说明

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