Copy and Paste Problem!



  • Hallo Forum,
    ich hab ein kleines Problem mit diesen Funktionen, es geht darum Zelleninhallt aus einem CListCtrl in die Zwischenablage zu kopieren mit "Strg + C" und dann im Dialog in andere Elemente, wie CEdit oder CComboBox mit "Strg + V" einfügen, zwar wird der Wert richtig in die Zwischenablage aufgenommen, nur beim einfügen funktioniert es nur mit
    Textfeldern(CEdit), in eine ComboBox kann ich den Text nicht einfügen mit "Strg + V" aber wenn ich die rechte Maustaste drücke und Einfügen wähle dann ist wieder alles ok???
    Das ClipBoard wird korrekt geöffnet! Vieleicht sollte ich nicht diese "Strg + V" und "Strg + C" als ACCELERATOREN benutzen, weil sie ewtl. von System schon benutzt werden? 😕
    Ich hab immer eine falsche ControllID(ich denke das es daran liegt), so schaut das aus:

    if (OpenClipboard(AfxGetMainWnd()->m_hWnd)) 
    	//if (OpenClipboard(hWnd))
    	{
    		if (::IsClipboardFormatAvailable(CF_TEXT) || ::IsClipboardFormatAvailable(CF_OEMTEXT))
    		{
    
    		HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT);
    		TCHAR *pchData = (TCHAR*)GlobalLock(hClipboardData); 
    		CString strFromClipboard = pchData;
    		HWND hWnd = ::GetFocus();
    		// nIDDlgItem hat immer den Wert 1001 wenn ich den Text in eine ComboBox einfügen möchte!
    		// ein Control mit dem ID gibts auf meinen Dialog nicht???
    		int nIDDlgItem = ::GetDlgCtrlID(hWnd);
    		AfxGetApp()->GetMainWnd()->SetDlgItemText(nIDDlgItem, strFromClipboard);
    		GlobalUnlock(hClipboardData);
    		CloseClipboard();
    		}
    		else
    		{ 
    			AfxMessageBox(_T("Keine Daten zum anzeigen (ANSI) in der Zwischenablage."));
    		}
    	}
    

    Hat jemand eine Idee woran das liegen kann, wenn ich den eigenen Accelerator
    "Strg + V" deaktiviere dann funktioniert das auch mit der ComboBox, hab ich da was überschrieben was ich nicht dürfte!?

    Grüsse
    pixel



  • Ich habs mit nem Trick gelöst:
    Auf Strg+V reagieren und dann diese Funktion aufrufen:

    // Element mit Focus holen
    	CWnd* pWnd = m_pView->GetFocus();
    	if (pWnd)
    	{
    		// Jetzt rausfinden, was es ist:
    		// Ein Edit?
    		CEdit* pEdit = dynamic_cast<CEdit*>(pWnd);
    		if (pEdit)
    		{
    			pEdit->Paste();
    			return;
    		}
    	}
    


  • Dein Problem dürfte die geheimnisvolle 1001 sein (ist übrigens der CEdit-Anteil deiner Combobox) - versuch' mal mit GetOwner() das Eltern-Element dieses Elements zu bekommen.



  • Hallo,
    danke für eure Antworten,
    @estartu, was ist bei dir "p_View"?

    @CStoll, ich wär nie darauf gekommen!

    Danke euch, ich werds ausprobieren!

    grüsse
    pixel



  • pixel schrieb:

    @estartu, was ist bei dir "p_View"?

    Oh sorry, da war doch noch spezifischer Code drin.

    m_pView ist ein Zeiger auf den Formview, auf dem sich die Controls befinden.
    (Die Funktion befindet sich im Doc.)

    Wenn du die Funktion gleich im Dialog/View einbaust, dann kannst du GetFocus direkt verwenden. 🙂


Anmelden zum Antworten