急!!!急!!!如何在视图上画一个线后,对这个线进行鼠标响应,比如当鼠标移上去时改变线的颜色[再次放出]

duff 2003-11-19 12:00:11
keiven同志说:
你可以写一个继承CCmdTarget的类的线类啊,因为继承了这个类就相应的有了消息机制了,然后你在这个类里面截获相应的消息,在相应的函数中去实现你的代码就行了.象你这里就是截获WM_MOUSEMOVE的消息,在OnMouseMove函数中去实现你的要求.

因为本人刚入门,水平实在有限,请高手给出具体的实现源代码,谢谢。
...全文
48 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sungengyu 2003-11-19
  • 打赏
  • 举报
回复
哈哈,很简单吧? ~~~~~~~~~~~~~~~ :)

CreatePolygonRgn 可以创建任意多边形区域,就算是折线,也能包进去
sungengyu 2003-11-19
  • 打赏
  • 举报
回复
大概是这个样子的:创建一个区域,包含那条线。在WM_MOUSEMOVE 中,
判断鼠标是否在创建的那个区域内,如果在的话,就重画那条线。
下面的代码,希望对你有点用
(代码写在 “OnMouseMove(UINT nFlags, CPoint point)” 中

POINT line[2]; // 假设这条线的两个端点是 line[0] 和 line[1]
line[0].x = 0 ; line[0].y = 0; // 假设一个端点是 (0,0)
line[1].x = 100 ;line[1].y = 100; // 另一个端点是 (100,100)

POINT p[4]; // 用这几个点把上面的那条线包起来
// 此处会有一点误差,因为外面的区域要大于那条线段!!!
p[0].x = line[0].x - 1 ; p[0].y = line[0].y - 1; // 左上
p[1].x = line[1].x + 1 ; p[1].y = line[1].y - 1; // 右上
p[2].x = line[1].x + 1 ; p[2].y = line[1].y + 1; // 右下
p[3].x = line[0].x - 1 ; p[3].y = line[0].y + 1; // 左下

HRGN hRgn = ::CreatePolygonRgn(p,4,ALTERNATE); // 创建包含上面那条线段的区域
if (::PtInRegion(hRgn,point.x,point.y) ) // 测试一下了
{ // 在此进行处理,重画那条线段
}

keiven 2003-11-19
  • 打赏
  • 举报
回复
对于sungengyu()所说的那种思路也可以啊,可以由点来确定一个区域,然后根据鼠标是否在区域内来实现相应的功能.
bluebohe 2003-11-19
  • 打赏
  • 举报
回复
你要考虑清楚一些
我想应该在你鼠标移动的时候遍历线集合,看哪条线跟鼠标的周围的一个小矩形相交,相交则改变线的状态为拾取,重画线,在OnDraw中根据线的状态(正常、拾取)画线
完全能够实现
keiven 2003-11-19
  • 打赏
  • 举报
回复
楼主,具体的实例程序我没做过,我只是提供一下我的想法和意见.因为一个继承自CCmdTarget类的类都相应的拥有了消息机制.只要你添加相应的消息映射就可以实现你的要求了.如果对消息机制不太明白我建议你去看看 <<深入浅出MFC>>这本书,那里面讲的很多也很详细.望楼主早日成功.^_^
sungengyu 2003-11-19
  • 打赏
  • 举报
回复
我也只能给你提供另一种思路,源代码不知道有没有时间搞


1. 根据这个线,创建一个区域
2. 响应 WM_MOUSEMOVE,判断鼠标是否在这个区域内

……
duff 2003-11-19
  • 打赏
  • 举报
回复
最好有人给出完整的实现代码。
sungengyu 2003-11-19
  • 打赏
  • 举报
回复
补充一下:
1.如果是折线的话,可以创建多个多边形区域,然后用下面的函数把这些多边形区域合并起来。
int CombineRgn(
HRGN hrgnDest, // handle to destination region
HRGN hrgnSrc1, // handle to source region
HRGN hrgnSrc2, // handle to source region
int fnCombineMode // region combining mode
);
2.MFC有一个CRgn类,你可以自己试试看。

16,551

社区成员

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

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

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