389上位机VC MFC实现鼠标点缀特效
实现鼠标点缀特效
功能展示
系统指针一般都是单一的白色箭头,如果箭头边上跟随一漂亮昆虫进行点缀,将会很漂亮,我们当前例程就实现这一功能,效果如图,例程一运行就会显示一蝴蝶并实时跟随鼠标箭头的移动,读者可根据前例程<实现桌面爬行昆虫特效>使用GDI+实现更炫酷的效果;
要点提示
动态蝴蝶的实现是通过启动一计时器,顺序循环的加载及显示例程中的8幅位图完成。
蝴蝶跟随鼠标的原理是在定时器中实现获取鼠标的位置,然后通过MoveWindow()或SetWindowPos()函数将窗口移动到鼠标边上;例程使用的是SetWindowPos()函数。
SetWindowPos函数改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
函数原型: BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
pWndInsertAfter为窗口的Z序,可以有wndBottom???, wndTop?,? wndTopMost, wndNoTopMost???顾名思义很好理解其含义,可以查阅MSDN手册,X,Y,CX,XY,为窗口新的左上角点及窗口大小。 nFlags 指定改变窗口大小位置的选项,可以有SWP_HIDEWINDOW??, SWP_FRAMECHANGED ,SWP_NOACTIVATE???等等
实现功能
1.新建基于对话框的应用程序
2.将例程根目录下res文件夹内的八幅位图复制到自己工程相应文件夹内,并依次加载到工程中,例程的图片对应ID为IDB_BM1对res\1.bmp,以此类推
3.在主对话框头文件添加变量及函数private: int m_Num;//图标索引
CPoint m_pOint;//窗口旧位置点 void FollowMouse(); 并初始化
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BM1);
BITMAP BM;
bitmap.GetBitmap(&BM);
MoveWindow(0,0,BM.bmWidth,BM.bmHeight);//设置窗口大小
m_Num = 0;
SetTimer(1,100,NULL);
4.添加定义器处理函数及背景重绘消息WM_CTLCOLOR函数
void CGkbc8Dlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent == 1)
FollowMouse();
CDialog::OnTimer(nIDEvent);
}
HBRUSH CGkbc8Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
CBitmap BKGround;
BKGround.LoadBitmap(IDB_BM1+m_Num); //加载图片资源
if (nCtlColor==CTLCOLOR_DLG)
{
CBrush Brush(&BKGround); //定义一个位图画刷
CRect rect;
GetClientRect(rect); //获得客户区域
pDC->SelectObject(&Brush); //选中画刷
pDC->FillRect(rect,&Brush); //填充客户区域
return Brush;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|