我用#define 定义一个自定义的消息:WM_USER_APPLY
这是我定义的消息映射:ON_MESSAGE (WM_USER_APPLY, OnApply)对OnApply消息处理函数形式的声明,根据MSDN的说法,应该写成这种形式:
     afx_msg LRESULT OnApply(WPARAM, LPARAM);    我的问题:这两个参数WPARAM, LPARAM,应该是与自定义的消息有关的参数,可是它们含有什么信息呢?因为我见过一个例子程序的消息处理函数是这么用的:
     LRESULT CChildView::OnApply (WPARAM wParam, LPARAM lParam)
          RECTPROP* prp = (RECTPROP*)lParam;
          (RECTPROP为自定义结构类型)
    我不解的是,我怎么就知道参数lParam中就含用RECTPROP*的数据呢?而且我见到有的消息处理函数中wParam,lParam又都是0,这有什么规则吗?我在MSDN上也没有找到相关说明,你能告诉我吗?    

解决方案 »

  1.   

    因为自定义消息需要自己用SendMessage或PostMessage来调用
    你在SendMessage或PostMessage中传递的参数与你在OnApply中定义的
    参数相同就可以了。
    要记住:
    如果进程间传递消息,使用指针就不行了,因为进程是不能相互访问私有地址的
    如果是这样,需要定义共享内存。
      

  2.   

    像楼上说的一样,你应该在程序中去找RECTPROP的定义,
      

  3.   

    To.  楼上的broadoceans(broadoceans) 和 westfish_wu(吴情剑客) :
       我也知道自定义消息需要自己用SendMessage或PostMessage来调用,而且应该是m_wndChildView.SendMessage(WM_USER_APPLY,wParam,lParam),同样的道理,那我怎么知道wParam,lParam中含有什么数据呢? ,并且这些数据能为我所用呢?   
      

  4.   

    先定义一个消息;
    再ON_MESSAGE (WM_USER_APPLY, OnApply)
    再PostMessage(WM_USER_APPLY,NULL,NULL),或
    SendMessage(WM_USER_APPLY,NULL,NULL);来调用OnApply();
    这是最简单的用法,复杂的我也不清楚
      

  5.   

    你自己调用的你怎么不知道呢?
    数据是你自己写的,你还问我们wParam,lParam是什么数据?
    你调用的时候是什么数据就是什么数据
      

  6.   

    既然是自定义消息,那么当然消息的参数也是自定义的,即wParam和lParam可以根据自己的需要来定制,比如说对wParam解释为数据类型,lParam则就可以解释为对应不同的wParam时的数据了,这就是你的例子中把lParam解释为RECTPROP* prp的道理