📄 keypadtestdlg.cpp
字号:
// keypadtestDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "keypadtest.h"
#include "keypadtestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
HANDLE hDevice,m_pdthread;
void WINAPI SuspendDectedThread(void);
// CkeypadtestDlg 对话框
CkeypadtestDlg::CkeypadtestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CkeypadtestDlg::IDD, pParent)
, key(0)
, keychar(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CkeypadtestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CkeypadtestDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
ON_WM_CHAR()
// ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CkeypadtestDlg::OnBnClickedButton1)
// ON_WM_KEYDOWN()
ON_WM_KEYDOWN()
ON_BN_CLICKED(IDC_BUTTON2, &CkeypadtestDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CkeypadtestDlg::OnBnClickedButton3)
END_MESSAGE_MAP()
// CkeypadtestDlg 消息处理程序
BOOL CkeypadtestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
hDevice=CreateFile(L"PMC1:", GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
m_pdthread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SuspendDectedThread,NULL, 0, NULL);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CkeypadtestDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_KEYPADTEST_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_KEYPADTEST_DIALOG));
}
}
#endif
void CkeypadtestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
char outbuff1[50],outbuff2[50];
int nLen,nwLen;
TCHAR lpszFile1[256],lpszFile2[256];
DWORD buffsize1,buffsize2;
buffsize1=buffsize2=0;
DeviceIoControl(hDevice,20,NULL,NULL,outbuff1,buffsize1,NULL,NULL);
DeviceIoControl(hDevice,21,NULL,NULL,outbuff2,buffsize2,NULL,NULL);
//printf("software:%s,hardware:%s\r\n",outbuff1,outbuff2);
CString buff1;
nLen = strlen(outbuff1) + 1;
nwLen = MultiByteToWideChar(CP_ACP, 0, outbuff1, nLen, NULL, 0);
MultiByteToWideChar(CP_ACP, 0, outbuff1, nLen, lpszFile1, nwLen);
nLen = strlen(outbuff2) + 1;
nwLen = MultiByteToWideChar(CP_ACP, 0, outbuff2, nLen, NULL, 0);
MultiByteToWideChar(CP_ACP, 0, outbuff2, nLen, lpszFile2, nwLen);
buff1.Format(L"%s %s",lpszFile1,lpszFile2);
MessageBox(buff1);
}
//get key char
void CkeypadtestDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
RETAILMSG(1, (TEXT("get key char=%x\n"),nChar));
key=nChar;
UpdateData(FALSE);
}
//void CkeypadtestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
//{
//
// RETAILMSG(1, (TEXT("get key char=%x\n"),nChar));
// key=nChar;
// UpdateData(FALSE);
//}
//void CkeypadtestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
//{
// // TODO: 在此添加消息处理程序代码和/或调用默认值
// RETAILMSG(1, (TEXT("get key char=%x\n"),nChar));
// key=nChar;
// UpdateData(FALSE);
// CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
//
//
//}
void CkeypadtestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
BOOL CkeypadtestDlg::PreTranslateMessage(MSG* pMsg)
{
CString tmp;
if(pMsg->message == WM_KEYDOWN)
{
//或者直接调用OnKeyDown
RETAILMSG(1, (TEXT("get key char=%x\n"),pMsg->wParam));
switch(pMsg->wParam)
{
case 0xA:
tmp="进纸";
break;
case 0x2A:
tmp="打印";
break;
case 0xB:
tmp="左键";
break;
case 0xE:
tmp="右键";
break;
case 0x70:
tmp="F1";
break;
case 0x71:
tmp="F2";
break;
case 0x72:
tmp="F3";
break;
case 0x73:
tmp="F4";
break;
case 0x26:
tmp="上";
break;
case 0x28:
tmp="下";
break;
case 0x25:
tmp="左";
break;
case 0x27:
tmp="右";
break;
case 0x21:
tmp="上一页";
break;
case 0x22:
tmp="下一页";
break;
case 0x24:
tmp="主页";
break;
case 0x1a:
tmp="输入法";
break;
case '1':
tmp="1";
break;
case '2':
tmp="2";
break;
case '3':
tmp="3";
break;
case '4':
tmp="4";
break;
case '5':
tmp="5";
break;
case '6':
tmp="6";
break;
case '7':
tmp="7";
break;
case '8':
tmp="8";
break;
case '9':
tmp="9";
break;
case '0':
tmp="0";
break;
case 0x6A:
tmp="*";
break;
case '#':
tmp="#";
break;
case 0x8:
tmp="删除";
break;
default :
tmp="未知";
break;
}
//tmp.Format(L"0x%x",pMsg->wParam);
//printf("%x \r\n",pMsg->wParam);
SetDlgItemText(IDC_EDIT1,tmp);
keychar=pMsg->wParam;
UpdateData(FALSE);
}
else if(pMsg->message == WM_KEYUP)
{
RETAILMSG(1, (TEXT("key char up =%x\n"),pMsg->wParam));
}
return CDialog::PreTranslateMessage(pMsg);
}
void WINAPI SuspendDectedThread()
{
UINT8 state;
while(1)
{
Sleep(1000);
// 查询IOControl来判断系统是否准备进入休眠
DeviceIoControl(hDevice,10,NULL,NULL,&state,sizeof(state),NULL,NULL);
if(state==2)
{
Sleep(100);
// 告诉OS APP已经处理完成了,可以进入休眠
DeviceIoControl(hDevice,11,NULL,NULL,NULL,NULL,NULL,NULL);
}
else if(state==3)
{
Sleep(100);
// 告诉OS APP已经查询完了。
DeviceIoControl(hDevice,12,NULL,NULL,NULL,NULL,NULL,NULL);
}
}
}
void CkeypadtestDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UCHAR data;
data=1;
//LED On
DeviceIoControl(hDevice,1,&data,sizeof(data),NULL,NULL,NULL,NULL);
}
void CkeypadtestDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
UCHAR data;
data=0;
//LED Off
DeviceIoControl(hDevice,1,&data,sizeof(data),NULL,NULL,NULL,NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -