zoukankan      html  css  js  c++  java
  • 酷,半透明和形状对话框与标准的控制Windows 2000及以上

    介绍 首先,让我向你展示一些截图捕获的演示程序。 程序演示了半透明兼容Windows 2000和更高的对话框。 背景 分层的窗户,从windows NT 5.0支持,提供一种方法来创建windows有复杂的形状与α混合效果。主要的挑战是如何在分层显示标准控件窗口。 下面显示了机制: 当创建对话框,一个假窗是由CreateWindowEx风格WS_EX_LAYERED, WS_EX_TRANSPARENT, WS_EX_NOACTIVATE。真正的窗口的alpha值将被修改为5 SetLayeredWindowAttributes这样真实窗户几乎是透明的。 真正的窗口负责处理用户输入事件和Windows消息;假的一个负责演讲。假窗口总是保持同样的大小/真正的地位。 我们如何显示标准控制假窗吗?表示需要刷新时,背景图像画。然后,所有子控件将被发送WM_PRINT消息,和画在同一位置假窗。特别是对于编辑控件,EditBox /可编辑的组合框等,我们需要画出自己脱字符号。 我们应该刷新显示?我们需要刷新假窗户上有一个更新UI。在演示中,递归地它钩到所有子控件,和改变指向地址通过SetWindowLongPtr GWLP_WNDPROC参数。 你可以得到更多的细节查看源代码。 使用本机c++ / MFC的代码 第一步 复制所有文件/ Src / *。*您的项目。 第二步 你需要一个图像文件的对话框背景。你最好选择PNG或TIFF支持alpha通道。图像文件可以嵌入到一个资源或放在磁盘,评判自己。 最后一步 取代基类从CDialog CImgDialogBase所示的对话框。 隐藏,复制Code

    // Load from disk file
    CDemo2Dlg::CDemo2Dlg(CWnd* pParent /*=NULL*/)
        : CImgDialogBase( CDemo2Dlg::IDD
        , CUtility::GetModulePath() + _T("background.png")
        , pParent
        )
    {
    
    }
    
    // Or load from resource
    CDemo3Dlg::CDemo3Dlg(CWnd* pParent /*=NULL*/)
        : CImgDialogBase(CDemo3Dlg::IDD
        , IDB_PNG_DLG2
        , _T("PNG")
        , AfxGetResourceHandle()
        , pParent
        )
    {
    
    }

    在WinForms / net中使用的代码 第一步 复制文件/ Src / *。*目录到您的项目。 第二步 你需要一个图像文件的对话框背景。你最好选择PNG或TIFF支持alpha通道。 最后一步 取代基类从形式到ImageDlgBase所示的对话框。 隐藏,复制Code

    public partial class Form2 : CoolImageDlg.ImageDlgBase
    {
        public Form2()
        {
            base.DlgBgImg = ImgDlgSample.Properties.Resources.DemoDlgBg2;
            //......
        }
    }

    一些重要的事情 对话框,如果有工作需要更新一个像素,整个窗口将被刷新。因此,如果对话框非常大而复杂的,或者有很多子控件,它可能会导致性能问题。 的一些控件无法使用WM_PRINT;在这种情况下,控制不会正确显示。换句话说,并不是所有的控件都支持。 示例代码使用GDI +从Zoltan Csizmadia助手类。对于那些不想使用GDIPlus。dll, CxImage是另一个选择。 Image 5 大多数的机器使用96 DPI的显示器设置。这些机器的使用一个不寻常的DPI设置,请注意演示并不意味着这样的设置和子控件将是错误的。您需要添加自己的代码重新布局的子控件,如果你需要支持不同寻常的dpi。 本文转载于:http://www.diyabc.com/frontweb/news11995.html

  • 相关阅读:
    学习网站
    Windows下python安装运行
    Python学习
    ES学习
    Eclipse安装lombok及常用注解
    Spark学习资料
    Spring Cloud学习资料
    使用Excel过滤重复数据
    Excel根据字符串截取单元格部分内容
    Spring中@Transactional(rollbackFor = Exception.class)的作用
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473448.html
Copyright © 2011-2022 走看看