精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
自动隐藏到桌面侧边栏的图形绘制软件。通过鼠标钩子使侧边栏显示或隐藏,类似QQ窗口的显示和隐藏效果。侧边栏里有视图,视图里图形绘制效果类似跳绳,跳绳上下位置状态在隐藏时能够自动保存,并在显示侧边栏时跳绳继续,继续时用的位置是保存过的位置。
开发时间:一天半;
代码:400行左右;
环境:VC++6.0,MS XP系统。
移植AppBarMngr实现窗口的滑动效果。
在本例中,跳绳的绘制是通过一个取巧的方法实现的,也就是通过在椭圆上覆盖矩形而只使其显示一半图形实现的,跳动的效果就是控制该覆盖矩形的上下覆盖位置而已,该功能可通过定时器来实现。
此功能为此例子的重点与难点所在,首先是要让它在鼠标滑出窗口区域时能让跳绳停止跳动,这比较简单,在AppBarMngr.cpp中找到显示窗口和隐藏窗口时发送的那两个消息的处理函数,并在发送WM_USER+2(窗口显示)时设置定时器,而在View类中来响应WM_TIMER消息,其中的OnTimer消息响应函数的功能就是判断何时该显示上弦椭圆,何时该显示下弦椭圆。在发送WM_USER+3(窗口隐藏)消息时杀死定时器,这时跳绳就会停止跳动。在OnTimer中定义一个状态变量来区分何时显示上下弦椭圆,并在不同状态下向OnDraw中的绘制代码传递不同的参数,而在杀死定时器的同时,该状态会记录此时跳绳跳动的位置信息,所以当窗口再次显示时即发送WM_USER+2消息时就会从该状态变量先前的状态继续执行,从而也就实现了对跳绳跳动状态的记录。
通过对WM_GETMINMAXINFO消息响应来实现。
添加对WM_NCHITTEST消息的消息响应函数,并判断基类该消息响应函数的返回值的类型是否为HTCAOTION,也就是判断鼠标所在区域是否是标题区,若在,就将HTCLIENT作为函数的返回值返回;实现原理就是若鼠标在标题区就将标题栏作为客户区进行处理,因为客户区是不能进行拖拽的。
void CAppbardrawlineView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Invalidate();
if(showstate)
{
y1=200;
y2=350;
showstate=FALSE;
}
else
{
y1=350;
y2=500;
showstate=TRUE;
}
CView::OnTimer(nIDEvent);
}