如何实现在同一窗口不同区域,拖放操作不同响应呢?

greenabc 2008-04-06 10:11:40
窗口 比如是 一个CButton 的分割出的几个不同区域,(实际是一个CWnd)把一个CWnd 分割了若干区域,这些区域如何对 Drop 响应不同呢(有些区域接受,有些区域不接受)?要求是一个窗口.
...全文
155 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dext 2008-04-07
  • 打赏
  • 举报
回复
虽然我认为,可以通过判断不同区域来操作,但这样的设计太差了。

为每一种不同的处理生成一个CWnd的子类,各自处理

然后把这些子类添加到你的目标 CWnd就可以了。
jameshooo 2008-04-07
  • 打赏
  • 举报
回复
COleDropTarget的本质还是使用IDropTarget接口。
自己定义一个cursor文件(可以使用带Alpha通道的图片),当DragOver时根据鼠标所在的区域,可以用SetCursor来重新设置鼠标形状。
definegg 2008-04-07
  • 打赏
  • 举报
回复
拖动过程显示半透明图片的例子:

http://www.codeproject.com/KB/shell/dragdrop.aspx
雪鹰翔天 2008-04-07
  • 打赏
  • 举报
回复
帮顶
偶也在寻找此方面资料..
definegg 2008-04-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 greenabc 的回复:]
引用 4 楼 jameshooo 的回复:
实现一个IDropTarget接口,用RegisterDragDrop来登记一个窗口使用拖放功能,在DragEnter方法里面根据pt参数来决定是否落到窗口的某个区域,并在pdwEffect参数里返回不同的状态值,Drop方法也同理进行。




C/C++ code
CMyWnd:public CWnd,public IDropTarget
{
int CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
RegisterDragDrop(this);
return 0;

[/Quote]

完全正确.

[Quote=引用 11 楼 jameshooo 的回复:]
既然你用MFC,可以直接让窗口从COleDropTarget继承,重载OnDropEnter、OnDropOver、OnDrop等感兴趣的函数,并在OnCreate里面调用Register(this),在OnDestroy里面调用Revoke()
[/Quote]

完全正确.
jameshooo 2008-04-07
  • 打赏
  • 举报
回复
既然你用MFC,可以直接让窗口从COleDropTarget继承,重载OnDropEnter、OnDropOver、OnDrop等感兴趣的函数,并在OnCreate里面调用Register(this),在OnDestroy里面调用Revoke()
definegg 2008-04-07
  • 打赏
  • 举报
回复
实现 IDropTarget 接口示例:
http://www.codeproject.com/KB/clipboard/dragdropinterface.aspx
greenabc 2008-04-07
  • 打赏
  • 举报
回复
如何实现这个 IDropTarget 接口,

我的电子信箱是 greenabc300@hotmail.com.

谢谢!
greenabc 2008-04-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jameshooo 的回复:]
实现一个IDropTarget接口,用RegisterDragDrop来登记一个窗口使用拖放功能,在DragEnter方法里面根据pt参数来决定是否落到窗口的某个区域,并在pdwEffect参数里返回不同的状态值,Drop方法也同理进行。

[/Quote]


CMyWnd:public CWnd,public IDropTarget
{
int CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
RegisterDragDrop(this);
return 0;
}
}



Is it Ok?
greenabc 2008-04-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dext 的回复:]
虽然我认为,可以通过判断不同区域来操作,但这样的设计太差了。

为每一种不同的处理生成一个CWnd的子类,各自处理

然后把这些子类添加到你的目标 CWnd就可以了。
[/Quote]

呵呵,就是要杜绝使用这样的方法!谢谢帮顶!
scq2099yt 2008-04-07
  • 打赏
  • 举报
回复
根据鼠标点击的坐标点所在区域作不同反应
jameshooo 2008-04-06
  • 打赏
  • 举报
回复
实现一个IDropTarget接口,用RegisterDragDrop来登记一个窗口使用拖放功能,在DragEnter方法里面根据pt参数来决定是否落到窗口的某个区域,并在pdwEffect参数里返回不同的状态值,Drop方法也同理进行。
greenabc 2008-04-06
  • 打赏
  • 举报
回复
COleDropTarget
COleDataSource dataSource;
COleDropSource dropSource;

要在不同区域显示接受或不接受的图标,更进一步,如何在不同区域移动移动鼠标的过程中显示不同的自定义图片(半透明)呢?
greenabc 2008-04-06
  • 打赏
  • 举报
回复
COleDropTarget
COleDataSource dataSource;
COleDropSource dropSource;

要在不同区域显示接受或不接受的图标,附加一个问题,如何显示自定义图片(半透明)呢?
bobob 2008-04-06
  • 打赏
  • 举报
回复
既然你知道在不同区域进行不同操作,那就判断当前鼠标落在那个区域,然后分别处理

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧