• 创建非矩形对话框的简单方法


    介绍 对话框通常是矩形的。可以采用多种方法使其在形状上非矩形。但是,这些方法中的大多数都很复杂,适合使用皮肤创建具有皮肤或图像形状的对话框的应用程序。如果对话框所需的形状很简单,比如圆角矩形或椭圆,那么可以使用更简单的方法。在这个方法中,创建多个CRgn对象,然后组合(区域的联合)来创建一个复合区域。对话框然后给出复合区域的形状。 的代码 所有需要的代码都在对话框的OnInitDialog方法中 步骤1:设置对话框样式 为了改变对话框的形状,在对话框的OnInitDialog中,对话框的标题和边框被删除。隐藏,复制Code

     ...
    //  Remove caption and border
    SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE)
         & (~(WS_CAPTION | WS_BORDER)));
    ...
    

    步骤2:创建单独的区域 然后使用对话框的windowHide坐标创建单个的椭圆区域。复制Code

    //  Get the rectangle
    CRect rect;
    GetWindowRect(&rect);
    int w = rect.Width();
    int h = rect.Height();
    
    CRgn rgn1;
    CRgn rgn2;
    
    //  Create the top ellipse
    rgn1.CreateEllipticRgn(1, 1, w, h/2 + 30);
    
    //  Create the bottom ellipse
    rgn2.CreateEllipticRgn(1, h/2 - 30, w, h);
    

    步骤3:将这些区域合并为一个区域 这些区域被组合成一个单独的区域。这种结合实际上是所有独立区域的结合。复制Code

    //  Combine the two ellipses
    CombineRgn(rgn1, rgn1, rgn2, RGN_OR);
    

    步骤4:改变对话框的形状到区域 对话框的形状可以使用下面的代码隐藏来更改复制Code

    //  Set the window region
    SetWindowRgn(static_cast<HRGN>(rgn1.GetSafeHandle()), TRUE);
    

    第五步:清理 CRgn对象需要与区域分离,否则当rgn对象离开scopeHide时,CRgn析构器会关闭HRGN句柄。复制Code

    rgn1.Detach();
    rgn2.Detach();
    

    历史 初始版本 本文转载于:http://www.diyabc.com/frontweb/news3570.html

  • 相关阅读:
    c++继承与多态
    逻辑运算符
    页面分栏布局
    js中的三大特殊数据:undefined,null,NaN
    逻辑分支中if小括号中的隐式转换
    最小高度的兼容方法
    js数据类型的转换
    ognl.OgnlException: target is null for setProperty(null, "goodsSize", [Ljava.lang.String;@c3bb5。
    解决拦截器的对于参数传递无效问题
    引用外部js乱码问题
  • 原文地址:https://www.cnblogs.com/Dincat/p/13461152.html
Copyright © 2020-2023  润新知