利用自定义消息处理函数的WPARAM或LPARAM参数传递指针
2023年6月22日发(作者:)
利⽤⾃定义消息处理函数的WPARAM或LPARAM参数传递指针有⾃定义消息:#define WM_TEST WM_USER+121 消息处理函数:afx_msg void OnTest(WPARAM wParam,LPARAM lParam); 该消息是⼀个主线程向辅助线程发送数据的消息。主线程中发送消息的代码: m_=pDoc; m_nlyz=m_pSpecAnlyz;
// CWinThread* pThread=AfxBeginThread(ThreadTest,static_cast(&m_param)); m_pTestThread=(CTestThread*)AfxBeginThread(RUNTIME_CLASS(CTestThread)); Sleep(200); // 必须先把&m_param转化为void*指针,然后才可以进⼀步强制转化为WPARAM m_pTestThread->PostThreadMessageW(WM_TEST,(WPARAM)((void*)&m_param),1);// 发送测试消息 m_param为⾃定义类型,其成员为指针变量,因此 m_param⽆法强制转化为WPARAM。但是m_param的地址指针和WPARAM⼀样,都是4个字节,因此可以将m_param的地址指针起那个只转换为WPARAM。在2005中,直接转换编译报错。考虑到void * 之后,先将&m_param转化为void*指针,然后才可以进⼀步强制转化为WPARAM。同样的,在OnTest中,必须先将wParam强制转换为void * ,然后进⼀步转换为其他类型。PS:⽹上有⾼⼿指出,局部指针变量最好不要作为wParam或 lParam传递,因为当消息响应时改变量可能已经不在了。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687426917a9225.html
评论列表(0条)