An application that uses the DDEML must provide a callback function that processes the DDE events affecting the application. The DDEML notifies an application of such events by sending transactions to the application's DDE callback function. The transactions a callback function receives depend on which callback filter flags the application specified in DdeInitialize and whether the application is a client, a server, or both. For more information, please see DdeCallback.
The following example shows the general structure of a callback function for a typical client application.
HDDEDATA CALLBACK DdeCallback(uType, uFmt, hconv, hsz1,
hsz2, hdata, dwData1, dwData2)
UINT uType; // transaction type
UINT uFmt; // clipboard data format
HCONV hconv; // handle of conversation
HSZ hsz1; // handle of string
HSZ hsz2; // handle of string
HDDEDATA hdata; // handle of global memory object
DWORD dwData1; // transaction-specific data
DWORD dwData2; // transaction-specific data
{
switch (uType)
{
case XTYP_REGISTER:
case XTYP_UNREGISTER:
.
.
.
return (HDDEDATA) NULL;
case XTYP_ADVDATA:
.
.
.
return (HDDEDATA) DDE_FACK;
case XTYP_XACT_COMPLETE:
//
return (HDDEDATA) NULL;
case XTYP_DISCONNECT:
//
return (HDDEDATA) NULL;
default:
return (HDDEDATA) NULL;
}
}
The uType parameter specifies the transaction type sent to the callback function by the DDEML. The values of the remaining parameters depend on the transaction type. The transaction types and the events that generate them are described in the following topics. For detailed information about each transaction type, see Transaction Management.