Text wird doppelt beschrieben im Text Control



  • Hi 🙂 ,

    Mein Text Control wird bei jedem neuen Schreibgang über den aktuellen Text geschrieben, ohne dass der zuvor stehende Text gelöscht wird.
    Was mach ich falsch??

    Ich setzte den Text ganz normal mit

    CWnd *wndText = GetDlgItem(IDC_SUrlausbtageText);
    wndText->SetWindowTextA(csUrlaubstage);

    Anna



  • Hab's gefunden!

    Hatte einen Fehler in der OnCtlColor() -Funktion

    if( nCtlColor == CTLCOLOR_STATIC )
    {
    pDC->SetBkMode(TRANSPARENT);
    /// hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
    }

    hbr = (HBRUSH)GetStockObject(NULL_BRUSH); war falsch

    Jetzt geht's!!!


  • Mod

    Ich Frage mal meine Glaskugel:
    1. Du hast WM_CTLCOLOR überschrieben?
    2. Du setzt die Backgroundcolor auf Transparent?



  • Martin Richter schrieb:

    Ich Frage mal meine Glaskugel:
    1. Du hast WM_CTLCOLOR überschrieben?
    2. Du setzt die Backgroundcolor auf Transparent?

    Genau, ich hab WM_CTLCOLOR überschrieben, damit meine TextControls transparent angezeigt werden. Ich habe nämlich ein Hintergrundbild geladen (auch in WM_CTLCOLOR) und die Texte wurden mit mit grauen Hintergrund angezeigt.

    /// im Header
    HBRUSH m_hbrushBackground;
    HBITMAP hbmpBackground;

    //// In Oninit

    hbmpBackground = (HBITMAP)LoadImage(NULL,"blue.jpg",
    IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
    m_hbrushBackground = CreatePatternBrush( hbmpBackground );

    HBRUSH CUrlaubDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {

    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if( nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_STATIC )
    hbr = m_hbrushBackground;

    if( nCtlColor == CTLCOLOR_STATIC )
    pDC->SetBkMode(TRANSPARENT);
    return hbr;
    }

    // Im Dekonstruktor
    CUrlaubDlg::~CUrlaubDlg()
    {
    /// Objekt wieder löschen
    DeleteObject(m_hbrushBackground);
    }


Anmelden zum Antworten