zoukankan      html  css  js  c++  java
  • VC窗体透明而控件不透明以及Static文本背景透明方法

    出自http://my.oschina.net/ypimgt/blog/60951

    优点:
        1.Dialog 窗体完全透明。 
        2. 窗体上的控件不透明、 DC 绘制的图形不透明。 
        3. 拖动窗体上用 DC 绘制的图形可以移动窗体。 
    缺点: 
        1. 窗体设置透明使用是掩码颜色,所以在窗体上用 DC 绘图的过程当中如果采用了和透明掩码颜色相同的颜色将不会显示出来。 
        2. 如果将 Border 属性设置成了 NONE ,那么想通过响应 WM_NCHITEST 消息来实现窗体拖动就无法完成了。只能通过在窗体中增加 DC 绘图的方式来完成。 

        3.DC绘图时虽然支持半透明绘图,但是透明绘图区域不透明。

    1.在OnInitDialog()或OnPaint()中加入:

    1
    2
    3
    4
    5
    <b>COLORREF maskColor = RGB(255,255,255);   //掩码颜色
    SetWindowLong(this->GetSafeHwnd(),
                  GWL_EXSTYLE,
                  GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)| 0x80000);  //设定窗体使用扩展模式
    SetLayeredWindowAttributes(maskColor,255,1);  </b>

    2.在重载的消息WM_CTLCOLOR中加入:(其中包括Static背景透明方法)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <b>HBRUSH CTimeRemainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
     
        // TODO:  在此更改 DC 的任何特性
        //
        if(nCtlColor == CTLCOLOR_DLG)   //此处设置为窗体透明,CTLCOLOR_DLG表示对话框
        {
            CBrush *brush;
            brush = new CBrush(RGB(255,255,255));
            return (HBRUSH)(brush->m_hObject);
        }
        switch(pWnd->GetDlgCtrlID())   //此处为设置Static Text文本透明。
        {
        case IDC_LEFTTOP:
            pDC->SetBkMode(TRANSPARENT);
            pDC->SetTextColor(RGB(125,0,0));
            return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
        default: break;
        }
        // TODO:  如果默认的不是所需画笔,则返回另一个画笔
        return hbr;
    }</b>
  • 相关阅读:
    Mongodb $in $or 性能比较
    c# mongo 数组里对象更新
    C# mongodb $set或$addToSet批量更新很慢原因
    docker 使用
    Ubuntu 下更简单的防火墙 Uncomplicated Firewall
    Docker 介绍及安装
    linux 内核分析工具 Dtrace、SystemTap、火焰图、crash等
    golang 中处理大规模tcp socket网络连接的方法,相当于c语言的 poll 或 epoll
    golang 对struct进行Serialize的方法,即将存取二进制文件到struct的方法
    golang 中创建daemon的方法
  • 原文地址:https://www.cnblogs.com/chenshaogang/p/4312869.html
Copyright © 2011-2022 走看看