终止对话

【勇芳软件工作室】汉化HomePreviousNext

客户端或服务器可以随时发出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_DATAWM_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;

}