欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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处理;
}

效果图

最后给大家看一下效果图
MFC 线程中发送自定义消息
很多人问我笔迹怎么处理的,笔迹处理是公司核心,不外传。