通过MFC窗口获取方向键


1、启动时,从配置文件中读取上次保存的方向键键值,并将这些配置显示到窗口中

(1)从配置文件中读取方向键,并将其显示到窗口:

iCfgValue = GetPrivateProfileInt(_T("AppChoice"),_T("iCommandU"),0,filePath);//从配置文件中读取方向键的值
if (!_IsDirectionKey(iCfgValue,m_csStyleUp))//判断该键值是否为方向键
    m_csStyleUp.Format(_T("%c"),iCfgValue);	
SetDlgItemText(IDC_EDT_UP,m_csStyleUp);//将键值显示到窗口
(2)判断键值是否为方向键的函数:

_IsDirectionKey(int iKeyValue, CString& sDirectionValue)
{
	if(VK_UP== iKeyValue)
	{
		sDirectionValue = UP_DIRECTION_KEY_TYPE;
		return true;
	}
	if( VK_DOWN== iKeyValue)
	{
		sDirectionValue = DOWN_DIRECTION_KEY_TYPE;
		return true;
	}
	if( VK_LEFT== iKeyValue)
	{
		sDirectionValue = LEFT_DIRECTION_KEY_TYPE;
		return true;
	}
	if( VK_RIGHT== iKeyValue)
	{
		sDirectionValue = RIGHT_DIRECTION_KEY_TYPE;
		return true;
	}
	return false;
}
上述宏为自定义,如下所示:

const CString UP_DIRECTION_KEY_TYPE = _T("上");
const CString DOWN_DIRECTION_KEY_TYPE = _T("下");
const CString LEFT_DIRECTION_KEY_TYPE = _T("左");
const CString RIGHT_DIRECTION_KEY_TYPE = _T("右");

2、通过MFC窗口获取方向键,并保存方向键的键值,

(1)添加override函数PreTranslateMessage,并在该函数中响应用户实际输入的键值:

BOOL CDebugerDlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: Add your specialized code here and/or call the base class
	if (WM_KEYDOWN == pMsg->message)
	{
		CWnd* pw = CWnd::GetFocus();
		if ((GetDlgItem(IDC_EDT_UP) == pw)&&(VK_UP==pMsg->wParam))
		{
			m_csStyleUp.Format(_T("%c"),VK_UP);
			SetDlgItemText(IDC_EDT_UP,UP_DIRECTION_KEY_TYPE);
		}
		if ((GetDlgItem(IDC_EDT_DOWN) == pw)&&(VK_DOWN==pMsg->wParam))
		{
			m_csStyleDown.Format(_T("%c"),VK_DOWN);
			SetDlgItemText(IDC_EDT_DOWN,DOWN_DIRECTION_KEY_TYPE);
		}
		if ((GetDlgItem(IDC_EDT_LEFT) == pw)&&(VK_LEFT==pMsg->wParam))
		{
			m_csStyLeft.Format(_T("%c"),VK_LEFT);
			SetDlgItemText(IDC_EDT_LEFT,LEFT_DIRECTION_KEY_TYPE);
		}
		if ((GetDlgItem(IDC_EDT_RIGHT) == pw)&&(VK_RIGHT==pMsg->wParam))
		{
			m_csStyRight.Format(_T("%c"),VK_RIGHT);
			SetDlgItemText(IDC_EDT_RIGHT,RIGHT_DIRECTION_KEY_TYPE);
		}
	}

	return CDialog::PreTranslateMessage(pMsg);
}

如果用户输入了向上的方向键,则在对应的EDIT控件中显示“上”


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值