Brauche Hilfe zu owber drawb button!!!



  • Man muss nichtmal mit Create() arbeiten,

    dort wo des ganze wie DDX_TEXT und DDX_CONTROL steht,
    fügst du einfach einen neuen DDX_CONTROL eintrag ein, gibst die ID des Button(vom Dialogcreater) und den Namen einer Membervaribale an, die der neue Button ist.

    z.b.
    DDX_Control(pDX,IDC_BUTTON,m_ctrTheNewButton);



  • Hi,

    @nitromaus: Das wird bei meinem Beispiel aber nichts, da man ja eine eigene Klasse erstellt. Also hat man keinen Button im ResourcenEditor und auch keine ID dazu.

    Man kann allerdings auch einen normalen MemberButton nehmen und CButton::DrawItem überschreiben. Dann kann man auch wieder die ID aus dem Editor nehmen.
    Aber da habe ich kein Beispiel dafür und ich finde es anders auch übersichtlicher. Aber gehen müsste beides...

    Grüße, Volle.



  • Jo danke für die schnelle hilfe Folkz....

    Werde es mal ausprobieren..
    Wenn ich Probs habe melde ich mich wieder...

    Frohes Fest

    C u 🙂



  • Frohes Fest

    Danke, wünsch ich dir auch. Iceman ist echt der beste. 🙂



  • Na da bin ich schon wieder...

    Habe mir jetzt eine neue Klasse mit meiner drawItem methode erzeugt:

    // ownerdrawbuttonDlg.h

    class CColorButton : CButton
    {

    void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    // TODO: Code einfügen, um das angegebene Element zu zeichnen
    CBrush brushBuf;
    CRect rectBuf;
    CDC* pDC;
    pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

    UINT uStyle = DFCS_BUTTONPUSH;

    // This code only works with buttons.
    ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

    // If drawing selected, add the pushed style to DrawFrameControl.
    if (lpDrawItemStruct->itemState & ODS_SELECTED)
    {
    uStyle |= DFCS_PUSHED;
    }

    // Draw the button frame.
    pDC->DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle);

    brushBuf.CreateSolidBrush(RGB(0,0,255));
    rectBuf = lpDrawItemStruct->rcItem;
    rectBuf.DeflateRect(2,2,2,2);
    pDC->FillRect(rectBuf, &brushBuf);

    // Get the button's text.
    CString strText;
    GetWindowText(strText);

    // Draw the button text using the text color red.
    pDC->SetBkColor(RGB(0,0,255));
    pDC->SetTextColor(RGB(255,255,0));
    pDC->DrawText(strText, strText.GetLength(), &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);

    }
    };

    Jetzt meine Frage

    Wo muss kann ich meinen neuen Button initialisieren?
    Muß ich dies in Oninitdialog tun?

    😕



  • HILFE!!! *schieb*



  • 😕

    Brauche wirklich dringend Hilfe....

    C u



  • Hi iceman,

    ja, z.B. in OnInitDialog...

    Grüße, Volle.



  • Hi Volle!

    Erstmal meine frage kann ich meine Klasse so stehen lassen oder habe ich was falsch gemacht weil wenn ich das:

    colorButton->Create("colorButton", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW, CRect(30,30,150,60), this, ID_COLOR_BUTTON);

    in meinen oninitdialog einfüge und das Proggy ausführen will bekomme ich immer fehler Meldungen.
    Muß ich noch irgend welche Variablen noch initialisieren????
    Ist colorButton ein Zeiger auf meine erstellte Klasse??

    Danke im voraus...

    C u



  • BS_PUSHBUTTON muss raus. Schön wäre es ja mal wenn du uns die Fehlermeldung nennst. 🙂



  • Also irgendwas läuft schief....

    Habe also meine Klasse CColorButton erstellt(siehe oben) nun füge ich diese Zeile in meinen OnInitDialog ein:

    colorButton->Create("colorButton", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW, CRect(30,30,150,60), this, ID_OK);

    (mit oder ohne BS_PUSHBUTTON war egal)

    UND ER GIBT MIR IMMER DIESE FEHLER Meldung raus:

    error C2065: 'colorButton' : nichtdeklarierter Bezeichner
    E:\V6c++\MSDev98\MyProjects\ownerdrawbutton\ownerdrawbuttonDlg.cpp(54) : error C2227: Der linke Teil von '->Create' muss auf Klasse/Struktur/Union zeigen

    Dachte ich mir ich erzeuge einen Zeiger auf meine Klasse:

    CColorButton* colorButton;

    Dies macht er auch aber wenn ich das Proggy ausführen will stürzt das Proggy ab.

    So nun ist guter rat teuer..........

    Brauche (mal wieder) dringend Hilfe(fliep noch aus)

    Ich mache bestimmt was falsch bei der Initialisierung von colorButton?!?!?!?!

    C u

    🕶



  • Hi,

    also:

    Die Zeile

    CButton* colorButton;

    muß in das HeaderFile deines Dialoges. Außerdem musst du für den Pointer, den du damit deklarierst, auch irgendwo mit

    colorButton = new CButton;

    Speicher belegen. Das musst du auf jeden Fall vor dem create machen. Für solche Dinge eignet sich bespielsweise der Konstruktor des Dialoges. Und sinvoll ist es dann auch, im Destruktor den belegten Speicher mit

    delete colorButton;

    wieder aufzuräumen.

    Alles klar?

    Grüße Volle.



  • Danke!!!

    Na endlich Blauer Button mit gelber schrift....

    Puuh auf gehts....

    Vieleicht kanst du mri noch kurz erklären wie ich die Nachrixht BN_CLICKED noch abfragen kann????

    Danke nochmal und Frohe Feiertage....



  • Ist alles klar...

    Ich habs selber geschafft...

    Trotzdem danke!!!

    :p


Anmelden zum Antworten