|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Terminating a Conversation
Either the client or the server can issue a WM_DDE_TERMINATE message to terminate a conversation at any time. Similarly, both the client and server applications should be prepared to receive this message at any time. An application must terminate all of its conversations before shutting down.
In the following example, the application terminating the conversation posts a WM_DDE_TERMINATE message.
PostMessage(hwndServerDDE, WM_DDE_TERMINATE, PackDDElParam(WM_DDE_TERMINATE, (UINT) hwndClientDDE, 0), 0);
This informs the other application that the sending application will send no further messages and the recipient can close its window. The recipient is expected in all cases to respond promptly by sending a WM_DDE_TERMINATE message. The recipient must not send a negative, busy, or positive WM_DDE_ACK message. After an application has sent the WM_DDE_TERMINATE message to the partner in a DDE conversation, it must not respond to messages from that partner, since the partner might have destroyed the window to which the response would be sent.
If an application receives a DDE message other than WM_DDE_TERMINATE after it has posted WM_DDE_TERMINATE, it should free all objects associated with the received messages except the data handles for WM_DDE_DATA or WM_DDE_POKE messages that do not have the fRelease member set. When an application is about to terminate, it should end all active DDE conversations before completing processing of the WM_DESTROY message. However, if an application does not end its active DDE conversations, the system will terminate any DDE conversations associated with a window when the window is destroyed. The following example shows how a server application terminates all DDE conversations.
void TerminateConversations(hwndServerDDE) HWND hwndServerDDE; { HWND hwndClientDDE; /* Terminate each active conversation. */ 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; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Завершение Разговора
Или клиент или сервер может выпустить сообщение 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. После того, как приложение послало сообщение WM_DDE_TERMINATE партнеру в разговоре DDE, оно не должно реагировать на сообщения из этого партнера, с тех пор как партнер мог уничтожить окно на которое ответ должен быть послан.
Если приложение получает сообщение DDE кроме WM_DDE_TERMINATE после, оно объявило WM_DDE_TERMINATE, это должно освобождать все объекты связанные полученными сообщениями за исключением того данные оперируется для WM_DDE_DATA или сообщения WM_DDE_POKE, что нет иметь fRelease установленный элемент. Когда приложение собирается завершаться, оно должно заканчивать всю активную беседу DDE перед полной обработкой сообщения WM_DESTROY. Тем не менее, если приложение не заканчивает свою активную беседу DDE, система завершит любую беседу DDE связанную окном когда окно уничтожено. Следующий пример показывает как приложение сервера завершает всю беседу DDE.
аннулируйте TerminateConversations(hwndServerDDE) HWND hwndServerDDE; { HWND hwndClientDDE; /* Завершите каждый активный conversation. */ пока (hwndClientDDE = GetNextLink(hwndClientDDE)) { SendTerminate(hwndServerDDE, hwndClientDDE); } возврат; } BOOL AtLeastOneLinkActive(ПУСТОТА) { возвращайтесь ВЕРНО; } HWND GetNextLink(hwndDummy) HWND hwndDummy; { возврат (HWND) 1; } ПУСТОТА SendTerminate(HWND hwndServerDDE, HWND hwndClientDDE)
{ возврат; }
|
|
|
|
| |