2009-06-10 5 views

Répondre

1

Jetez un oeil à this article et il existe un control library qui prend en charge alpha blending que vous pourriez également étendre au contrôle ListView.

1

Vous le faites de la même manière que dans win32.

Tout ce que vous devez faire est de sous-classer le contrôle et remplacer le message de fenêtre WM_ERASEBKGND. Vous pouvez également remplacer le message WM_CTLCOLOR pour définir le mode texte sur TRANSPARENT.

Je l'ai fait sur presque tous les contrôles standard et cela fonctionne très bien.

Mise à jour:

Cet exemple à partir de MFC, vous devez toujours dessiner l'arrière-plan sur le contrôle par une méthode.

class TransparentListView : public CListView 
    { 
    public: 
     TransparentListView(); 
     virtual ~ToolsListCtrl(); 

    protected: 
     afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/); 
     afx_msg BOOL OnEraseBkgnd(CDC* pDC); 

    private: 
     DECLARE_MESSAGE_MAP(); 
    }; 

IMPLEMENT_DYNAMIC(TransparentListView , CListView) 
TransparentListView::TransparentListView() 
{ 
} 

TransparentListView::~TransparentListView() 
{ 
} 

BEGIN_MESSAGE_MAP(TransparentListView, CListView) 
    ON_WM_CTLCOLOR_REFLECT() 
    ON_WM_ERASEBKGND() 
END_MESSAGE_MAP() 

HBRUSH TransparentListView::CtlColor(CDC* pDC, UINT /*nCtlColor*/) 
{ 
    pDC->SetBkMode(TRANSPARENT); 
    return (HBRUSH)GetStockObject(NULL_BRUSH); 
} 

BOOL TransparentListView::OnEraseBkgnd(CDC* pDC) 
{ 
    // You will need to force the drawing of the background here 
    // onto the pDC, there are lots of ways to do this. 
    // I've done it my having a pointer to a interface that 
    // draws the background image 
    return TRUE; 
} 
+0

Pouvez-vous s'il vous plaît donner plus de lumière sur cette méthode de votre serait très utile ... –

+0

réponse Mise à jour par exemple. –

Questions connexes