windows - Sådan gør du en CStatic-kontrol (MFC) gennemsigtig?

Indlæg af Hanne Mølgaard Plasc

Problem



Min ansøgning har en startdialog med et billede, der fylder hele dialogboksen. Yderligere er der en CStatic-kontrol, som viser nogle variable oplysninger til brugeren. Jeg lavede CStatic-kontrollen gennemsigtig med følgende kode:


HBRUSH CStartbildDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if(pWnd->GetDlgCtrlID() == IDC\_STATIC\_INFO)
    {
        pDC->SetBkMode(TRANSPARENT);
        return reinterpret\_cast<HBRUSH>(::GetStockObject(NULL\_BRUSH));
    }
    else
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}


Når jeg ændrer teksten til den statiske kontrol med GetDlgItem(IDC\_STATIC\_INFO)->SetWindowText, overlapper den nye tekst den gamle tekst (den gamle tekst slettes ikke). Jeg har forsøgt at gentage baggrunden for at kalde SetWindowText billede med GetDlgItem(IDC\_STATIC\_BILD)->Invalidate(), men så vises ingen info tekst (hverken den gamle eller den nye).


Ved du, hvordan jeg kan gøre den statiske kontrol gennemsigtig, så jeg også kan tilsidesætte den med en ny tekst?


Tak for din hjælp!


Løsning:
Metode 2 (tilpasset) fra kodeprojekt-linket fra Sanja arbejdede for mig. [6]


GetDlgItem(IDC\_STATIC\_INFO)->SetWindowText(tmp);
CRect rect;
GetDlgItem(IDC\_STATIC\_INFO)->GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect);
UpdateWindow();

Bedste reference


Hej, du kan finde gennemsigtig statisk prøve her [7]

Andre referencer 1


Dette svar er relateret til Windows API snarere end MFC ramme, men begreberne oversætter easilly:


Korrekt måde at gøre gennemsigtige knapper i WINAPI


Dit problem er, at opnå gennemsigtige kontroller ved hjælp af Win32-native kontroller står i konflikt med opnåelse af flimmerfri kontrol, når gentagelse sker.