在一个小工具制作过程中,需要响应按键的Down 、UP事件,并利用这些消息,通过串口分发。
int gms_key = KEY_NULL; //KEY_NULL 无按键动作
void CALLBACK MS_TimerKeySend(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
ClassA dlg;
dlg.Send_MSKey(gms_key);
}
BOOL ClassA::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
BOOL bDO = FALSE;
int buID;
buID = GetWindowLong(pMsg->hwnd,GWL_ID);//由窗口句柄获得ID号,GetWindowLong为获得窗口的ID号。
if (pMsg->message == WM_LBUTTONDOWN)
{
switch (buID)
{
case IDC_BUTTONENTER: //Button ID
bDO = TRUE;
gms_key = KEY_MENU; //每个button对应的键值
break;
case IDC_BUTTONUP:
bDO = TRUE;
gms_key = KEY_UP;
break;
case IDC_BUTTONDOWN:
bDO = TRUE;
gms_key = KEY_DOWN;
break;
case IDC_BUTTONCANCEL:
bDO = TRUE;
gms_key = KEY_CANCEL;
break;
default:
break;
}
if (bDO)
{
Send_MSKey((char)gms_key); //串口分发
SetTimer(KEY_TIMER_ID,KEY_SCAN_TIME,MS_TimerKeySend); //配置定时器,做些规律性的吧
}
}
if (pMsg->message == WM_LBUTTONUP)
{
switch (buID)
{
case IDC_BUTTONENTER:
case IDC_BUTTONUP:
case IDC_BUTTONDOWN:
case IDC_BUTTONCANCEL:
KillTimer(KEY_TIMER_ID);
gms_key = KEY_NULL;
Send_MSKey((char)gms_key);
Sleep(200);
Send_MSKey((char)gms_key);
break;
default:
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}