第三个参数的类型应该为WPARAM。可采用如下:
pWnd->SendMessage(WM_COMMAND,IDX,(WPARAM)num);

解决方案 »

  1.   

    参数是没有问题的,和msdn上写的一个样,所以也是我的纳闷的地方啊。
      

  2.   

    你看看
    CWnd *pWnd=AfxGetMainWnd();
    ASSERT(pWnd);//看看这一行会不会通过
      

  3.   

    看看处理消息的地方,因为SendMessage()一定要返回后才能往下执行.
    或者改用PostMessage()试试,
      

  4.   

    debug在SendMessage这里就打住了
    而且ASSERT(pWnd)可以通过
      

  5.   

    更正:
    ASSERT(pWnd)不能通过,这是什么原因?
    小弟才疏学浅,唉~~~
      

  6.   

    是基于对话框的程序吗?是在线程里SENDMESSAGE吗?
      

  7.   

    大概结构是
    CTreeView::OnSelChanged(~~~)
    {
      CWnd* pWnd=AfxGetMainWnd();
      pWnd->SendMessage(WM_COMMAND,IDX,(long)num);
      .
      .
      .
      if( ...)
    {
     pWnd->SendMessage(...);
     return;
    };
      if(...)
    {
     pWnd->SendMessage(...);
     return;
    };总之有很多if语句,不过前面几个SendMessage()都可以成功。
    到了其中一个就不可以了。
      

  8.   

    你的num原来是什么类型的,为什么要强制转换成long呢?我的意见是你强制转换成WPARAM。
      

  9.   

    哈哈,我知道了。希望大家给与评论。
    SendMessage必须要等处理结束后才能返回,如果处理不正确就可能导致错误,看起来象消息发送失败。
    而且带两个参数的WM_COMMAND必须通过重载CWnd::OnCommand()才能实现影射。否则最后一个参数必须是0(默认)才不会出错。
    不知道我的理解对否,希望大家给予评论