創建一個基於Dialog的工程(MFC)
在 BOOL CDialogXXXApp::InitInstance()中添加以下代碼
SetDialogBkColor(RGB(100, 100, 228), RGB(225, 100, 100));
//將下面店面放在初始化函數中
在 BOOL CDialogXXXDlg::OnInitDialog()中添加以下代碼
//設置類型,添加WS_EX_LAYERED 早起版本沒有這個需要直接設定爲 0x80000
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *DFUNC)(HWND,COLORREF,BYTE,DWORD);
DFUNC Func = NULL;
fun=(DFunc)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),RGB(100, 100, 228)/*要透明的顏色*/,255/*0-255 0:透明*/,2 | 1);
FreeLibrary(hInst);
}
在 void CDialogXXXDlg::OnPaint() 中添加以下代碼
if (IsIconic())
{
}
else {
CClientDC *pDC = new CClientDC(this);
CRect rectClient;
GetClientRect(rectClient); //GetDlgItem(IDC_BUTTON5)->
CBrush bsh;
bsh.CreateSolidBrush(RGB(122, 122, 255));
CBrush* pOldbsh = pDC->SelectObject(&bsh);
pDC->Ellipse(rectClient);//只要是背景色不是RGB(100, 100, 228)的區域都可以顯示出來,
//這樣就可以對要顯示的區域設置不同的顏色來顯示。
pDC->SelectObject(pOldbsh);
pOldPen = pDC->SelectObject(&penBlue);
}
*以下是說明
BOOL SetLayeredWindowAttributes( HWND hwnd, // handle to the layered window COLORREF crKey, // specifies the color key BYTE bAlpha, // value for the blend function DWORD dwFlags // action );
hWnd是透明窗體的句柄, crKey爲掩碼的顏色,可以用RGB(r,g,b)來指定。 bAlpha是不透明度,取值範圍是(0,255),其中0代表全透明,255代表不透明。 dwFlags是透明方式,可以取兩個值: 當取值爲LWA_ALPHA時,crKey參數無效,bAlpha參數有效; 當取值爲LWA_COLORKEY時,窗體中的所有顏色爲crKey的地方將變爲透明,bAlpha參數無效。 LWA_ALPHA = 0x2 LWA_COLORKEY=0x1 也可以取兩個值的組合:LWA_ALPHA Or LWA_COLORKEY。這樣crKey的地方將變爲全透明,而其它地方根據bAlpha參數確定透明度。