ListView und Button -Handling



  • Danke für deine Antwort.

    Ich habe die Methode:

    LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
    {
        static HDC  hDC;
        char szMsg[30] = "Linke Maus geklickt";
        hDC = GetDC( hWnd );
        switch( uMsg ){
    	case WM_LBUTTONDOWN:
                TextOut( hDC, 10, 60, szMsg, lstrlen( szMsg ) );
                ReleaseDC( hWnd, hDC );
           	   break;
             default: 
    	  return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );
    	}	
    
        return( 0L );
    }
    

    Ich muss aber noch mein Dialog registrieren . Aber ich habe keine WinMain-Methode . Ich benutze ein Dialog , der von CDialog abgeleitet ist.

    Wo muss ich mich dann registrieren , damit ich die Nachrichten abfangen kann ?

    Gruß Elke



  • Die Frage habe ich jetzt leider nicht so recht verstanden, aber:
    Du musst gucken, ob auf dem Listcontrol geklickt wurde, das geht eigentlich in der MessageMap des Dialoges. 😕
    Oder programmierst du API, keine MFC? 😕



  • Es geht bei mir weder mit der WinApi noch mit MFC.

    Ich habe jetzt mit die Nachricht WM_LBUTTONDOWN mit meiner Methode verbunden
    im VC 6.0

    void CKlasseDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
    AfxMessageBox( "Linke Maustaste wurde geklickt !" );

    CDialog::OnLButtonDown(nFlags, point);
    }
    Und hier funktioniert es auch.

    Ich benutze aber .Net . Und da finde ich den Klassenassistenten nicht.

    Ich habe die Methode manuell eingetragen , das funktioniert aber nicht , weil
    der Klassen-Assistent wahrscheinlich nocht irgendwelche Einträge
    macht.

    Wie ruft man in .Net den Klassenassistenten auf ?

    Danke.

    Gruß Elke



  • Okay, da musst du die Dialogresource anzeigen lassen.
    Dann deren Eigenschaften.
    Oben bei den Knöpfen ist ein Blitz.

    ...von da musst du dann gucken, ich hab zwar das VC7, komme damit aber noch nicht zurecht. Ist alles Try&Error. 🙄



  • Den Blitz habe ich bei allen Steuerelementen , nur nicht bei meinem
    Dialog . Ich muss das aber auf der DialogEbene machen.

    Gruß Elke.



  • Nein, musst du nicht - IMHO würde es nichtmal funktionieren.
    Fang LButtonDown und KillFocus (unter Beachtung, wo geklickt wurde) für das Listcontrol ab, das sollte reichen.

    Oder kannst du genauer begründen, warum du unbedingt die Message vom Dialog brauchst? 🙂
    ...dann würde ich mal raussuchen, was du in die MessageMap schreiben musst. Per Menü oder so habe ich es bei VC7 noch nicht gefunden. 🙄



  • Danke für deine Antwort.

    Mein Problem ist folgendes:
    Der Benutzer hat einen Eintrag in der ListView ausgewählt .
    das System setzt den Button auf enabled.
    Jetzt klickt der Benutzer aus Versehen oder aus irgend einem anderen Grund in ein anderes Feld
    z.b. EditFeld . Jetzt ist in der ListView kein Eintrag mehr ausgewählt
    aber der Button ist immer noch enabled . Das ist gerade das Problem:
    Jetzt muss aber das System den Button auf disabled setzen.
    Und das muss ich irgendwie in meinem Dialog erfahren .

    Danke für deine Hilfe.

    Gruß Elke



  • Lies mal: http://www.c-plusplus.net/forum/viewtopic-var-t-is-103487-and-highlight-is-*show*always.html

    Das sieht nämlich nur so aus, der ist noch markiert. 😃
    Erst wenn du in den leeren Bereich des Listcontrols klickst geht die Markierung weg.



  • Vielen Dank.

    Das ist ja super , wenn es so funktioniert.

    Das Problem ist, wie trage ich das in die Ressorcen-Eigenschaften ein.
    Ich habe da keine Eigenschaft gefunden. Und ausserdem war das für die ListBox und ich habe eine ListView.

    Gruß Elke



  • Oh weia, ich glaube, ich brauch nen Kaffee...

    Ich hab das gerade bei mir einbauen wollen, weil ich (eher zufällig) gerade ein ähnliches Problem habe - und es funktioniert nicht. 😞

    Ich suche nochmal, sorry.



  • Manchmal gehts auch schnell. 😃
    Also, in den Eigenschaften, das dritte von oben muss auf true sein. (Auswahl immer anzeigen)

    PS: Sag, wenns so nicht geht, ich habe hier Listcontrols und keine Views.



  • danke.



  • Toll ,

    bei mir funktioniert es jetzt !

    Ich habe die Eigenschaft <Immer anzeigen > auf true gesetzt ,
    wie du empfohlen hast.

    Ich habe die ListView als Klasse CListCtrl definiert.

    Vielleicht soll ich dir alle meine Einstellungen durchgeben?

    Jetzt habe ich aber noch ein Problem:
    wenn ich in die Listview klicke , ob ich einen Eintrag ausgewählt habe oder nicht reagiert das Programm auf die Nachricht:

    OnItemchangedListview().

    Ich muss jetzt wahrscheinlich alle Nachrichten auf die die ListView reagiert testen.

    Vielen Dank.

    Gruß Elke.



  • Also, ich reagiere bei mir auf folgende Nachrichten (Copy aus der MessageMap):

    ON_NOTIFY(NM_CLICK, IDC_LSC_FILIALEN, OnClickLscFilialen)
    	ON_NOTIFY(LVN_DELETEITEM, IDC_LSC_FILIALEN, OnDeleteitemLscFilialen)
    	ON_NOTIFY(LVN_KEYDOWN, IDC_LSC_FILIALEN, OnKeydownLscFilialen)
    

    Damit habe ich eigentlich zu meiner Zufriedenheit alles erwischt, was ich brauche, um immer Details zu der aktuellen Zeile anzuzeigen. 🙂

    Wenn das nicht reicht, müsstest du nochmal sagen, woran es fehlt.



  • Die alle habe ich auch.

    Aber , da gibt es noch ein Fall:

    Wenn ich einen Eintrag markiert habe , dann setzt das System
    den Button auf enabled.( Nachricht LVN_ITEMCHANGED )

    Jetzt klicke ich aber in die ListView ( nicht auf einen Eitrag )

    dann reagiere ich wieder auf die Nachricht: LVN_ITEMCHANGED
    Demzufolge : obwohl kein Eintrag ausgewählt ist , ist der Button enabled.

    (Im Grunde genommen , est der letzte Selektierte Eintrag ausgewählt ).
    Aber das ist ein Schönheitsfehler für den Benutzer.

    Danke.

    Gruß Elke.


Anmelden zum Antworten