zoukankan      html  css  js  c++  java
  • 利用自定义消息处理函数的WPARAM或LPARAM参数传递指针

    有自定义消息:


    #define WM_TEST WM_USER+121
     消息处理函数:


    afx_msg void OnTest(WPARAM wParam,LPARAM lParam); 该消息是一个主线程向辅助线程发送数据的消息。
    主线程中发送消息的代码:


           m_param.pDoc=pDoc;
        m_param.pSpecAnlyz=m_pSpecAnlyz;
        
    //    CWinThread* pThread=AfxBeginThread(ThreadTest,static_cast<LPVOID>(&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。在VC.NET2005中,直接转换编译报错。考虑到void * 之后,先将&m_param转化为void*指针,然后才可以进一步强制转化为WPARAM。

    同样的,在OnTest中,必须先将wParam强制转换为void * ,然后进一步转换为其他类型。

    PS:网上有高手指出,局部指针变量最好不要作为wParam或 lParam传递,因为当消息响应时改变量可能已经不在了

  • 相关阅读:
    Symmetric Order
    Red and Black
    Sticks(递归经典)
    Pascal Library
    cantor的数表
    OJ 调试技巧:VS2010 中 通过设置编译参数定义宏,无需修改源文件重定向标准输入输出
    strcmp
    最短周期串
    字母重排
    codeblocks 单步调试
  • 原文地址:https://www.cnblogs.com/xingrun/p/3464452.html
Copyright © 2011-2022 走看看