BOOL CSplashScreenEx::SetBitmap(UINT nBitmapID,short red,short green,short blue) { BITMAP bm; m_bitmap.DeleteObject(); if (!m_bitmap.LoadBitmap(nBitmapID)) return FALSE; GetObject(m_bitmap.GetSafeHandle(), sizeof(bm), &bm); m_nBitmapWidth=bm.bmWidth; m_nBitmapHeight=bm.bmHeight; m_rcText.SetRect(0,0,bm.bmWidth,bm.bmHeight); if (m_dwStyle & CSS_CENTERSCREEN) { m_nxPos=(GetSystemMetrics(SM_CXFULLSCREEN)-bm.bmWidth)/2; m_nyPos=(GetSystemMetrics(SM_CYFULLSCREEN)-bm.bmHeight)/2; } else if (m_dwStyle & CSS_CENTERAPP) { CRect rcParentWindow; ASSERT(m_pWndParent!=NULL); m_pWndParent->GetWindowRect(&rcParentWindow); m_nxPos=rcParentWindow.left+(rcParentWindow.right-rcParentWindow.left-bm.bmWidth)/2; m_nyPos=rcParentWindow.top+(rcParentWindow.bottom-rcParentWindow.top-bm.bmHeight)/2; } if (red!=-1 && green!=-1 && blue!=-1) { m_hRegion=CreateRgnFromBitmap((HBITMAP)m_bitmap.GetSafeHandle(),RGB(red,green,blue)); SetWindowRgn(m_hRegion, TRUE); } return TRUE; }
HRGN CreateRgnFromImage(CWnd *pWnd, CxImage *pImage, COLORREF color) { if (NULL == pImage) return NULL; CDC* pDC = pWnd->GetDC(); if (!pDC) return NULL; int iWidth = pImage->GetWidth(); int iHeight = pImage->GetHeight(); CDC dcBmp; CBitmap bmp; dcBmp.CreateCompatibleDC(pDC); //Creates a memory device context for the bitmap bmp.CreateCompatibleBitmap(pDC, iWidth, iHeight); dcBmp.SelectObject(&bmp); pImage->Draw(dcBmp.GetSafeHdc()); HRGN hRgn = CreateRgnFromBitmap(&dcBmp, iWidth, iHeight, color); bmp.DeleteObject(); dcBmp.DeleteDC(); pWnd->ReleaseDC(pDC); return hRgn; }
BOOL CTaskbarNotifier::SetBitmap(LPCTSTR szFileName, int red, int green, int blue) { if (szFileName==NULL || szFileName[0]==_T('\0')) return FALSE; HBITMAP hBmp = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),szFileName,IMAGE_BITMAP,0,0, LR_LOADFROMFILE); if (!hBmp) return FALSE; m_bitmapBackground.DeleteObject(); m_bitmapBackground.Attach(hBmp); BITMAP bm; GetObject(m_bitmapBackground.GetSafeHandle(), sizeof(bm), &bm); m_nBitmapWidth = bm.bmWidth; m_nBitmapHeight = bm.bmHeight; if (red!=-1 && green!=-1 && blue!=-1) { // No need to delete the HRGN, SetWindowRgn() owns it after being called m_hBitmapRegion=CreateRgnFromBitmap((HBITMAP)m_bitmapBackground.GetSafeHandle(),RGB(red,green,blue)); SetWindowRgn(m_hBitmapRegion, true); } return TRUE; }
BOOL CTaskbarNotifier::SetBitmap(LPCTSTR pszFileName, int red, int green, int blue) { if (pszFileName == NULL || pszFileName[0] == _T('\0')) return FALSE; CEnBitmap Bitmap; if (!Bitmap.LoadImage(pszFileName)) return FALSE; m_bitmapBackground.DeleteObject(); if (!m_bitmapBackground.Attach(Bitmap.Detach())) return FALSE; BITMAP bm; m_bitmapBackground.GetBitmap(&bm); m_nBitmapWidth = bm.bmWidth; m_nBitmapHeight = bm.bmHeight; m_bBitmapAlpha = false; if (red != -1 && green != -1 && blue != -1) { // No need to delete the HRGN, SetWindowRgn() owns it after being called m_hBitmapRegion = CreateRgnFromBitmap(m_bitmapBackground, RGB(red, green, blue)); SetWindowRgn(m_hBitmapRegion, TRUE); } return TRUE; }
BOOL CTaskbarNotifier::SetBitmap(CBitmap* Bitmap, int red, int green, int blue) { m_bitmapBackground.DeleteObject(); if (!m_bitmapBackground.Attach(Bitmap->Detach())) return FALSE; BITMAP bm; GetObject(m_bitmapBackground.GetSafeHandle(), sizeof(bm), &bm); m_nBitmapWidth = bm.bmWidth; m_nBitmapHeight = bm.bmHeight; if (red!=-1 && green!=-1 && blue!=-1) { // No need to delete the HRGN, SetWindowRgn() owns it after being called m_hBitmapRegion=CreateRgnFromBitmap((HBITMAP)m_bitmapBackground.GetSafeHandle(),RGB(red,green,blue)); SetWindowRgn(m_hBitmapRegion, true); } return TRUE; }
BOOL CTaskbarNotifier::SetBitmap(CBitmap* pBitmap, int red, int green, int blue) { m_bitmapBackground.DeleteObject(); if (!m_bitmapBackground.Attach(pBitmap->Detach())) return FALSE; BITMAP bm; m_bitmapBackground.GetBitmap(&bm); m_nBitmapWidth = bm.bmWidth; m_nBitmapHeight = bm.bmHeight; m_bBitmapAlpha = false; if (red != -1 && green != -1 && blue != -1) { // No need to delete the HRGN, SetWindowRgn() owns it after being called m_hBitmapRegion = CreateRgnFromBitmap(m_bitmapBackground, RGB(red, green, blue)); SetWindowRgn(m_hBitmapRegion, TRUE); } return TRUE; }
BOOL CSplashScreenEx::SetBitmap(LPCTSTR szFileName,short red,short green,short blue) { BITMAP bm; HBITMAP hBmp; hBmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),szFileName,IMAGE_BITMAP,0,0, LR_LOADFROMFILE); if (!hBmp) return FALSE; m_bitmap.DeleteObject(); m_bitmap.Attach(hBmp); GetObject(m_bitmap.GetSafeHandle(), sizeof(bm), &bm); m_nBitmapWidth=bm.bmWidth; m_nBitmapHeight=bm.bmHeight; m_rcText.SetRect(0,0,bm.bmWidth,bm.bmHeight); if (m_dwStyle & CSS_CENTERSCREEN) { m_nxPos=(GetSystemMetrics(SM_CXFULLSCREEN)-bm.bmWidth)/2; m_nyPos=(GetSystemMetrics(SM_CYFULLSCREEN)-bm.bmHeight)/2; } else if (m_dwStyle & CSS_CENTERAPP) { CRect rcParentWindow; ASSERT(m_pWndParent!=NULL); m_pWndParent->GetWindowRect(&rcParentWindow); m_nxPos=rcParentWindow.left+(rcParentWindow.right-rcParentWindow.left-bm.bmWidth)/2; m_nyPos=rcParentWindow.top+(rcParentWindow.bottom-rcParentWindow.top-bm.bmHeight)/2; } if (red!=-1 && green!=-1 && blue!=-1) { m_hRegion=CreateRgnFromBitmap((HBITMAP)m_bitmap.GetSafeHandle(),RGB(red,green,blue)); SetWindowRgn(m_hRegion,TRUE); } return TRUE; }
HRGN CreateRgnFromBitmap(CWnd *pWnd, HBITMAP hBmp, COLORREF color) { if (!hBmp) return NULL; CDC* pDC = pWnd->GetDC(); if (!pDC) return NULL; BITMAP bm; GetObject( hBmp, sizeof(BITMAP), &bm ); // get bitmap attributes CDC dcBmp; dcBmp.CreateCompatibleDC(pDC); //Creates a memory device context for the bitmap HGDIOBJ hOldBmp = dcBmp.SelectObject(hBmp); //selects the bitmap in the device context HRGN hRgn = CreateRgnFromBitmap(&dcBmp, bm.bmWidth, bm.bmHeight, color); dcBmp.SelectObject(hOldBmp); dcBmp.DeleteDC(); //release the bitmap pWnd->ReleaseDC(pDC); return hRgn; }