例如CListCtrl中,下面的程序将模拟CListCtrl向父窗口发送LVN_ITEMCHANGED消息:NMHDR NMListView;
NMListView.hwndFrom=m_ListClient.GetSafeHwnd(); //列表框句柄
NMListView.idFrom=IDC_LIST_CLIENT; //列表框ID
NMListView.code=LVN_ITEMCHANGED; //消息
SendMessage(WM_NOTIFY,IDC_LIST_CLIENT,(LPARAM)&NMListView); //传入的是一个临时变量的指针上面的程序调试通过,不过我有一点不确定的地方,NMListView是个临时变量,在SendMessage函数返回后即被释放(假设SendMessage后面就是函数的结束符:}),这样windows再去取出消息的时候会不会出错?如果存放NMListView的内在被别的函数更改了怎么办?要不要把NMListView申明成类变量?

解决方案 »

  1.   

    SendMessage不会马上返回的,它要等到发送出去的消息被windows处理了以后才会返回。这一点与PostMessage正好相反。
      

  2.   

    嗯,所以栈里面的内容不会在SendMessage的时候被划为无效,这个指针在SendMessage里面是有效的。
      

  3.   

    SendMessage是可以使用临时变量的,它要等待处理函数返回,如果是PostMessage就不可以了,它只是把消息抛到队列,马上就返回,等到消息响应函数调用的时候可能临时变量已经销毁了
      

  4.   

    SendMessage发送消息后,会等待处理的返回的,不需要担心