不能解决的给分,解决的给钱,时间限制在,13日之前!!!!!!!!!!!!

woaini5994 2003-09-11 05:03:38
我在一个基于对话框的程序中,希望当鼠标移动的一个按扭的区域的时候这个按扭可以隐藏,
m_not_love是一个CBUTTON的变量,下面是我实现的代码,但是不好用,请问是什么原因,如果有什么问题
请指教
MOUSEMOVE中
m_not_love.GetClientRect(&rect);
if(point.x >=rect.left&&point.x<=rect.left&&point.y<=rect.bottom&&point.y>=rect.top)//&&point.y<=rect.bottom&&point.y>=rect.top)
{
m_not_love.ShowWindow(SW_HIDE);
}
m_not_love.ShowWindow(SW_SHOW);
...全文
34 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
flinming 2003-09-12
  • 打赏
  • 举报
回复
up
cvip11 2003-09-12
  • 打赏
  • 举报
回复
怎么给钱???
yangsiwei 2003-09-12
  • 打赏
  • 举报
回复
你干嘛不做个移动到按钮上按钮就变成个嘴巴咬光标一口
philis 2003-09-12
  • 打赏
  • 举报
回复
楼主编程泡妞两不误,高,实在是高。
nonocast 2003-09-11
  • 打赏
  • 举报
回复
呵呵,永远点不到的Button
DIY
masterz 2003-09-11
  • 打赏
  • 举报
回复
在PreTranslateMessage中应该可以捕捉到mouse move 消息
  • 打赏
  • 举报
回复
单从代码上看:2个问题
MOUSEMOVE中
m_not_love.GetClientRect(&rect);
if(point.x >=rect.left////////////////////两个left总为假,除非在left线上
&&point.x<=rect.left
&&point.y<=rect.bottom
&&point.y>=rect.top)
//&&point.y<=rect.bottom&&point.y>=rect.top)
{
m_not_love.ShowWindow(SW_HIDE);
}
m_not_love.ShowWindow(SW_SHOW);///////////没else,这句总会执行
popyyb 2003-09-11
  • 打赏
  • 举报
回复
up
Oversense 2003-09-11
  • 打赏
  • 举报
回复
up
coohai 2003-09-11
  • 打赏
  • 举报
回复
可以实现。但你的代码还需要改动,另外还得改变思想。
先说不对之处,你所得到的窗口矩形是基于m_not_move的,需要转换成在父窗口中的坐标。

再说指导思想:
  你需要在两个地方分别处理WM_MOUSEMOVE的消息,一个是在m_not_move这个类中,另一个是在m_not_move的父窗口中。
  要处理第一个消息,m_not_move不能是CButton类型的变量,而应该是CButton的派生类,原因呢,楼上有位朋友说得对,只能在这个派生类中处理MOUSEMOVE的消息。
  具体方法是,在发生这个消息即可这样:this->ShowWindow(SW_HIDE)。这就可以了,你的按钮已经隐去,下个MOUSEMOVE消息便发生在父窗口中了。
  然后是第二个消息。这个在m_not_move中处理,我相信你能做了。
  具体方法是,检查该点是否已出了你的按钮所在矩形(这个矩形应该保存在你的父窗口类中)。要得到矩形得分两种情况。1,这个按钮是动态创建的,这种情况你创建它时所指定的矩形就是所需要的;2,这个按钮是你的Dialog或FormView中的,可以这样得到:
在父窗口类中
    CRect rct;
m_not_move.GetWindowRect(&m_not_move);
    ScreenToClient(&rct);//rct这个矩形即为所求。
  得到后,若在矩形之处了,可以调用m_not_move.ShowWindow(SW_SHOW);
因为在矩形外会多次触发MOUSEMOVE消息,可以设置m_not_move的成员变量表示它是否是隐藏的,若是则m_not_move.ShowWindow(SW_SHOW);同时将该变量置为FALSE,并且在你隐藏时将它置为TRUE。这样是为了避免每次都调用m_not_move.IsWindowVisible()。
  
  好了,这就实现了。
whoishere 2003-09-11
  • 打赏
  • 举报
回复
示例代码已发,请查收!
如有问题请今晚提出,后天晚10点之前估计都无法上网
Coder 青田 2003-09-11
  • 打赏
  • 举报
回复
UP
woaini5994 2003-09-11
  • 打赏
  • 举报
回复
to 风清扬,
我做的按钮并不是要触发实现命令的作用,只不过是在整体设计一个花哨的东西
不过上面两位的话使小弟觉悟不少,真的是很感谢,
中秋快乐,祝愿天下的程序员都 银子大大的 要不怎么你们的星星比我多呢
谢谢了
whoishere 2003-09-11
  • 打赏
  • 举报
回复
当鼠标移到按钮上时,WM_MOVE被发送给了该按钮,窗口是接收不到该消息的,
正确的做法是你应该派生一个CButton类,在该Button类中处理WM_MOUSEHOVER消息和WM_MOUSELEAVE消息,在前一个消息隐藏按钮,在后一个消息显示按钮。
如果需要具体的代码,可以留个MAIL给我
lygfqy 2003-09-11
  • 打赏
  • 举报
回复
首先我想说的是,如果你把它实现成一个按钮,你移到上面的时候就消失的话,你还做成个按钮干什么?因为它永远也不会被按下去。
不能实现的原因是,当你把鼠标移动到按钮窗口上的时候,mousemove的消息,就分发给了按钮窗口了,而不是你的父窗口,所以你的代码永远也不会运行的。
akiko 2003-09-11
  • 打赏
  • 举报
回复
没看见else??哪总会执行m_not_love.ShowWindow(SW_SHOW);

16,473

社区成员

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

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

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