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; }