一、运行机制
ZTRANS的连接/发送接口, 运行机制解释如下:
1) 连接
ZTRANS软件的连接功能,是希望和另外一个软件软件的Windows API窗口句柄(handle)建立连接关系,也就是记载下这个窗口的句柄,在后来的发送功能中,就能向这个窗口发送MARC记录文本了。
ZTRANS是通过连接过程中鼠标左键按下时的光标位置来确定要连接的窗口的句柄的。因此,准备要开发的和ZTRANS接口的软件,需要设计一个Windows窗口(以下称为接收窗口),要有形状,方便用户通过ZTRANS连接操作来点取。
2) 发送数据
ZTRANS软件在发送数据时,先在Windows系统剪贴板中准备好MARC数据。数据格式是24字符的头标区后面紧接若干字段内容。每个字段有字段结束符(ASCII码30),子字段符号为ASCII码31,记录末尾还可能有一个记录结束符(ASCII码29)。要和ZTRANS接口的软件,必须能够处理这样的格式。
然后,ZTRANS软件对接收窗口发送如下消息:
::SendMessage( m_hwndLinkedMARCCtrl, GEM_SELECTALL, 0, 0);
这是为了全选dt1000 MARC接受窗口的内容,为paste做好准备。可以不理会此消息。
::SendMessage( m_hwndLinkedMARCCtrl, WM_PASTE, 0, 0);
这是Windows通用消息,目的是要求接收窗口从剪贴板中paste内容。
注:m_hwndLinkedMARCCtrl是从ZTRANS角度看去的接收窗口句柄。
以上介绍了操作原理。如果要开发能够接收ZTRANS发送过来的MARC数据的窗口,必须至少能够处理WM_PASTE消息。其实处理过程也很简单,在收到这个消息后,直接从剪贴板中取出数据即可。至于,这个接收窗口是否需要显示出MARC数据,或者具有编辑MARC数据的功能,就不强求了。
二、示范代码
本文后面的“资源”中,是一个VC++ 7.0下的示范代码。
其中关键段落,在于为view类加入的WM_PASTE消息处理模块:
LRESULT CMarcRecieverView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PASTE:
{
HGLOBAL hClipData;
if (!::OpenClipboard(this->m_hWnd)) break;
hClipData = GetClipboardData(CF_TEXT);
if (hClipData == NULL) {
CloseClipboard();
return FALSE;
}
LPSTR p = (LPSTR)::GlobalLock(hClipData);
MessageBox(p); // p里面就是MARC数据,根据需要编写处理代码即可
::GlobalUnlock(hClipData);
CloseClipboard();
}
return TRUE;
}
return CEditView::WindowProc(message, wParam, lParam);
}
其实,这个函数完全可以从代码中删除,这样就会自动用CEdit类的消息处理函数来处理WM_PASSTE。而我们知道,这样会把MARC记录当作一个字符串插入在edit窗口当前位置。
===
如有任何问题,欢迎在本后跟贴垂询。