2016-05-03 4 views
0

eine Frage für echte Experten: Wie wird es gemacht, dass eine Einfügen-Operation auf OLE-Ziel die OLE-Quelle beginnt, Daten zu liefern?MFC: Windows Explorer-ähnliche Anwendung zum parallelen Exportieren von Dateien mit dem Hauptthread

Ich erstelle eine MFC-basierte Windows-Explorer-ähnliche app/Schnitt zum Kopieren/Einfügen virtuelle Dateien von/nach irgendwo (Drag & Drop und OLE-Zwischenablage). Das Problem, mit dem ich mich jetzt beschäftige, ist, wie man den Export von Dateien mit dem Hauptfenster-Thread parallel macht. Wie gesagt, es ist eine MFC App, also exportiere ich den virtuellen Dateiinhalt in die COleDataSource::OnRenderFileData Funktion. Diese Funktion wird nirgendwo in der Anwendung explizit aufgerufen, wird aber vom Hauptfenster-Thread aufgerufen. Ich habe hineingegraben und festgestellt, dass MFC einen bestimmten Befehl (CN_COMMAND) verarbeitet, der von der OnCmdMsg-Funktion des Dokuments verarbeitet wird - das erklärt, wie der Hauptthread OnRenderFileData aufruft.

Aber wie ich an VS2010 Express Edition mit Legacy (aber frei) MFC4.2 arbeite, kann ich nicht den Punkt, wo einige magische Nachricht empfangen (von COM?) Und verarbeitet von der MFC-Haupt-Thread . Ich möchte diesen Punkt überschreiben, um die virtuellen Dateien parallel zum Hauptthread der Anwendung zu exportieren.

Vielen Dank für alle Vorschläge

Tomas

+0

Wenn Sie Drag/Drop und OLE Zwischenablage verwenden, dann kommt es wahrscheinlich über 'IDataObject :: GetData'. –

Antwort

1

Die „magische“ Nachricht Sie sprechen werden, ist WM_RENDERFORMAT, die dem Inhaber der Zwischenablage gesendet wird, die Rendering verzögert angefordert.

Ich glaube, dass Sie erwartet werden, SetClipboardData()BEFORE von diesem Message-Handler zurückzurufen, so sehe ich nicht, wie ein anderer Thread funktionieren könnte; Der Anrufer wird versuchen, auf die Daten in der Zwischenablage zuzugreifen, sobald seine SendMessage(..., WM_RENDERFORMAT, ...) zurückgibt.

P.S. Gibt es einen Grund, warum Sie Express Edition verwenden? Die neuen Versionen von Visual Studio (2013 und 2015) sind in Community Edition verfügbar, die für experimentelle und pädagogische Zwecke kostenlos ist, und einige davon. Es enthält auch eine moderne Version von MFC.

+1

Die Community Editions sind frei für kommerzielle Nutzung ("individuelle Entwickler", "kleine professionelle Teams"). Sie können die vollständigen [Softwarelizenzbedingungen] (https://www.visualstudio.com/support/legal/mt171547) lesen, indem Sie dem Link * "Weitere Informationen" * aus der [Visual Studio Community] (https: // www .visualstudio.com/products/visual-studio-community-vs) Seite. – IInspectable

Verwandte Themen