第一次接触手持机这东西,刚开始啥都不知道浪费了好几天,后来才发现很简单,和pc机上的开发是差不多的。
这次总结希望能给那些像我一样刚接触手持机的兄弟姐妹一点帮助。
我这项目是一个物联网的演示项目,分两部分,一部分是服务端,另一部分是客户端。
服务端我是用vc实现的,主要实现的是数据库的操作和信息显示。服务器的编程和我们平时弄一般的PC机程序是一样
客户端我是用C#实现的,只要把手持机用数据线连到PC机上就可以编程了, 功能可以用对RFID卡进行写数据,读数据,查看卡的个数,读取二维码。编译环境是vs2008,其中有对手持机的编程项目。
服务端和客户端的通信用socket实现。我实现的是多客户端对一服务端通信。
我具体说一下通信。因为是多对一通信,所以服务端用多线程实现。
创线程 :DWORD dwthreadID;
HANDLE Hnd;
Hnd = CreateThread(NULL, 0, ThreadLINK, (LPVOID)this, 0, &dwthreadID);
其中ThreadLINK是多线程实现函数。这函数一定是全局函数或者是类静态函数。
因为是多客户端,所以服务端监听部分实现多线程,之后再在接收数据上实现多线程,客户端和一对一通信一样,这样就OK了。
最后项目中还实现了物体的实时定位,并在屏幕上显示轨迹。
轨迹是通过在OnPaint()实现的画图操作:
void CServerDlg::OnPaint()
{……
else
{
CDialog::OnPaint();
//重绘图像
PAINTSTRUCT ps;
CRect rt[n];
CDC* pDC[n];
for(int i=0; i<n; i++)
{
m_pDrawWnd[i]->GetClientRect(&rt[i]);
pDC[i]=m_pDrawWnd[i]->BeginPaint(&ps);
DrawOnMen(i);
pDC[i]->BitBlt(0, 0, rt[i].Width(), rt[i].Height(), &m_memDC[i], 0, 0, SRCCOPY);
m_pDrawWnd[i]->EndPaint(&ps);
}
}
后在DrawOnMen()函数中的实现。
总结结论:手持机编程和PC机编程没什么大的区别。