MFC 中实现窗口淡入淡出、逐步放大显示效果
来源:互联网 发布:怎样下载英语软件 编辑:程序博客网 时间:2024/06/09 01:02
MFC 中实现窗口淡入淡出、逐步放大显示效果,主要是利用相关函数+定时器实现
1、 窗口逐步放大显示:
这里要用到CRECT的三个函数InflateRect()、CenterPoint()、SetRect()
SetRect()初始化rect
CenterPoint()返回rect的中心点
InflateRect(wstep,hstep)rect以wstep和hstep步长放大/缩小(步长为负则缩小)。
SetTimer()设置一个定时器
KillTimer()使用结束后销毁该定时器
下面实现对话框中的IDC_STATIC1控件放大效果:
1. 在OnInitalDialog()中添加
GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);//获取对话框中的IDC_STATIC1控件,
m_w=rect.Width();
m_h=rect.Height();
m_stepx=m_w/10;
m_stepy=m_h/10;
GetWindowRect(&rect);
rect.SetRect(rect.CenterPoint(),rect.CenterPoint());
GetDlgItem(IDC_STATIC1)->SetWindowPos(NULL,rect.left,rect.top,
rect.Width(),rect.Height(),SWP_SHOWWINDOW);
SetTimer(111,300,NULL);//设置一定时器
在OnTimer()中
if(nIDEvent==111)
{
if(m_step<5)
{
rect.InflateRect(m_stepx,m_stepy);
GetDlgItem(IDC_STATIC1)->SetWindowPos(NULL,rect.left,rect.top,
rect.Width(),rect.Height(),SWP_SHOWWINDOW);
g_pSetLayeredWindowAttributes(this->m_hWnd, 0, (BYTE)m_tm, 2);
::RedrawWindow(m_hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
m_step++;
m_tm=m_step*255/4;//设置当前的透明度值,通过修改该值可以使窗口以不同透明度显示
}
else
{
KillTimer(111);
}
}
这样就实现了逐步放大显示的效果
2. 对话框淡入的效果
这里使用了Windows2000的API函数SetLayeredWindowAttributes()实现淡入淡出效果,该函数定义如下:
BOOL SetLayeredWindowAttributes(
HWND hwnd, // handle to the layered window 透明窗体的句柄
COLORREF crKey, // specifies the color key 颜色值
BYTE bAlpha, // value for the blend function 透明度,取值范围是[0,255]
DWORD dwFlags // action 透明方式
);
dwFlags可以取两个值:
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
当取值为LWA_COLORKEY时,bAlpha参数有效,而窗体中的所有颜色为crKey的地方将变为透明。
LWA_ALPHA = 0x2
LWA_COLORKEY=0x1
其中dwFlags有LWA_ALPHA(值为2)和LWA_COLORKEY(值为1)两种设置,如果LWA_ALPHA被设置的话,通过bAlpha参数指定窗体的透明度;如果LWA_COLORKEY标志被设置的话,则指定关键色为crKey,该颜色所覆盖的区域将从窗体去除,去除后的区域将不再进行点击检测,其他颜色则正常显示。如果阿尔法混合值设置为0,其窗口区域同样不进行点击检测。
在使用时我们在OnInitalDialog()中添加
m_hUser32= GetModuleHandle(_T("USER32.DLL"));
g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(m_hUser32, "SetLayeredWindowAttributes");
if (g_pSetLayeredWindowAttributes == NULL)
::PostQuitMessage(0);
HWND hWnd = GetSafeHwnd();
LONG lWindowLong = GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED;
::SetWindowLong(hWnd, GWL_EXSTYLE, lWindowLong);
//关键是下面这两句
g_pSetLayeredWindowAttributes(hWnd, 0, (BYTE)m_tm, 2);
::RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
在OnTimer()中添加:
g_pSetLayeredWindowAttributes(this->m_hWnd, 0, (BYTE)m_tm, 2);
::RedrawWindow(m_hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);//参考上面的程序
注:m_hUser32、g_pSetLayeredWindowAttributes定义为类的成员变量
使用结束后记得调用FreeLibrary()释放对DLL的使用
本程序在DestroyWindow()中释放
if(m_hUser32!=NULL)
::FreeLibrary(m_hUser32);
- MFC 中实现窗口淡入淡出、逐步放大显示效果
- MFC 中实现窗口淡入淡出、逐步放大显示效果
- 窗口淡入淡出效果
- 窗口淡入淡出效果的实现
- 窗口淡入淡出效果的实现
- 窗口淡入淡出效果的实现
- 窗口淡入淡出效果的实现
- jQuery实现窗口的淡入淡出效果
- 窗口淡入淡出效果的实现 .
- [转]VC2005中实现窗口淡入淡出
- 实现淡入淡出效果
- J2me中实现淡入淡出效果
- J2me中实现淡入淡出效果【收录】
- J2me中实现淡入淡出效果
- MFC 对话框淡入淡出效果
- jquery中实现显示、隐藏、淡入淡出
- API实现窗口透明、滑动、淡入淡出等动画效果
- Java实现淡入淡出窗口
- Ogitor编译
- C优先级的口诀
- box2d系列之创建b2Revolutejoint
- 整型到底占几个字节呢?
- 继续摘抄:一些做人做事的经验
- MFC 中实现窗口淡入淡出、逐步放大显示效果
- perl链接Oracle数据库
- 继续摘抄:一些面试题及答案
- 关于Discuz论坛整合问题
- 多年前对《代码大全》作者的采访
- 继续摘抄:牢记!SQL Server数据库开发的二十一条军规(SQL收藏)
- 运行无线网络模拟出现的错误与解决方法
- seo 工具
- JPanel 添加JLabel 设置组件字体颜色