您的位置:首页 > 其它

如何向预先存在的 MFC 应用程序添加 OLE 拖放功能

2007-08-19 11:07 295 查看
如何向预先存在的 MFC 应用程序添加 OLE 拖放功能

注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的使用所引起的任何直接的, 或间接的可能的问题负责。
文章编号 : 135299
最后修改 : 2006年11月21日
修订 : 6.1

概要
Microsoft 基础类 (MFC) 应用程序中可能需要使用户可以各种窗口, CListBox 和 CEdit 派生 - 对象中包括在内 - CWnd 派生对象以及标准控件窗口之间拖动文本。

示例 (LSTDRG) 是可用演示如何添加 OLE 拖和放预先存在的 MFC 应用程序功能。 此示例说明使用 OLE 拖放两个列表框、 编辑控件, 和 - CWnd 派生对象的窗口之间拖动文本功能。 也可使用任何其他应用程序以 OLE 文本并放功能, 拖动源或放置目标启用 (Word for Windows 6 是一个这样的应用程序。

可用于从 Microsoft 下载中心下载下列文件:

VisualC++6.0
Download Listdrg.exe now (http://download.microsoft.com/download/vc60pro/samp39/1/win98/en-us/lstdrg.exe)
有关如何下载 Microsoft 支持文件请单击下列文章编号以查看 Microsoft 知识库中相应:
119591 (http://support.microsoft.com/kb/119591/EN-US/) 如何从联机服务获取 Microsoft 支持文件
此文件进行病毒扫描 Microsoft。 Microsoft 使用最新病毒检测软件, 投递文件日期上的可用。 文件存储, 有助于防止对文件进行任何未经授权更改安全性增强的服务器上。
VisualC++.NET
Download Listdrgvcnet.exe now (http://download.microsoft.com/download//visualstudionet/sample/1.16/win98mexp/en-us/listdrgvcnet.exe)
发布日期: 6月 26日, 2002

有关如何下载 Microsoft 支持文件请单击下列文章编号以查看 Microsoft 知识库中相应:
119591 (http://support.microsoft.com/kb/119591/EN-US/) 如何从联机服务获取 Microsoft 支持文件
此文件进行病毒扫描 Microsoft。 Microsoft 使用最新病毒检测软件, 投递文件日期上的可用。 文件存储, 有助于防止对文件进行任何未经授权更改安全性增强的服务器上。
回到顶端

更多信息
要为预先存在的 MFC 应用程序, 启用 OLE 必须初始化 OLE DLL。 这是通过调用 AfxOleInit() InitInstance() 是您的应用程序对象中。

LSTDRG 示例是用无 OLE 首先创建支持使用应用程序向导。 调用 AfxOleInit() 代码被然后复制从 InitInstance() 于 MFC OCLIENT 示例应用程序提供与上面提到的产品。

通过遵循述 MFC 2.5 OLE 2 类文档过程对每个窗口 OLE 已启用拖放功能。 的利息部分是:

? ": 实现放源拖和放 "
? ": 实现拖放目标拖和放 "
? ": 创建和破坏数据对象和数据源 "
? ": 操作数据对象和数据源 "
您还需要查看 MFC 类 COleDataSource 和 COleDropTarget。

实例您 - CWnd 派生对象中要到放置源, - CWnd 派生对象必须化 COleDataSource 对象。 然后可调用 COleDataSource::CacheGlobalData() 以缓存数据 (文本), 要拖动。 然后调用 COleDataSource::DoDragDrop() 以实际启动拖动放置。 返回值从 DoDragDrop() 提供拖 / 放操作的结果。 从 DoDragDrop() DROPEFFECT 返回值是位字段, 所以您需要来测试特定位的返回值来确定拖 / 放结果。

打开到放置目标 - CWnd 派生对象是有点复杂。 您必须从, COleDropTarget 派生您自己的类并实例化 - CWnd 派生类中您 - COleDropTarget 派生对象是成员。 在您 COleDropTarget 对象最低, 替代上有到,: 这些四成员函数
COleDropTarget::OnDragEnter()
COleDropTarget::OnDragLeave()
COleDropTarget::OnDragOver()
COleDropTarget::OnDrop()
通过调用 COleDropTarget::Register() 必须还初始化 COleDropTarget 派生对象作为以 OLE 放置目标。 将正常 OnCreate 成员函数是一个 - CWnd 派生对象中完成此 (请参阅 LSTDRG 中 CDDWnd::OnCreate 方法。 在 CListBox (CEdit, 等) AppStudio 由对话框模板创建类问题是不是调用 OnCreate。 这是因为对话框创建过程中被创建控件窗口与对话框模板是其实际 - CWnd 派生 C++ 对象创建之前。 这些窗口然后附加一旦被创建它们通过 Attached() 来 - C++ CWnd 派生对象。

要解决此, 为 CListBox 和 CEdit 派生 - 类位置称为 COleDropTarget::Register() Initialize() 方法创建。 对于 - CFormView 派生类 OnInitialUpdate() 方法中每个模板创建控件然后调用该 Initialize() 方法 (见 CListdragView::OnInitialUpdate() 和 CDDListBox::Initialize())。

窗口上除去文本时的 LSTDRG 应用另一个有趣方面是使用烧制 trashcan 动画。 此动画使用单个位图由多个单元格''或图像。 使用对单个位图相对于多位图节省 GDI 资源以及是要绘制更有效。 它还将关闭鼠标指针 (游标) 通过期间绘制以消除指针闪烁 Windows 版本 3 计算机上加载一个空指针。
回到顶端

参考
" 类 MFC 2.5 OLE 2 参考书籍, 用于联机丛书是用 VisualC++ 版本 1.5 " 请参阅上拖和放开头部分以标题放 " 拖 " 还查看 COleDataSource 类和相同引用书中 COleDataTarget 类。

有关良好背景信息上如何处理 OLE 拖放和, 请参见 " 内部 OLE 2 " 由 Kraig Brockschmidt, 由 MicrosoftPress 出版。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: