客户端或服务器可以随时发出WM_DDE_TERMINATE消息来终止对话。同样,客户端和服务器应用程序都应该随时准备接收该消息。一个应用程序必须在关闭之前终止所有的对话。
在以下示例中,终止会话的应用程序发布了WM_DDE_TERMINATE消息。
PostMessage(hwndServerDDE,WM_DDE_TERMINATE,
PackDDElParam(WM_DDE_TERMINATE, (UINT) hwndClientDDE, 0), 0);
这通知其他应用程序发送应用程序将不会发送进一步的消息,并且收件人可以关闭其窗口。在所有情况下,预计接收者将通过发送WM_DDE_TERMINATE消息来及时响应。收件人不得发送负面,忙碌或正面的WM_DDE_ACK消息。
应用程序在DDE会话中向对方发送了WM_DDE_TERMINATE消息之后,它不能响应该伙伴的邮件,因为该伙伴可能已经破坏了将发送响应的窗口。
如果应用程序在发布WM_DDE_TERMINATE之后收到除WM_DDE_TERMINATE之外的DDE消息,则应释放所有与接收到的消息相关的对象,除WM_DDE_DATA或WM_DDE_POKE 【不】成员fRelease成员的数据句柄组。
当应用程序即将终止时,它应该在完成WM_DESTROY消息的处理之前结束所有活动的DDE对话。但是,如果应用程序未结束其活动的DDE对话,系统将在窗口销毁时终止与窗口相关联的任何DDE对话。以下示例显示服务器应用程序如何终止所有DDE对话。
void TerminateConversations(hwndServerDDE)
HWND hwndServerDDE;
{
HWND hwndClientDDE;
/ *终止每个活跃的对话。*/
while (hwndClientDDE = GetNextLink(hwndClientDDE)) {
SendTerminate(hwndServerDDE, hwndClientDDE);
}
return;
}
BOOL AtLeastOneLinkActive(VOID)
{
return TRUE;
}
HWND GetNextLink(hwndDummy)
HWND hwndDummy;
{
return (HWND) 1;
}
VOID SendTerminate(HWND hwndServerDDE,HWND hwndClientDDE)
{
return;
}