Brauche Hilfe zu owber drawb button!!!
-
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 zeigenDachte 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