我在一个CDockablePane上重载了一个Dialog,当此CDockablePane没有浮动的时候Dialog是可以收到我发送的自定义消息的,但是当CDockablePane浮动的时候,Dialog就收不到消息了,请问是什么原因啊,如何解决?

解决方案 »

  1.   

    我发的消息是这样的:
    if (IsWindow( AfxGetApp()->m_pMainWnd->GetSafeHwnd() ))
    AfxGetApp()->m_pMainWnd->SendMessageToDescendants(MSGTD_MYMESSAGE, (WPARAM)(pInfo), (LPARAM)(pInfo) );
    有人帮忙吗?
      

  2.   

    你的消息是发给了m_pMainWnd吧???应该发给你浮动窗口啊
      

  3.   

    SendMessageToDescendants发送消息方式,MSDN中这么说的:Call this member function to send the specified Windows message to all descendant windows.
    我在CDockablePane上重载的Dialog里面有相应函数ON_MESSAGE( MSGTD_MYMESSAGE, &CDialog::OnMyMethod ),奇怪的是OnMyMethod()在窗口没有浮动的时候能够响应,浮动的时候就没有相应了。
      

  4.   

    大侠们帮忙看看吧,我把消息接受函数放到CDockablePane还是同样的结果,没有浮动就可以接受,浮动就不能接受了
      

  5.   

    ON_MESSAGE( MSGTD_MYMESSAGE, &CDialog::OnMyMethod )
    很奇怪的消息映射,
    ON_MESSAGE( MSGTD_MYMESSAGE, OnMyMethod)就行了
    MSDN上的解释说:
    If bDeep and bOnlyPerm are TRUE, the search continues below temporary windows. In this case, only permanent windows encountered during the search receive the message.
    改为
    AfxGetApp()->m_pMainWnd->SendMessageToDescendants(MSGTD_MYMESSAGE, (WPARAM)(pInfo), (LPARAM)(pInfo), TRUE, FALSE ); 
    最后一个参数为TRUE,只发给固定窗口,FALSE,全部都通知
      

  6.   

    很奇怪,我把发消息的地方改成了:
    AfxGetApp()->m_pMainWnd->SendMessageToDescendants(MSGTD_MYMESSAGE, (WPARAM)(pInfo), (LPARAM)(pInfo), TRUE, FALSE ); 
    接受消息的地方也改成了:
    ON_MESSAGE( MSGTD_MYMESSAGE, OnMyMethod)
    还是原来的样子,浮动就不能接收到消息了,真是急死了
      

  7.   

    SendMessageToDescendants();//送消息到该窗口的子窗口。子窗口浮动时,不在是子窗口了。直接用SendMessage()。