Как мне преобразовать фон Edit Control в прозрачный в mFC VC ++? - PullRequest
0 голосов
/ 18 марта 2019

Вывод показан на рисунке

Я использую один элемент управления CStatic с переменной в качестве "m_background" и идентификатором в качестве IDC_background.В этом элементе управления видео было запущено по нажатию кнопки.и есть второй элемент управления Edit Control с переменной как «m_edit» и идентификатором как IDC_edit. Этот блок редактирования помещен поверх статического элемента управления.Я хочу показать текст, написанный в Edit Control, на видео, пока мы воспроизводим видео по нажатию кнопки с прозрачным фоновым цветом EDit Control.Но проблема в том, что серый / белый фон появился для элемента управления m_edit во время воспроизведения видео.Я хочу показать текст на видео с прозрачным фоном элемента управления "m_edit" во время воспроизведения видео.

BOOL CtestcodeDlg::OnInitDialog()//To set up the video in background and text above the video
{
    m_background.ModifyStyle(0, WS_CLIPSIBLINGS);   
    m_edit.SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, 
         SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE|WS_EX_TRANSPARENT);
    return TRUE;  // return TRUE  unless you set the focus to a control
}

HBRUSH CtestcodeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) //To transparent the background of Edit box
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
    HBRUSH m_default=CreateSolidBrush(RGB(0,0, 0));
    if(pWnd->GetDlgCtrlID() == IDC_edit)
    {
        pDC->SetTextColor(RGB(255,0,0));
        pDC->SetBkColor(TRANSPARENT);
        pDC->SetBkMode(TRANSPARENT);
    }
    return hbr;
}

void CtestcodeDlg::OnBnClickedButton1()////To run the video
{
    my_instance = libvlc_new(0, NULL);
    my_media_file = libvlc_media_new_location(my_instance, 
                               "rtsp://BigBuckBunny_115k.mov");
    my_player = libvlc_media_player_new_from_media(my_media_file);
    my_event_manager = libvlc_media_player_event_manager(my_player);
    libvlc_media_player_play(my_player);
    libvlc_audio_set_track(my_player ,-1);
    libvlc_media_player_set_hwnd(my_player, m_background);
    Sleep(1000); 
    _beginthread(test, 0, NULL);
    libvlc_audio_set_track(my_player ,-1);
}

1 Ответ

0 голосов
/ 18 марта 2019

Попробуйте использовать SetLayeredWindowAttributes функцию, используя crKey вашего цвета bk.
Кроме того, я думаю, pDC->SetBkColor(TRANSPARENT); в вашем коде является ошибкой, он устанавливает цвет bk на черный.Попробуйте запустить без этого звонка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...