Exemplo n.º 1
0
// 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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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 );
		}
    }