?wie aktuelle Ansicht drucken?
-
Visual Studio 2008 EE
Win32-API
MDI Anwendung
Client mit TreeView
Ohne MFCHallo,
ich suche nach einer Möglichkeit eine aktuelle Client-Ansicht mit TreeView zu drucken. Ich bin Anfänger: ich habe bereits über Suchmaschine gefunden wie der/ein Drucker aufgerufen wird. In den gefunenn Beispielen steht dann - hier das zu druckende einfügen -und anschließend DC wieder löschen.
Nur habe ich aktuell nicht finden können wie die aktuelle Ansicht gedruckt wird. Ich war der Meinung durch Kapselung der Daten und Ansicht kann "einfach" eine "Umleitung" auf den Drucker programmiert werden.
Vielleicch is es so einfach dass es hier nicht geschrieben/beschrieben werden braucht??
Hat jemand einen Link oder PseudoCode? oder die richtigen Such-Worte?
Vielen Dank für die Unterstützung.
-
So richtig geht das nicht.
Ich baue grundsätzlichmeine eigenen Druckroutinen.Schau Dir WM_PRINT an.
IMHO gibt es auch einzelne Ansätze auf www.codeproject.com
-
Dafür kann man auch aus Bildbearbeitgungsprogrammen (z.B. Photoimpact) eine Screenshot-Funktion einsetzen. Ist sehr viel einfacher, als selbst zu programmieren. Man bestimmt, was abgebildet werden soll und aktiviert die Aufnahmefunktion über eine Funktionstaste.
-
Vielen Dank für die Info's.
Mit WM_PRINT und PRF_CLIENT ist es wohl möglich eine 'HardCopy' vom Client zu erzeugen.
Ich würde auch versuchen wollen eine "Formartierte" Ausgabe vom TreeView zu drucken. Ich habe beispielsweise eine kleine Funktion
bool CZahlungenView::AnzeigeDaten(CZahlungenData &pZahlungenData) { HTREEITEM htrI; TV_INSERTSTRUCT tvi; tvi.hParent = NULL; tvi.hInsertAfter = TVI_ROOT; tvi.item.mask = TVIF_TEXT |TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvi.item.pszText = TEXT("Automatische Zahlungen"); htrI = (HTREEITEM)SendMessage(m_hwndTreeView, TVM_INSERTITEM,0,(LPARAM)&tvi); return true; }Dieses MDI-Child wird korrekt angezeigt ( hier im Beispiel nur oben links der Wert "Automatische Zahlungen"). Mit der ungenauen Aussage die aktuelle Ansicht meinte ich eigentlich nur die Daten vom angezeigten Child Fenster im MDICLIENT vom Frame.
Die Druckerauswahl bzw. -zuordnung geht auch noch (NetzwerkDrucker):
TCHAR szDrucker[MAX_PATH] = TEXT(""); DWORD dwLen = MAX_PATH; GetDefaultPrinter (szDrucker, &dwLen); HDC hDc = CreateDC(TEXT("WINSPOOL"), szDrucker, NULL, NULL); // hier zeichnen ?? DOCINFO dInfo; dInfo.cbSize = sizeof(DOCINFO); dInfo.lpszDocName = TEXT("dok1"); StartDoc( hDc, &dInfo ) TCHAR szString[13] = TEXT("Drucker Test"); TextOut(hDc, 120, 130, szString, lstrlen( szString ) ); EndDoc (hDc); SendMessage(g_hwnd, SB_SETTEXT,0, (LPARAM) TEXT("Drucken ohne Fehler gestartet.")); DeleteDC(hDc);Als Beispiel habe ich hier den Text "Drucker Test" drucken wollen.
Das wurde Fehlerfrei compiliert und es wird auch kurz der Drucker im Status-Fenster von XP angezeigt - gedruckt wird jedoch(natürlich?) nicht.
Kann/muss einfach die o.a. Funktion 'AnzeigeDaten' in das "Doc" geschrieben/gezeichnet werden??
Muss eigentlich hierzu erst ein Doc erzeugt werden oder ist die vorgehensweise vom Ansatz her schon falsch??
Nun würde ich jetzt zusätzlich noch gern wissen wollen, warum der obige Beispieltext nicht gedruckt wurde
(die x,y-Werte hatte ich zwischendurch geändert auf 0,0 und 10,20)Vielen Dank für die Geduld
-
Hi,
das mit dem Text drucken habe ich gerade herausgefunden:
Ich habe
dInfo.lpszOutput =(LPTSTR) NULL;nicht angegeben.
Danke, bleiben nur noch die anderen Fragen

-
Hallo,
ich habe keine Lösung gefunden, nur glaube ich jetzt zu wissen dass das TreeView Control kein 'drucken' unterstützt.
Das ein DruckerDC ein anderes 'Größenverhältnis' hat als ein "Display" kann ich wohl nachchvollziehen. Mit Stretch, BitBlt und ähnliches muss jeweils die gewollte Ausgabegröße umgerechnet werden.
Ich war der Meinung(so las ich häufig), dass 'theoretisch' mit einem CompatibleDc oder MemDc genauso wie mit einem "Fenster" gearbeitet werden kann. Dies scheint aber nicht zu stimmen?
Ist es irgendwie möglich z.B. ein CreateWindowEx an ein Nicht-Display zu 'senden'? oder nur den Client-Bereich?
Es muss ein TreeView wohl mit ".........", "|", "+" und TextOut zeilenweise gemalt werden

Ich will es nicht unbedingt einfach haben, ich würde so etwas gern verstehen und selbst programmieren wollen. Sogar in Access '97 ist ein Druckvorschau enthalten, vermutlich in C geschrieben.
Kann mit einem ...Dc wie mit ein Fenster gearbeitet werden?
Vielen Dank
--vieleicht versteht ja jemand mein durcheinander...