扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:郎锐 来源:天极网 2007年10月19日
关键字:
![]() 图2 启动、终止一个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); |
// 提示信息 AfxMessageBox("接收到客户发出的会话请求"); // 保存客户窗口句柄 m_hwndClient = (HWND)wParam; // 获取当前窗口的安全句柄 HWND hwnd = GetSafeHwnd(); // 登记自己的服务名原子并获取原子标识值 ATOM atomService = GlobalAddAtom("DDEServer"); // 登记自己的主题名原子并获取原子标识值 ATOM atomTopic = GlobalAddAtom("Topic A"); // 如果服务名/主题名原子匹配,就创建DDE窗口并应答 if ((LOWORD(lParam) == NULL || LOWORD(lParam) == atomService) && (HIWORD(lParam) == NULL || HIWORD(lParam) == atomTopic)) { // 创建DDE服务器窗口 HWND hwndServer = CreateWindow("EDIT", NULL, WS_CHILD, 0, 0, 0, 0, hwnd, NULL, AfxGetInstanceHandle(),NULL); // 传送客户DDE窗口句柄 ::SetWindowWord(hwndServer, 0, (LONG)m_hwndClient); // 发应答消息 ::SendMessage(m_hwndClient, WM_DDE_ACK, (WPARAM)hwndServer, (LPARAM)MAKELONG(atomService, atomTopic)); } else { // 不建立会话, 删除所创建原子 GlobalDeleteAtom(atomService); GlobalDeleteAtom(atomTopic); } |
// 保存服务器程序反馈回来的DDE服务窗口句柄 m_hwndServer = (HWND)wParam; // 提示信息 AfxMessageBox("收到从服务器传来的应答"); |
// 在收到WM_DDE_TERMINATE消息后以WM_DDE_TERMINATE应答 ::PostMessage(m_hwndServer, WM_DDE_TERMINATE, 0, 0); // 提示信息 AfxMessageBox("服务器终止本次对话"); |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。