MFC 线程中发送自定义消息
程序员文章站
2022-06-11 21:08:03
...
消息
Windows的消息机制非常强大,在Windows中发生的一切都可以用消息来表示,任意应用程序之间都可以发消息,消息用于告诉操作系统发生了什么,所有的Windows应用程序都是消息驱动的。想要详细地掌握其中的奥秘需要花费大量的时间(本人至今已经花了不少时间来熟悉这一套机制,除非你天赋异禀)
重点
如果你是个新手
对VC还不是很熟练,那就好好记住接下来介绍的一套流程,会在以后的编程中经常用到
本人所在公司做的一个手写板,现在要写一个DEMO展示,其中有一个线程在读USB的数据(点坐标),然后发送消息画图;
首先在头文件中定义消息号
#define WM_UARTDATA (WM_USER+100)
同样在头文件中定义消息函数
afx_msg LRESULT OnUartData(WPARAM w, LPARAM l);
在消息映射表(BEGIN_MESSAGE_MAP(XXXXXDlg, CDialogEx))中
ON_MESSAGE(WM_UARTDATA, &CUSB_HID_TestDlg::OnUartData)
来看线程函数
Sendmessage和Postmessage的区别在这就不多说了
注意看Sendmessage的参数
UINT ReadHidData(LPVOID lpParam)
{
threadInfo *pInfo=(threadInfo *)lpParam;
CWnd *pWnd = pInfo->pWnd;
ULONG Result;
int InputReportLength = Capabilities.InputReportByteLength;
BOOL DeviceDetected = TRUE;
DWORD bRead;
bRead = 0;
gThreadFlag = true;
while(gThreadFlag)
{
if(HIDReadHandle)
{
Result=ReadFile(HIDReadHandle, InputReport, InputReportLength, &bRead, NULL);//WrieFile ReadFile 使用同一个HANDLE
int error=GetLastError();
SendMessage(pWnd->m_hWnd, WM_UARTDATA, (WPARAM)InputReport, (LPARAM)InputReportLength);
//BOOLEAN flag = HidD_SetOutputReport( HIDReadHandle, InputReport,InputReportLength);
}
Sleep(0);
}
return 0;
}
在消息函数中进行画图
LRESULT CUSB_HID_TestDlg::OnUartData(WPARAM w, LPARAM l)
{
BYTE *pData=(BYTE *)w;
int nLength=l;
//对数据进行UI处理;
}
效果图
最后给大家看一下效果图
很多人问我笔迹怎么处理的,笔迹处理是公司核心,不外传。