WEB开发网
开发学院软件开发VC 创建客户区窗口,列表框之间项的拖拽操作 阅读

创建客户区窗口,列表框之间项的拖拽操作

 2006-07-23 11:19:54 来源:WEB开发网   
核心提示: 针对这种情况,MFC 没有内建的处理方法,创建客户区窗口,列表框之间项的拖拽操作(3),但用两种方法可以实现你的要求,COM 有其自己的接口来处理应用程序之间常规的拖拽操作,也可以是目标,编辑框只能是目标,它需要实现几个接口:IDropTarget,IDropSource 和 IDataO

针对这种情况,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!

上一页  1 2 3 4 5 6  下一页

Tags:创建 客户 窗口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接