使窗口实现“淡入淡出”效果(非原创)

简介: 使窗口逐渐浮现,退出时逐渐消失,这主要是通过设置增强窗口样式为图层窗口,然后设置窗口的alpha值来实现的。在c#中,对应的是Form.Opacity属性。这是老外的一篇帖子里面提到的,但我对代码做了一些改进,使代码更为直观易用。
         使窗口逐渐浮现,退出时逐渐消失,这主要是通过设置增强窗口样式为图层窗口,然后设置窗口的alpha值来实现的。在c#中,对应的是Form.Opacity属性。这是老外的一篇帖子里面提到的,但我对代码做了一些改进,使代码更为直观易用。
         实现窗口的“淡出”,我们需要在创建窗口时指定窗口样式,这可以在窗口过程中创建或者初始化消息中处理,对于对话框程序,代码如下:
Code-WndProc
INT_PTR CALLBACK DlgProc(HWND hDlg,UINT Msg,WPARAM wParam,LPARAM lParam)
{
    
switch(Msg)
    {
        
case WM_INITDIALOG:
        {
            
//添加菜单等            //将窗口设置为图层窗口样式
            SetWindowLong(hDlg,GWL_EXSTYLE,::GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);        
            
return true;
        }
       
case WM_CLOSE:
        {
            
//使窗口渐渐变得透明,然后关闭!!!!
            for(int i=100;i>0;i--)
                SetLayeredWindowAttributes(hDlg,
0255*i/100, LWA_ALPHA);
            
//发送WM_QUIT消息,使消息循环结束,程序退出!
            PostQuitMessage(0);
            
return true;
        }
   }
  
return false;
}

         实现窗口的“淡入”效果的代码如下,在WinMain函数中,我们使用如下代码:
        
Code-WinMain
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int ShowCmd)
{
        
//注册窗口类
       
        MainForm=CreateDialog(hInstance,(LPCTSTR)IDD_MAINFORM,NULL,DlgProc);
        //显示前先将窗口设为透明度为0!    
        SetLayeredWindowAttributes(MainForm,0,0, LWA_ALPHA);
        
//显示窗口
        ShowWindow(MainForm,SW_SHOW);
       
//使窗口从透明逐渐浮现!
        for(int i=0;i<=100;i++)
             SetLayeredWindowAttributes(MainForm,
0255*i/100, LWA_ALPHA);
        
//消息循环
        return 0;    
}

 

 

          ===================================

                    补充 by hoodlum1980 2008年12月22日18:40:30

          ===================================

          另外,不使用图层窗口,可以使用 AnimateWindow 这个 API 函数来完成类似功能:

          例如:AnimateWindow(hDlg, 200, AW_HIDE | AW_BLEND); //使窗口渐隐。

目录
相关文章
|
移动开发 小程序 JavaScript
【小程序质量提优解决方案】(二)内嵌H5加载异常(404)
【小程序质量提优解决方案】(二)内嵌H5加载异常(404)
478 0
|
存储 NoSQL 搜索推荐
若依框架----源码分析(@RateLimiter)
若依框架----源码分析(@RateLimiter)
888 0
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
467 2
|
Java Maven
【Java用法】使用EasyPoi导入与导出Excel文档的解决方案
【Java用法】使用EasyPoi导入与导出Excel文档的解决方案
857 0
|
Java
面试官:实战中用过CountDownLatch吗?详细说一说,我:啊这...
【5月更文挑战第4天】面试官:实战中用过CountDownLatch吗?详细说一说,我:啊这...
172 1
|
Shell 机器学习/深度学习 Linux
Linux 终端操作命令(2)内部命令
Linux 终端操作命令(2)内部命令
278 0
Linux 终端操作命令(2)内部命令
|
Python Windows
python安装第三方包
python安装第三方包
207 0
|
机器学习/深度学习 自然语言处理 并行计算
全面支持 PyTorch 2.0:BladeDISC 5月~11月新功能发布
BladeDISC 上一次更新主要发布了 GPU AStitch 优化,方法来源于我们发表在 ASPLOS 2022上的论文AStitch。这一次,我们发布了 0.3.0 版本。
|
缓存 测试技术 芯片
内核笔记](二)——设备树基础
内核笔记](二)——设备树基础
762 0