Button ohne MFC-Assistent erzeugen
-
Hallo,
ich habe eine MFC-Anwendung (SDI) mit mehrere Views erstellt und stehe dabei vor meinem ersten Problem.
Ich möchte nähmlich in einem View einen Button ohne MFC_Assistent erzeugen, aber leider ohne ErfolgNachdem ich in der Klassendeklaration des Views (CMeinView) ein Attribut für den Button gesetzt habe, habe ich dann im Konstruktor einen Speicherbereich mit "new" erzeugt und die Methode "OnCreate" aufgerufen.
int CMeinView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_pButton->Create(_T("Mein Text"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1); }
Debuggen läuft zwar ohne Fehlermeldung, aber es wird leider nichts angezeigt
Kann mir vielleicht jemand hier weiterhelfen?Gruß, Malaika
-
du musst glaub noch m_button->show(SW_SHOW); oder m_button->isVisible(true); oder in der art nach create aufrufen...
-
BorisDieKlinge schrieb:
du musst glaub noch m_button->show(SW_SHOW); oder m_button->isVisible(true); oder in der art nach create aufrufen...
Es wäre m_Button->ShowWindow(SW_SHOW); aber muss er eigentlich nicht, da er im Style bereits WS_VISIBLE definiert hat.
Ich habe bei einem Testprojekt bei mir, genau das was du beschrieben hast gemacht und bei mir funktioniert es einwandfrei.Zeig mal den Konstruktor und die Definition der Klasse.
Grüssli
-
Im Mainframe geht's, aber leider nicht im View
KlassenDefinition:
class CMeinView : public CFormView { .... protected: CButton* m_pButton; afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); .... }
Konstruktor und Destruktor:
CMeinView::CeinMView() : CFormView(MeinView::IDD) { // TODO: Hier Code zur Konstruktion einfügen m_pButton = new CButton; } CMeinView::~CMeinView() { delete m_pButton; }
-
bei new Button vll noch klammer auf klammer zu ?? weis nich ob daswas bringt:)
-
daran liegt's leider nicht.
Habe ich vieleicht irgendwas anders vergessen? Ist die OnCreate-Methode in der richtigen Stelle?Gruß, Malaika
-
Ich habe das ganze Projekt neu erstellt und jetzt ist das Problem weg... ich wieß gar nicht woran es gelegen hat.
Jetzt stehe ich vor einem zweiten Problem und zwar, ich würde gerne eine bestimmte Anzahl "n" von Buttons erstellen, die natürlich natürlich unterschiedliche Namen und Position haben und suche dafür eine Methode, wie ich dann alle diesen Buttons ablegen und anschließend erstellen kann.
Hat jemand hier eine Idee, wie ich das machen kann?Danke im Voraus.
Malaika
-
pack sie in einen vector (oder einen anderen Container) und initialisiere sie der Reihe nach mit den korrekten Werten.
-
Such in der MSDN nach CArray, CList, Collections, CTypedPtrArray, CTypedPtrList usw. ^^
Oder benütze den std::vector, wie von CStoll vorgeschlagen ^^Grüssli
-
Malaika schrieb:
Im Mainframe geht's, aber leider nicht im View
KlassenDefinition:
class CMeinView : public CFormView { .... protected: CButton* m_pButton; afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); .... }
Konstruktor und Destruktor:
CMeinView::CeinMView() : CFormView(MeinView::IDD) { // TODO: Hier Code zur Konstruktion einfügen m_pButton = new CButton; } CMeinView::~CMeinView() { delete m_pButton; }
Lösung des Beitrags:
https://www.c-plusplus.net/forum/162657-fullHallo,
auch wenn der Betreig alt ist, vllt sucht jemand die Lösung.
Wenn manCButton* m_pButton;
nicht als Poitner behandelt, dann klappts
Gruß,
Peter