36上位机VC MFC实现程序动画显示
36上位机VC MFC实现程序动画显示
功能展示
MFC默认新建的上位机程序,窗体的显示是在一瞬间完成的,如果使我们自己设计的程序在显示时个性化地动画显示,会更加吸引用户增加程序的趣味性,我们当前例程就来实现这一功能,效果如图
要点提示
要实现动画显示窗口的效果我们可以使用函数MoveWindow函数,也可以使用SetWindowPos 函数,两个函数都x,y,cx四个参数作为窗口要设置的位置和大小,我们只要更改这四个参数便可实现动画效果;我们这里以第二函数来实现 BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags ); x,y,cx,四个参数为窗口所以设置的位置和大小; pWndInsertAfter为指定窗口的Z顺序,我们就可以通过设置此参数为&wndTopMost,实现窗口最前显示效果; nFlags窗口尺寸和定位的标志 实现功能 1.新建基于对话框的应用程序
2.在主窗口中选择性添加虚函数PreTranslateMessage()窗口不可移动功能 - BOOL CGkbc8Dlg::PreTranslateMessage(MSG* pMsg)
- {
- // TODO: Add your specialized code here and/or call the base class
- if(pMsg->message==WM_NCLBUTTONDOWN)
- {
- pMsg->message=WM_LBUTTONDOWN;
- }
-
- return CDialog::PreTranslateMessage(pMsg);
- }
复制代码3.添加变量 INTm_nDx;INT m_nDy;INT m_nWidth;INT m_nHeight;
在对话框初始化函数OnInitDialog()里进行程序初化 - CRect rect;
- GetWindowRect(rect);
- m_nDx =10; //宽的增量
- m_nDy = 10;//高的增量
- m_nWidth = rect.Width();//窗口的正常宽
- m_nHeight = rect.Height();//窗口正常的高
- MoveWindowToMosttop();//设置窗口为最顶端居中显示
- SetTimer(1,10,NULL);//启动定时器
复制代码- void CGkbc8Dlg::MoveWindowToMosttop()
- {
- CRect rect;
- GetWindowRect(rect);
- int x = (GetSystemMetrics(SM_CXSCREEN)-rect.Width())/2;
- int y= (GetSystemMetrics(SM_CYSCREEN)-rect.Height())/2;
- SetWindowPos(&wndTopMost,x,y,rect.Width(),rect.Height(),SWP_NOREDRAW);
- }
复制代码4.实现定时器函数的处理 - void CGkbc8Dlg::OnTimer(UINT nIDEvent)
- {
- // TODO: Add your message handler code here and/or call default
- if(1 == nIDEvent)
- {
- CRect rect;
- GetWindowRect(rect);
- int x = (GetSystemMetrics(SM_CXSCREEN)-rect.Width()-m_nDx)/2;
- int y= (GetSystemMetrics(SM_CYSCREEN)-rect.Height()-m_nDy)/2;
- SetWindowPos(&wndTopMost,x,y,rect.Width()+m_nDx,rect.Height()+m_nDy,SWP_NOREDRAW);
- if(rect.Width()>=m_nWidth)
- {
- m_nDx=0;
- }
- if( rect.Height()>=m_nHeight)
- {
- m_nDy=0;
- }
- if(rect.Width()>=m_nWidth&&rect.Height()>=m_nHeight)
- {
- KillTimer(1);
- //load skin
- CGkbc8App * pApp = (CGkbc8App *)AfxGetApp();
- pApp->RandomChangeSkin();
- }
- Invalidate();
- }
- CDialog::OnTimer(nIDEvent);
- }
复制代码演示功能实现的过程 源码及视频下载 (仅在电脑可见)
|