zoukankan      html  css  js  c++  java
  • 产生半透明的对话框和窗口没有闪烁

    问题 AnimateWindow () API AW_BLEND参数 应该消失在windows顺利。基本上,它有两个缺点: 文本和ListView控件(和其他)并没有呈现 正确地在淡入。你不能指定一个半透明的窗口,即。后, 动画,是不透明的窗口。 点击“不”在示例项目展示了这两个问题。 解决方法? 似乎有一个简单的解决方法:添加 WS_EX_LAYERED扩展风格的窗口和调用 与所需的alpha值,SetLayeredWindowAttributes () 描述在MSDN Library和各种各样的其他来源。 不幸的是,这没有奏效,至少在我的XP专业版系统。的代码 产生一个非常讨厌的闪烁:窗口区域 最初的黑色。 解决方案 下面的代码展示了如何在一个对话框消失predefinded 没有闪烁的半透明: 隐藏,收缩,复制Code

    INT_PTR CALLBACK DialogProc(
      HWND hwndDlg,  // handle to dialog box
      UINT uMsg,     // message
      WPARAM wParam, // first message parameter
      LPARAM lParam  // second message parameter
      ) 
    {
       RECT rcDesktop;
       RECT rcMe;
    
       BYTE bTranslucency;
    
       const DWORD ANIMATION_MILLIS = 200;
       const BYTE TRANSLUCENCY = 192;
       const BYTE TRANSLUCENCY_STEP = 16;
       const DWORD TRANSLUCENCY_TIMEOUT 
          = TRANSLUCENCY_STEP * ANIMATION_MILLIS / TRANSLUCENCY;
    
       switch (uMsg) {
       case WM_INITDIALOG:
          // Make it a layered window.
          ::SetWindowLong(hwndDlg, GWL_EXSTYLE,
             ::GetWindowLong(hwndDlg, GWL_EXSTYLE) | WS_EX_LAYERED);
    
          // Completely transparent window - note the third parameter
          ::SetLayeredWindowAttributes(hwndDlg, 0, 0, LWA_ALPHA);
    
          // Show it _first_
          ::ShowWindow(hwndDlg, SW_SHOW);
    
          // Redraw contents NOW - no flickering since the window's not visible
          ::RedrawWindow(hwndDlg, NULL, NULL, RDW_UPDATENOW); 
    
          // Normally, you would use a timer here...
          for (bTranslucency = 0; bTranslucency < TRANSLUCENCY;
          bTranslucency+=TRANSLUCENCY_STEP) {
             // Adjust the translucency
             ::SetLayeredWindowAttributes(hwndDlg, 0, bTranslucency, LWA_ALPHA);
    
             // Wait
             ::Sleep(TRANSLUCENCY_TIMEOUT);
          }
    
          // Set the final translucency
          ::SetLayeredWindowAttributes(hwndDlg, 0, bTranslucency, LWA_ALPHA);
          break;
       }
    
       return 0;
    }

    注意,调用显示窗口()通常是做的 CreateDialogXXX如果对话框模板()函数 WS_VISIBLE风格。对于我们的目的,我们要做的是对的 在应对WM_INITDIALOG消息。 本文转载于:http://www.diyabc.com/frontweb/news12415.html

  • 相关阅读:
    Eclipse背景颜色修改
    Android动画效果translate、scale、alpha、rotate详解
    代理上网的方法
    ubuntu系统使用SSH免密码登陆
    Git的思想和基本工作原理
    GitHub详细教程
    Ubuntu和Redhat(Debian)的差别
    T2: 一种能累积计算积分的EC2实例类型
    win server 2008 r2 iis+php 500错误内部服务器错误。
    从OTF字体文件里查找字体名称
  • 原文地址:https://www.cnblogs.com/Dincat/p/13474166.html
Copyright © 2011-2022 走看看