一个MFC小程序的结构若干困惑,谢谢!

小行星X 2006-09-27 03:36:13
界面:CDialog,上面有CTreeCtrl,和若干其他控件

操作:将CTreeCtrl中的节点拖动到另一个控件中,中间可能经过其他的控件,对话框本身,甚至窗口外

说明:CTreeCtrl中节点代表的意义不同,那么,点击右键时弹出菜单不同,拖动到另一个特定控件时,事件不同,其他控件不接受此拖动


好了,对于这么一个程序,我做了如下的事情:

搜到几篇文章,我要先弄明白拖动节点时,节点图标跟随的一系列动作(目前唯一不明白的是:如果CTreeCtrl的节点没有图标,我只想拖动文字,该怎么办);

然后派生CTreeCtrl,重载鼠标消息,写代码,调试……结果:当经过非CTreeCtrl控件的时候(对话框,其他控件,窗口外),图标停在了CTreeCtrl的边缘,不再移动;

于是,我重载了CDialog的OnMouseMove消息,调用树的OnMouseMove函数,问题暂时解决;

然后立刻想到,其他控件的消息我都要照顾吗,似乎不用,使用SetCapture,ReleaseCapture可以吗?嗯,似乎可以了;

此时,我需要给树的节点加入一些不同的属性,使它们代表不同的事物。我看到了成员函数CTreeCtrl::SetItemData,其中一个参数是DWORD_PTR类型;

这是我困惑的地方,我该怎么做?

1.写一个结构或一个类,里面包含菜单ID,图标ID,其他的属性,然后把实例地址转化成长整数Set进去,用的时候再转回来,程序结束时搜索并销毁;
2.……我也想不出其他的办法,HTREEITEM我似乎没法动了,可是办法1不知道为什么就是觉得不爽;

似乎看到过一个属性,可以使得节点附带一些数据,可是又找不到了,不知道是不是就是那个CTreeCtrl::SetItemData,综上,我发现我其实需要一个Tree的Item的“再封装”,不知道是否可以……


然后又发现,使用了SetCapture,ReleaseCapture后,松开鼠标的消息回到了树控件本身,那么此时,想在另一个控件中做动作,就只有靠发消息了吧……

发给对话框,对话框根据消息的参数来做剩下的事情?应该是这样吧(汗……已经晕了)……

暂时先这么做着;

我在资源中加入菜单,加入菜单项,给菜单项加入事件handler(通过向导,加在对话框类中,只有一个CXXXDlg),在树控件的右键函数中LoadMenu,GetSubMenu,TrackPopupMenu,设置响应鼠标键……

调试,没反应……

再看:ON_COMMAND( ID_MENUID, OnFunc ),看来这个消息不会传到Dlg中了(会吗?)……

我现在只好在树派生类中得到菜单项ID然后处理,是不是弹出菜单都是这么用的,有点难看呀……



问了三个问题,写的有点乱。

我其实想把树控件当成一个面板,这个面板会展示一些东西,这个面板还会接受用户的操作,发送消息,只是在细节上很多东西没有掌握,上述都是主动发送消息,那么控件就或多或少的需要知道其他的类信息,至少知道要发送给谁吧。如果让Dlg来“监视”控件的状态,就是Observer,在这样没有规模的小程序中似乎又不值得,真是有点两难。没有经验啊,还希望大家不吝赐教,谢谢!
...全文
266 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小行星X 2006-10-08
  • 打赏
  • 举报
回复
谢谢大家
长尾巴的悟空 2006-09-27
  • 打赏
  • 举报
回复
太长,没看完,up
littlepboy 2006-09-27
  • 打赏
  • 举报
回复
他想说明自己的思路吧,感觉三言两语也回答不完了.赫赫
KeSummer 2006-09-27
  • 打赏
  • 举报
回复
好象长篇小说..晕~~
dadi0189 2006-09-27
  • 打赏
  • 举报
回复
可能问题不复杂,但被你这样一说大家就晕了!
菜牛 2006-09-27
  • 打赏
  • 举报
回复
拖放:使用COleDropSource和COleDropTarget

树控件的ItemData就是类似你这么用的:

写一个结构或一个类,里面包含菜单ID,图标ID,其他的属性,然后把实例地址转化成长整数Set进去,用的时候再转回来,程序结束时搜索并销毁
songlife33 2006-09-27
  • 打赏
  • 举报
回复
没注意MFC的控件怎么支持拖拽
songlife33 2006-09-27
  • 打赏
  • 举报
回复
你说的很复杂哦,我常识过C#,拖拽很简单地。。。。。
lixiaosan 2006-09-27
  • 打赏
  • 举报
回复
没见过这样问问题的。。-_-!!
erdgzw 2006-09-27
  • 打赏
  • 举报
回复
问题太长了,我今天是看不完了。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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