The client application initiates a DDE conversation by calling WinDdeInitiate, specifying the server application-name string and the topic-name string.

The sample client application in "Sample Code for Dynamic Data Exchange" allows the user to initiate a DDE conversation from a context menu. The following code fragment shows how the client application processes that request:

/* User starts DDE conversation */
case IDM_POLL:
   WinPostMsg(hListWnd, LM_DELETEALL, 0, 0);
   ShowMessage("Polling...");
   context.cb = sizeof(CONVCONTEXT);
   context.fsContext = 0;
   WinDdeInitiate(hwnd, szApp, szTopic, &context);
   ShowMessage("Polling complete.");
   break;

The following sample code shows how the server application determines whether to send a positive or negative acknowledgment to the WinDdeInitiate call:

/*********************************************************************/
/*  Check incoming poll - if the App and Topic match,                */
/*  we must acknowledge. If both are zero-length, the client is      */
/*  searching for anyone to talk to - send our names                 */
/*********************************************************************/
szClientApp   = pDDEinit->pszAppName;
szClientTopic = pDDEinit->pszTopic;
ShowMessage(szClientApp);
ShowMessage(szClientTopic);

if (!strcmpi(szClientApp, szApp) ||
    !strcmpi(szClientApp, NULL))
{
    if (!strcmpi(szClientTopic, szTopic) ||
        !strcmpi(szClientTopic, NULL))
    {
        context.cb = sizeof(CONVCONTEXT);
        context.fsContext = 0;
        WinDdeRespond(hClientWnd,
                      hwnd,
                      szApp,
                      szTopic,
                      &context);
    }
}
break;


[Back] [Next]