Kopierfunktion in einem CListView



  • Äääähhh,

    genau dass möchte ich ja machen, aber mir wurde gesagt, dass ich das machen sollte.

    Was für nen Source muß ich denn jetzt in Funktion onCopy schreiben ??

    Gruß
    andy_mann



  • So, hier kommt ohne Garantie mal die Zerlegung, wie es in etwa gehen müßte:

    void CStatistikLogdatenDialog::OnContextMenu(CWnd* pWnd, CPoint point)
    {
            CMenu menu;
    
            // Kontextmenü laden
            menu.LoadMenu(IDR_MENU5);
            // Erstes Untermenü 
            CMenu * pContextMenu = menu.GetSubMenu(0);
    
            pContextMenu->TrackPopupMenu(TPM_LEFTALIGN + TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
    }
    

    Nun der Menühandler:

    void CStatistikLogdatenDialog::OnEditCopy() 
    {
        CString m_strCopyString = "";
    
        POSITION pos = m_wndStatistikLogDaten.GetFirstSelectedItemPosition(); 
        if (pos == NULL) 
        {
            TRACE0("No items were selected!\n");
        }
        else 
        {         
            while(pos) 
            { 
                int nItem = m_wndStatistikLogDaten.GetNextSelectedItem(pos); 
                TRACE1("Item %d was selected!\n", nItem); 
                TRACE("-- %s\n", m_wndStatistikLogDaten.GetItemText(nItem,0));
                m_strCopyString = m_strCopyString + 
                    m_wndStatistikLogDaten.GetItemText(nItem,0) + " " +
                    m_wndStatistikLogDaten.GetItemText(nItem,1) + " " +
                    m_wndStatistikLogDaten.GetItemText(nItem,2) + " " +
                    m_wndStatistikLogDaten.GetItemText(nItem,3) + " " +
                    m_wndStatistikLogDaten.GetItemText(nItem,4) + " " +
                    m_wndStatistikLogDaten.GetItemText(nItem,5) + " " +
                    "\n";            
                // you could do your own processing on nItem here 
            }
    
            char *str = m_strCopyString.GetBuffer(NULL); 
            AfxGetMainWnd()->SendMessage(WM_MESSAGE_KOPIE,(WPARAM)str);
        }
    }
    

    Hst du schonmal in die AcceleratorTable geguckt? Da muss sowas stehen:

    ID_EDIT_COPY       Ctrl+C              VIRTKEY
    


  • Hallo,

    vielen Dank,

    doch leider Funktioniert das nicht bei mir.

    ID_EDIT_COPY       Ctrl+C              VIRTKEY
    

    Ist bei mir vorhanden.

    Ich verstehe nicht ganz wo Du die

    OnEditCopy
    

    aufrufen willst ??

    Gruß
    andy_mann



  • Wenn das bei dir nicht vorhanden ist, dann erstell es... :p

    Das OnEditCopy ist der Menühandler. Damit ich dir mal Quelltext und genauere Anleitung geben kann, schreib doch bitte mal, wie die ID für den Menüpunkt "Kopieren" ist. Oder ob du, wie ich schon geschrieben habe, ID_EDIT_COPY genommen hast.



  • Hallo,

    ich habe wie Du die

    ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
    

    in dem Dialog erstellt in dem ich meinen String aufbaue und dort wo das ContextMenü aufgerufen wird.

    Dann habe ich ein Menü (IDR_MENU5) und dem Menüpunkt Kopieren erstellt.

    In meiner CMainFrame rufe ich dann den Menüpunkt auf.

    Ich habe da noch einen Gedankenfehler drin.
    Komm aber nicht drauf.

    Gruß
    andy_mann



  • Ist der Quellcode geheim? Sonst bereinige mal das Projekt, pack es und schick es mir.

    Könnte aber sein, dass ich erst morgen zum Angucken komme. 🙂

    Was mir auffällt: Du hast ZWEI Menühandler? 😕



  • Erste Korrektur:

    pContextMenu->TrackPopupMenu(TPM_LEFTALIGN + TPM_RIGHTBUTTON, point.x, point.y, this);//AfxGetMainWnd());
    

    Sonst werden die Nachrichten an das Hauptfenster gesendet und nicht an den Dialog, wo du sie behandeln willst.



  • TPM_LEFTALIGN + TPM_RIGHTBUTTON

    Seit wann verknüpft man Flags mit +?



  • lol, danke hab ich gar nicht gemerkt - es funktioniert aber.

    Korrektur:

    pContextMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);//AfxGetMainWnd());
    

    Und: Die Acceleratoren funktionieren in modalen Dialogen nicht. Lösung siehe Mail. 🙂



  • Also, erst mal vielen Dank,

    hhhmmmm, tut aber net.

    Dass wir uns richtig verstehen, ich markiere etwas, rechte maustaste , kopieren, und nun sollte ich den makierten bereich irgendwo kopieren können (Editor, word, Excel usw.)

    Und das machte er nicht.

    Ich verstehe auch immernoch nicht wann die Funktion CTabelleDialog::OnEditCopy() aufgerufen werden soll ??

    Gruß
    andy_mann



  • Hast du die Zeile korrigiert?

    Nun musst du noch in

    LRESULT CMainFrame::OnKopie(WPARAM wParam, LPARAM pParam)
    {
    	char *myString = (char*)wParam; 
    	// mach was 
    	m_strKopieString = myString;
    	return 0;
    }
    

    Die Funktion aus meinem ersten Beitrag in diesem Thread mit myString aufrufen. Dann kannst du das in Word einfügen.



  • Ahja,

    vielen Dank, solangsam dämerts....

    Gruß
    andy_mann



  • Sag Bescheid, wenns leuchtet. 😉



  • Es leuchtet....... ;-))

    sag mal arbeitest Du Beruflich in der Branche ??



  • Ja, und in meinem Projekt hab ich grade sowas ähnliches eingebaut. 😃

    Wieso? 😕



  • Frage nur so Intresserhalber was Die Leute so machen.
    Arbeitest Du schon lange ??



  • Ich hab 2001 meine Ausbildung als Technische Assistentin für Informatik abgeschlossen und arbeite seitdem als Softwareentwicklerin in C++ mit MFC.

    Ich bin aber gleich in ein großes Projekt mit superklasse Kollegen geschmissen worden, die mir echt viel beigebracht haben.
    Leider musste ich die Firma wechseln und arbeite jetzt seit 1,5 Jahren alleine an einem Programm.



  • Naja, das mit der Hilfestellung fehlt mir total, habe seit 1/2 Jahr angefangen mit c++ MFC, ich verzweifle manchmal wenn man niemanden fragen kann.



  • Hey, ich hab auch nur das Forum - und nen Chef im Nacken. 😉

    Das wird schon. Das einzige was mir sehr fehlt, ist der Stil von anderen. Ich habe mir gerne Abläufe von anderen kopiert, weil die das seit Jahren mit guten Erfahrungen so machen. Das fehlt.

    Aber ansonsten ist das Forum ziemlich gut. Wenn man immer mal wieder fragt, gibt es irgendwann auch eine Lösung. 🙂



  • Ich habe keinen Cheff im Nacken, aber einen Auftraggäber...

    und der Ddrrrüüccckkktttt.... ;-))


Anmelden zum Antworten