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.