Как создать прозрачный CDialog с Tree View Control в mfc cpp

Я хочу сделать свой диалог прозрачным вместе с древовидным элементом управления и прикрепленным к нему списком, как прозрачный. Я прошел много образцов, и я могу это сделать.

Управление диалогом и деревом

BOOL CMyDlg::OnEraseBkgnd(CDC *pDC)
{
pDC->SetBkMode(TRANSPARENT);
return FALSE  ;
}
BOOL CMyTreeCtrl::OnEraseBkgnd(CDC *pDC)
{
pDC->SetBkMode(TRANSPARENT);
return TRUE  ;
}

Остальные элементы управления диалогового окна прозрачны с помощью:

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor( pDC, pWnd, nCtlColor);

if( pWnd->GetDlgCtrlID() == 1028 || pWnd->GetDlgCtrlID() == 1036)
{
hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
}
return hbr;
}

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

Кроме того, когда я перетаскиваю вправо, чтобы увеличить размер по горизонтали, он не обновляет диалог правильно. Если я использую OnPaint() он обновляется и закрепляется с теми же настройками цвета, но не может применять прозрачность.

Я также попытался создать пример проекта MFC в VS2010 и использовал:

LONG ExtendedStyle = GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE );
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,ExtendedStyle | WS_EX_LAYERED );
::SetLayeredWindowAttributes(GetSafeHwnd(),RGB(255,255,0),255,LWA_COLORKEY );

Пожалуйста, наведите меня, если я здесь что-то не так понял. Я думаю, что я использовал все способы вместе. Но не было другого варианта сделать это за один выстрел.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …