1 先準(zhǔn)備一副位圖
2 復(fù)制一份位圖,將第一幅位圖要透明的地方填充為 黑色
在對話框的 OnInitialDialog 函數(shù)中添加:如下代碼
////////在這里添加下面代碼
COLORREF maskColor = RGB(255,255,255); // 將要設(shè)置為 透明色彩的顏色
//SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)|0x80000);
////ModifyStyleEx(0, WS_EX_LAYERED);//修改窗口屬性為WS_EX_LAYERED 者三種都可以設(shè)置窗口的擴展屬性
HINSTANCE hInst=LoadLibrary(_T("User32.DLL"));
if(hInst)
{
typedef BOOL (WINAPI * MYFUNC)(HWND , COLORREF,BYTE,DWORD);
MYFUNC fun=NULL;
fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),maskColor,255,1);
FreeLibrary(hInst);
}
在 OnPaint() 函數(shù)中
/////// 添加如下代碼
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(255,255,255)); // 這里填充的 要和前面設(shè)置的透明標(biāo)志色要一樣
CBitmap bmp1,bmp2;
bmp1.LoadBitmapA(IDB_BMPMAIN1); // 填充了標(biāo)志色的
bmp2.LoadBitmapA(IDB_BMPMAIN2);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap* pbmpOld;
pbmpOld = memDC.SelectObject(&bmp1);
dc.BitBlt(0, 0, 2000, 1500, &memDC, 0, 0, SRCPAINT); // 注意最后一個參數(shù)
memDC.SelectObject(&bmp2);
dc.BitBlt(0, 0, 2000, 1500, &memDC, 0, 0, SRCAND); // 注意最后一個參數(shù)
memDC.SelectObject(pbmpOld);
memDC.DeleteDC();
這樣就可以創(chuàng)建和位圖 一樣的對話框了