临江网

 找回密码
 点这里注册

QQ登录

只需一步,快速开始

搜索
热搜: 临江老照片

编辑推荐

查看: 2137|回复: 0
打印 上一主题 下一主题

oicq以及东方快车一些软件可以由用户设置隐藏到屏幕上端,鼠标划过时显示

[复制链接]

1368

主题

0

好友

3367

积分

五品

Rank: 6Rank: 6

帖子
1397
积分
3367
注册时间
2007-5-22
跳转到指定楼层
楼主
发表于 2007-7-18 22:31:54 |只看该作者 |倒序浏览
oicq以及东方快车一些软件可以由用户设置隐藏到屏幕上端,鼠标划过时显示

实现起来十分简单,窗口滑动利用movewindow( rect* rc, bool bredraw);

检测鼠标是否划过窗口上方有三种方法

一,利用_trackmouseevent

具体实现:

file://填/加消息映射
//.......

on_message(wm_mouseleave,onmouseleave)

//.......
file://消/息映射结束

void cspdlg:nmousemove(uint nflags, cpoint point)
{
trackmouseevent sttrackmouseevent;
sttrackmouseevent.cbsize = sizeof(sttrackmouseevent);
sttrackmouseevent.hwndtrack=m_hwnd;
sttrackmouseevent.dwflags=tme_leave;
_trackmouseevent(&sttrackmouseevent);
cdialog:nmousemove(nflags, point);
}

lresult cspdlg:nmouseleave(wparam wparam, lparam lparam)
{

/*这里检查鼠标位置

是为了避免鼠标滑过控件时候产生的wm_mouseleave干扰正常应用*/

point pt;
rect rcwindow;
getwindowrect( &rcwindow );
getcursorpos( &pt );
if(pt.x > rcwindow.right || pt.x < rcwindow.left
|| pt.y < rcwindow.top || pt.y > rcwindow.bottom)/*当鼠标移动到窗口矩形外*/
messagebox("鼠标离开了对话框",null,mb_ok);
return 0;
}



二,setcapture();函数,参见msdn,我们详细说下面的方法

三,利用wm_timer随时检查鼠标位置,判断是否在窗口上方。

void cautohidedlg::ontimer(uint nidevent)
{

point pt;
rect rcwindow;
getwindowrect( &rcwindow );
getcursorpos( &pt );
if(pt.x > rcwindow.right || pt.x < rcwindow.left
|| pt.y < rcwindow.top || pt.y > rcwindow.bottom)
{
/*鼠标在窗口外*/
}
else
{
/*在窗口内*/
}
cdialog::ontimer(nidevent);
}


算了,不说了,这部分实现起来实在是太简单,没什么好说的,想琢磨看代码吧

http://263.csdn.net/filebbs/files/2001_6/t_150_1.zip

上面是旧的版本

下面是新的,不过都存在一个问题,详看http://www.csdn.net/expert/topicview.asp?id=161974

http://263.csdn.net/filebbs/files/2001_6/t_171_1.zip
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0 顶0 踩0

发表回复

高级模式
B Color Image Link Quote Code Smilies
验证码 换一个

回顶部