Как создать прозрачный элемент управления ListView - PullRequest
1 голос
/ 10 июня 2009

Как разработать ListView без фона, чтобы мое фоновое изображение отображалось правильно ... Я не могу с этим справиться ...

Ответы [ 2 ]

1 голос
/ 10 июня 2009

Вы делаете это так же, как в win32.

Все, что вам нужно сделать, это создать подкласс управления и переопределить сообщение окна WM_ERASEBKGND. Вы также можете переопределить сообщение WM_CTLCOLOR, чтобы установить текстовый режим в ПРОЗРАЧНЫЙ.

Я сделал это почти на всех стандартных элементах управления, и он отлично работает.

Обновление:

Это начальный пример в MFC, вам все еще нужно нарисовать фон на элементе управления каким-либо методом.

    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;
}
1 голос
/ 10 июня 2009

Ознакомьтесь с этой статьей, и есть библиотека элементов управления , которая поддерживает альфа-смешивание, которую вы также можете расширить до элемента управления ListView.

...