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

📄 keypadtestdlg.cpp

📁 开发板测试用软件
💻 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 + -