VC++下动态数据交换技术之会话处理
2008-11-14 19:34:05 来源:WEB开发网支持所指定服务名/主题名的服务器用一条WM_DDE_ACK消息来应答客户,并通过消息参数wParam把服务器窗口句柄返回给客户。客户在收到并保存此句柄后,可以通过该句柄直接将DDE消息发送到服务器窗口。
图2 启动、终止一个DDE会话的消息流程
客户与服务器的任何一方都可以向对方邮寄WM_DDE_TERMINATE消息以请求此次对话的终止,另一方在接收到此消息后也会向对方发出WM_DDE_TERMINATE消息作为应答,本次DDE对话即告结束。
下面给出一个有关DDE启动和终止会话的程序示例,客户方首先获取服务器所在应用程序的窗口句柄,并在准备好服务名原子和主题名原子后向服务器程序发送启动一次会话的消息。并在最后完成对原子的删除:
// 获取服务器所在应用程序的窗口句柄
HWND hwndServer = ::FindWindow(NULL, "DDE服务器");
// 准备服务名原子
ATOM atomService = GlobalAddAtom("DDEServer");
// 准备主题名原子
ATOM atomTopic = GlobalAddAtom("Topic A");
// 获取当前窗口的安全句柄
HWND hwndClient = GetSafeHwnd();
// 向服务器程序发送WM_DDE_INITIATE消息
::SendMessage(hwndServer, WM_DDE_INITIATE, (WPARAM)hwndClient, (LPARAM)MAKELONG(atomService, atomTopic));
// 删除服务名原子
if (atomService != NULL)
GlobalDeleteAtom(atomService);
// 删除主题名原子
if (atomTopic != NULL)
GlobalDeleteAtom(atomTopic);
更多精彩
赞助商链接