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)建和位圖 一樣的對話框了 |
|