// Reflected WM_DRAWITEM message handler. LRESULT ClsXPMenu::OnReflectedDrawItem( LPDRAWITEMSTRUCT pdis, BOOL& bNotifyParent ) { // Old style? if ( m_bDrawOldStyle ) // Let the baseclass take care of rendering. return ClsBitmapMenu::OnReflectedDrawItem( pdis, bNotifyParent ); // Menu? if ( pdis->CtlType != ODT_MENU ) return FALSE; // No need to bother the parent. bNotifyParent = FALSE; // Get the item data. ItemData *pData = ( ItemData * )pdis->itemData; // Wrap the DC. ClsDC cDC( pdis->hDC ); int sDC = cDC.SaveDC(); // Render the item. RenderItem( &cDC, pdis, pData ); // Restore DC changes. cDC.RestoreDC( sDC ); return TRUE; }
void CXTPPopupControl::SetRegionAlphaLayer(CXTPImageManagerIcon* pIcon) { if (!pIcon) return; if (!m_pfnUpdateLayeredWindow) return; CXTPImageManagerIconHandle hShadow; hShadow.CopyHandle(pIcon->GetIcon()); if (!hShadow.PreMultiply()) return; PBYTE pBits = hShadow.PreMultiply(); CSize szIcon = hShadow.GetExtent(); int cx = szIcon.cx; int cy = szIcon.cy; BLENDFUNCTION bf; bf.BlendOp = AC_SRC_OVER; bf.BlendFlags = 0; bf.SourceConstantAlpha = 255; bf.AlphaFormat = 0x01; POINT pt = {0, 0}; CClientDC cDC(this); CDC dc; dc.CreateCompatibleDC(&cDC); UINT* pvBits = NULL; HBITMAP hBitmap = CXTPImageManager::Create32BPPDIBSection(cDC, cx, cy, (LPBYTE*)&pvBits); if (pvBits == NULL || hBitmap == NULL) return; MEMCPY_S(pvBits, pBits, cx * cy* 4); HBITMAP hOld = (HBITMAP)SelectObject(dc, hBitmap); ModifyStyleEx(0, WS_EX_LAYERED); m_pfnUpdateLayeredWindow((HWND)GetSafeHwnd(), (HDC)0, 0, &szIcon, dc.GetSafeHdc(), &pt, 0, &bf, 0x02); SelectObject(dc, hOld); DeleteObject(hBitmap); dc.DeleteDC(); m_bLayered = TRUE; }
void CGradientStatic::OnPaint() { CPaintDC cDC( this ); CRect rcClient; GetClientRect( &rcClient ); BOOL bGradient = FALSE; ::SystemParametersInfo( SPI_GETGRADIENTCAPTIONS, 0, &bGradient, 0 ); if( false && bGradient ) { //COLORREF clrCptnRight = ::GetSysColor(COLOR_GRADIENTACTIVECAPTION); //COLORREF clrCptnLeft = ::GetSysColor(COLOR_ACTIVECAPTION); COLORREF clrCptnRight = ::GetSysColor(COLOR_BTNFACE); COLORREF clrCptnLeft = ::GetSysColor(COLOR_BTNFACE); int nShift = 6; int nSteps = 1 << nShift; for( int i = 0; i < nSteps; i++ ) { int nR = (GetRValue(clrCptnLeft) * (nSteps - i) + GetRValue(clrCptnRight) * i) >> nShift; int nG = (GetGValue(clrCptnLeft) * (nSteps - i) + GetGValue(clrCptnRight) * i) >> nShift; int nB = (GetBValue(clrCptnLeft) * (nSteps - i) + GetBValue(clrCptnRight) * i) >> nShift; COLORREF cr = RGB(nR, nG, nB); CRect r2( rcClient ); r2.left = rcClient.left + ((i * rcClient.Width()) >> nShift); r2.right = rcClient.left + (((i + 1) * rcClient.Width()) >> nShift); CRect r3 = r2; r3.left = rcClient.right - r2.right; r3.right = rcClient.right - r2.left; if( r3.Width() > 0 ) cDC.FillSolidRect( r3, cr ); } }