创建客户区窗口,列表框之间项的拖拽操作
2006-07-23 11:19:54 来源:WEB开发网针对这种情况,MFC 没有内建的处理方法,但用两种方法可以实现你的要求。COM 有其自己的接口来处理应用程序之间常规的拖拽操作。它需要实现几个接口:IDropTarget,IDropSource 和 IDataObject,此外还有一个函数,DoDragDrop 实现具体的拖拽操作。使用 COM 来实现拖拽操作需要编写大量的代码,这样有可能超出了能力所及。再说使用 COM 来实现这个功能也有些夸张,因为 COM 本身是专门设计用来以更一般的方式实现应用程序之间的交互。如果你仅仅是想在应用程序中将一个项目从一个控件拖拽到另一个控件,那么自己编写代码来的更简单和容易。
我写了一个小类库,其中包含一个类,CDragDropMgr,用这个类可以在自己的应用程序窗口间添加拖拽行为。我还写了一个测试程序,DDTest,示范了如何使用 CDragDropMgr 类(参见 Figure 2)。Figure 3 是程序运行的画面。DDTest 有两个列表框和一个编辑框。你可以将第一个列表框中的项目拖拽到第二个列表框,或者编辑框。此外,你还能在第二个列表框里通过拖拽重排项目。DDTest 就是使用 CDragDropMgr 来实现上述这些功能的。下面我首先示范如何使用 CDragDropMgr,然后在探讨它的工作原理。
Figure 3 运行中的 DDTest
为了使用拖拽管理器,首先要在主窗口或对话框中实例化 CDragDropMgr,然后用一个表对之进行初始化,就像下面的代码这样:
static DRAGDROPWND MyDragDropWindows[] = {
{ IDC_LIST1, DDW_SOURCE },
{ IDC_LIST2, DDW_SOURCE|DDW_TARGET },
{ IDC_EDIT1, DDW_TARGET },
{ 0, 0 },
};
m_ddm.Install(this, MyDragDropWindows);
我的专栏的爱好者们知道我编程的五大秘诀之一便是 一张表胜过一千行代码。表的形式比长长的一串过程代码更加简练、优雅、可靠和可维护。在本文的例子中,表告诉拖拽管理器哪个子窗口是拖拽操作的源和/或目标。每一个表入口都有一个子窗口ID以及一个 DDW_SOURCE 和 DDW_TARGET 的组合标志。在 DDTest 中,第一个列表框是源,第二个列表框既可以是源,也可以是目标,编辑框只能是目标。但是不管怎么样,不要忘了在表的末尾加上 NULL!
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››客户端:Lync 2011 for Mac体验
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››客户为何忌讳外贸网络推广、营销公司等这些词汇
更多精彩
赞助商链接