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; }
相關文章
相關標籤/搜索