Steuerelemente "inaktiv"



  • Hallo.

    Ich habe versucht in SDI/MDI/Multi-Top-Level-Documents-Anwendungen sowohl mit als auch ohne Doc/View Steuerelemente (genauer Input-Boxes und Button) zu erzeugen. Die Steuerelemente an sich habe ich erzeugen können, doch diese Steuerelemente sind irgendwie "inaktiv" - d.h., in Input-Boxes kann ich nichts eintippen und auf Buttons kann ich nicht klicken.
    Komisch.

    In "class CMainFrame : public CFrameWnd":

    protected: // create from serialization only
    	CMainFrame();
    
    	//Control elements
    	CEdit m_edit_username;
    	CEdit m_edit_password;
    
    	CButton m_button_login;
    

    In "CMainFrame::OnCreate()":

    /*Create Input Boxes*/
    	m_edit_username.Create(WS_VISIBLE | WS_BORDER | WS_CHILD, CRect(120, 37, 295, 60), this, IDR_INPUT_BOX_USERNAME); 
    	m_edit_password.Create(WS_VISIBLE | WS_BORDER | WS_CHILD | ES_PASSWORD,
                                   CRect(120, 66, 295, 89), this,
                                   IDR_INPUT_BOX_PASSWORD); 
    
    	/*Create Button*/
    	m_button_login.Create(_T("Login"), WS_VISIBLE |  WS_CHILD, CRect(165, 102, 220, 128), this, IDR_BUTTON_LOGIN);
    

    A-jage



  • Versuch es mal mit EnableWindow. 🙂
    Aber wieso nimmst du keinen CFormView?


  • Mod

    Wie Du die Fenster erzeugt hast, müssten sie aktiv sein.
    Ist das Parent evtl. nicht enabled?

    Was sagt Spy++?



  • Danke für die Antworten.

    ... weil ich ein Neuling bin in Sachen C++ und vor allem MFC, und total baff bin von soviel objektorientierten Code auf einmal.... und somit nicht wusste, dass es CFormView überhaupt gibt.

    So... ich habe es mit dem folgenden Code in "CMainFrame::OnCreate()" probiert:

    CWnd* pWndParent = GetParent();
    	pWndParent->EnableWindow(TRUE);
    

    Aber es gibt immer eine Meldung mit "An unhandled exception occured."
    Wo müsste ich den Code denn eigentlich eintippen? Ist der Code überhaupt richtig...?

    Wozu ist Spy++ eigentlich überhaupt? Ich weiß jetzt gar nicht was ich dir sagen soll, denn es gibt eine ellenlange Liste mit drei Spalten: Erste Spalte immer "Windows", zweite eine hexadezimale Zahl, und dritte Spalte normale Namen.

    Mit CFormView werde ich es jetzt mal probieren...

    A-jage

    P.S.: Wenn in Methoden jetzt das Argument hWnd gefragt ist, was soll ich da eigentlich machen? Denn die Fenster sind ja im MFC bereits erzeugt; wie kann ich da nachträglich ein Handle für das erzeugte Fenster herstellen?



  • Ähm... ist CFormView verbindlich mit "Form based Applications"?

    A-jage



  • @estartu
    Falls du meintest, ob die Control Elements enabled sind:
    Mit dem Code

    m_edit_username.EnableWindow(TRUE);
    

    hat es trotzdem nichts gebracht.

    Wie es aussieht mit dem ParentWindow... Da hab ich immer noch nichts herausgefunden wie ich das anstellen soll, und warte auf eure Hilfe.. 🙂
    //Edit:

    this->EnableWindow(TRUE);
    

    .im Constructor von CMainFrame. Keine Errors, scheint zu klappen. Doch... ähm.. die Steuerelemente funktionieren verdammt noch mal immer noch nicht! *verzweifel*

    Ich hätte da ein paar Ansätze:
    • Eine abgeleitete Klasse von CFormView erstellen, und damit die Steuerelemente erzeugen. Doch gibt es zwei Fragen: Was muss ich alles dafür in die header-Datei und in die cpp-Datei schreiben? Wie erfolgt dann die eigentliche Erzeugung der Steuerelemente?
    Ich habe übrigens festgestellt, dass bei sich bei mir im Solution-Ordner bereits Form.h und Form.cpp befinden. Sie erzeugen eine abgeleitete Klasse von CFormView. Könnte ich damit etwas anfangen...?
    • Ich habe versucht durch "Add new item" ein WindowsForms-Item dem Projekt hinzuzufügen, doch da gab es irgendwie Fehler mit der CLR. Habt ihr in der Richtung Ideen...?

    Zusammengefasst:
    1. Wie kann ich mit EnableWindow() mein ParentWindow enablen?
    2. Wie kann ich (mit CFormView) Steuerelemente in einer nicht Dialog-Based/ und Forms-Based/, und erst recht keiner WindowsForms/Applikation erzeugen...?
    Schottet mal euch ab von meiner Situation, sagt mir bitte wie ihr es machen würdet.

    A-jage



  • Naja... ok. Hat sich erledigt. 🙂

    Ich müsste es eigentlich in die abgeleitete Klasse von CView alles hineinschreiben, statt in CMainFrame. Das nach fast zwei Tagen Suche der Fehler hier drinne lag... 😑 Aber hauptsache es klappt jetzt. #freu#

    A-jage


Anmelden zum Antworten