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控件中显示“上”