创建客户区窗口,列表框之间项的拖拽操作
2006-07-23 11:19:54 来源:WEB开发网一旦你用窗口表对拖拽管理器进行了初始化,下一步便是改写主窗口的 PreTranslateMessage 函数以便将消息传递给拖拽管理器:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
return m_ddm.PreTranslateMessage(pMsg) ? TRUE :
CDialog::PreTranslateMessage(pMsg);
}
一切准备就绪,当用户试图从一个窗口到另一个窗口实施拖拽操作时,拖拽管理器便会察觉到并通知应用程序要做相应的处理。CDragDropMgr 可以发送四个消息/通知:WM_DD_DRAGENTER、WM_DD_DRAGOVER、WM_DD_ DRAGDROP 和 WM_DD_DRAGABORT。收到这些消息/通知后,做什么样的处理由你来决定。WM_DD_DRAGENTER 和 WM_DD_DRAGDROP 是拖拽操作必须要做的处理。其它两个可选。WM_DD_DRAGABORT 用来处理用户取消操作时的清除工作。WM_DD_ DRAGOVER 使你能够在用户实施拖拽操作而移动鼠标时进行连续不断的处理。DDTest 这样简单的程序不需要处理这些消息。
当拖拽管理器发送 WM_DD_DRAGENTER 消息时,它在 LPARAM 中传递一个 DRAGDROPINFO 结构。你的任务是将 DRAGDROPINFO::data 指向一个包含你想要拖拽数据的 CDragDropData 实例,然后返回 TRUE。如果拖拽是不允许的(也许用户单击了列表框中的某个死区(dead area))则应该返回 FALSE,并不要设置 DRAGDROPINFO::data,CDragDropData 类似 COM 的 IDataObject,但要简单得多:它保存拟拽动的数据。CDragDropData 有三个虚拟函数:OnGetDragSize 获得一个拖拽图像的绑定矩形,OnDrawData 绘制拖拽图像,OnGetData 获取数据本身。我在我的库中提供了一个叫 CDragDropText 的类,它实现了这些函数,用来处理文本拖拽操作。它将文本保存在一个 CString 中。OnGetData 返回这个串,OnGetDragSize 计算该文本矩形,OnDrawData 则绘制该文本:
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››客户端:Lync 2011 for Mac体验
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››客户为何忌讳外贸网络推广、营销公司等这些词汇
更多精彩
赞助商链接