VC窗体透明而控件不透明以及Static文本背景透明方法

优势:
       1.Dialog
窗体彻底透明。
    2.
窗体上的控件不透明、 DC 绘制的图形不透明。
    3.
拖动窗体上用 DC 绘制的图形能够移动窗体。
缺点:
    1.
窗体设置透明使用是掩码颜色,因此在窗体上用 DC 绘图的过程中若是采用了和透明掩码颜色相同的颜色将不会显示出来。
    2.
若是将 Border 属性设置成了 NONE ,那么想经过响应 WM_NCHITEST 消息来实现窗体拖动就没法完成了。只能经过在窗体中增长 DC 绘图的方式来完成。

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

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

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

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

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; }
相关文章
相关标签/搜索