<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Druckvorschau so möglich?]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe einen Link gefunden (<a href="http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap_c.htm" rel="nofollow">http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap_c.htm</a>) Auf dieser Seite wird gezeigt, wie man eine Druckvorschau realisieren kann....<br />
Nun aber meine Frage:<br />
Ich benutze nur ein Dialog (habe bis jetzt immer gerade gedruckt, d.h alle Text und Linien direckt zum Drucker geleitet...) Ist es möglich mit diesem Code aus dem Link eine Vorschau zu erstellen??? Wenn ja wie?<br />
Kann ich auch einfach wie bisher</p>
<pre><code class="language-cpp">dcPrint.MoveTo(xalt,yalt); //Start
dcPrint.LineTo(abstandx,y); //Ende
</code></pre>
<p>benützen um um eine Linie zu zeichnen? Mein Gedanke ist, dass ich eine Funktion habe, und dieser Funktion nur noch das Ausgabegerät (Drucker oder Vorschaufenster) übergeben muss...<br />
Ist dies so möglich?</p>
<p>Vielen Dank für die Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83166/druckvorschau-so-möglich</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 18:44:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83166.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Aug 2004 11:55:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Druckvorschau so möglich? on Wed, 18 Aug 2004 11:55:03 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe einen Link gefunden (<a href="http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap_c.htm" rel="nofollow">http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap_c.htm</a>) Auf dieser Seite wird gezeigt, wie man eine Druckvorschau realisieren kann....<br />
Nun aber meine Frage:<br />
Ich benutze nur ein Dialog (habe bis jetzt immer gerade gedruckt, d.h alle Text und Linien direckt zum Drucker geleitet...) Ist es möglich mit diesem Code aus dem Link eine Vorschau zu erstellen??? Wenn ja wie?<br />
Kann ich auch einfach wie bisher</p>
<pre><code class="language-cpp">dcPrint.MoveTo(xalt,yalt); //Start
dcPrint.LineTo(abstandx,y); //Ende
</code></pre>
<p>benützen um um eine Linie zu zeichnen? Mein Gedanke ist, dass ich eine Funktion habe, und dieser Funktion nur noch das Ausgabegerät (Drucker oder Vorschaufenster) übergeben muss...<br />
Ist dies so möglich?</p>
<p>Vielen Dank für die Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585320</guid><dc:creator><![CDATA[addict]]></dc:creator><pubDate>Wed, 18 Aug 2004 11:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Druckvorschau so möglich? on Wed, 18 Aug 2004 16:06:03 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>durchaus ist das möglich. Du könntest eine SDI- oder MDI-Anwendung mit dem Anwendungsassistenten erstellen. In diesen wird nämlich das Drucken standardmäßig unterstützt. In deiner Ansichtsklasse fügst Du die virtuelle Funktion OnPrint(...) mit dem Klassenassistenten hinzu. In dieser Funktion rufst Du die gleiche Funktion auf, die auch das Zeichnen auf dem Fenster übernimmt. Also die Funktion, die auch in OnDraw(...) der View-Klasse aufgerufen wird, kann z.B. DrawContent(CDC* pDC, ...) heißen. In ihr steht dann dein Code:</p>
<pre><code>CYourView::DrawContent(CDC* pDC)
{
   ...

   pDC.MoveTo(xalt,yalt); //Nicht mehr dcPrint.MoveTo(xalt,yalt); 
   pDC.LineTo(abstandx,y); //dcPrint.LineTo(abstandx,y);

   ...
}
</code></pre>
<p>Man kann Seitenansicht oder Drucken aus dem Datei-Menü wählen. Für beide Fälle wird deine Funktion DrawContent(CDC* pDC) aufgerufen. Der dabei übergebene Gerätekontext (pDC) bezieht sich dabei immer auf auf das jewilige Ausgabegerät. Beim Drucken auf den Druckertreiber, bei der Seitenansicht auf das entsprechende Fenster (Bildschirm, Graphikkartentreiber), beim Zeichnen in das Fenster der Anwendung eben auf dieses Fenster, usw.</p>
<p>Vielleicht geht das auch mit einer Dialogbasierten Anwendung. Hab ich noch nicht probiert.</p>
<p>Grüsse</p>
<p>WOODZ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585614</guid><dc:creator><![CDATA[woodz]]></dc:creator><pubDate>Wed, 18 Aug 2004 16:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to Druckvorschau so möglich? on Wed, 18 Aug 2004 16:22:05 GMT]]></title><description><![CDATA[<p>Vielen Dank!<br />
Ich habe eben eine Dialogbasierende Anwendung!<br />
Wie würde ich denn nun auf den Dialog anstatt auf den Drucker zeichnen?<br />
Einfach den Dialognamen.moveTo etc.?</p>
<p>Ein Weiteres Problem habe ich, wenn ich eine Funktion machen will inder der Drucker auch gebraucht wird.<br />
Ich habe z.B ein Diagramm, welches über mehrere Seiten geht nun möchte ich die Fusszeile in eine separate Funktion auslagern... Wie geht dies? Sprich, wie kann ich ganze Objekte einer Funktion übergeben/einbinden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585631</guid><dc:creator><![CDATA[addict]]></dc:creator><pubDate>Wed, 18 Aug 2004 16:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Druckvorschau so möglich? on Thu, 19 Aug 2004 12:27:22 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich hab mich ein bischen schlauer gemacht. Bei eienr Dialoganwendung kannst Du z.B. die Windows Print-Architektur verwenden. Das was ich dir gestern mit OnPrint(...) erzählt habe gilt nur für Projekte, in denen Klassen, die von CView abgeleitet sind vorkommen. Also wie z.B. eine MDI-Anwendung.</p>
<p>Um auf den Dialog zu zeichnen mußt Du den Messagehandler für die WM_PAINT Nachricht mit dem Klassenassistenten in die von CDialog abgeleitete Klasse einfügen. Den Gerätekontext für den Bildschirm holst Du dir mit</p>
<pre><code>CPaintDC dc(this);
</code></pre>
<p>Den Gerätekontext für den Drucker holst Du Dir so:<br />
Wenn Du den Druckernamen weißt</p>
<pre><code>CDC dc;
dc.CreateDC(NULL, _T (&quot;DeinDruckerName&quot;), NULL, NULL);
</code></pre>
<p>Wenn Du den unter Windows definierten Standarddrucker verwenden willst</p>
<pre><code>CDC dc;
CPrintDialog dlg(FALSE);
dlg.GetDefaults();
dc.Attach(dlg.GetPrinterDC());
</code></pre>
<p>Wenn Du den Benutzer einen Drucker auswählen lassen willst</p>
<pre><code>CDC dc;
CPrintDialog dlg(FALSE);
if(dlg.DoModal() ==  IDOK)
   dc.Attach(dlg.GetPrinterDC());
</code></pre>
<p>Mit den 3 oben genannten Möglichkeiten holst Du dir also erst eilmal den Devicekontext für einen Drucker.<br />
Jetzt muß der Druckauftrag irgendwie gestartet werden. Das kann man z.B. so machen:</p>
<pre><code>DOCINFO di;
::ZeroMemory (&amp;di,sizeof (DOCINFO));
di.cdSize = sizeof (DOCINFO);
di.lpszDocName = _T(&quot;Name des Druckauftrages, wie er im Spooler erscheint&quot;);
di.StartDoc (&amp;di);
</code></pre>
<p>Jetzt folgen Grafikfunktionen zum Zeichnen auf den Gerätekontext, wie man es vom Zeichnen auf den Bildschirm her kennt, mit dem CDC-Objekt. Also z.B.</p>
<pre><code>dc.Ellipse(0,0,100,100);
</code></pre>
<p>zeichnet einen Kreis mit einem Durchmesser von 100 logischen Einheiten.<br />
Logische Einheiten sind abhängig vom gewählten MapMode. Siehe unbedingt MSDN!</p>
<p>Wenn Du mehrere Seiten Drucken möchtest bzw. den Start einer neuen Seite triggern möchtest (also auch beim Drucken von nur einer Seite), kann man die Zeichenroutine in eine Schleife packen, anchließend ist der Druckauftrag zu beenden:</p>
<pre><code>//hier muß natürlich all das, was ich oben prozessiert habe stehen, also Device-Context für Drucker holen, Druckauftrag starten, etc.
for(int i=1; i&lt;nPageCount; ++i)
{
  dc.StartPage(); //Start der Seite
  dc.SetMapMode(/*der gewünschte Mode, z.B.*/MM_LOMETRIC);
  //MapMode muß für jede Seite neu gesetzt werden!

  //GDI-Objekte, Stift, Brush, etc. erstellen
  //GDI-Objekte in den Devicekontext selektieren mit dc.SelectObject(...)
  // hier stehen dann Deine Zeichenfunktionen, Ellipse, Linie Punkte, etc...
  //GDI-Objekte wieder freigeben

  dc.EndPage(); //Ende der Seite  
}

dc.EndDoc(); //Ende des Druckauftrages
</code></pre>
<p>Objekte werden idR. eimal für den Gebrauch instanziirst. Für die Übergabe als Parameter an eine Funktion wird dann idR. der Pointer oder eine Referenz auf dieses Objekt übergeben.</p>
<p>Beispiel:</p>
<p>Du hast eine Klasse namens Diagam. In ihr befinden sich verschiedene Memberfunktionen, wie z.B. Initialize(...), ReadData(...), SaveData(...), DrawDataToScreen(...), DrawDataToPrinter(...), DrawHeader(...),<br />
DrawFooter(CString&amp; strText), etc.</p>
<p>Dann hast Du noch Datenkomponenten, wie z.B. CObList m_DataList, CString m_strHeadLine, CString m_strFootLine, int m_nDataCount, etc.</p>
<p>Du instanziirst ein Objekt der Klasse Diagram mit</p>
<pre><code>Diagram myDiagram;
</code></pre>
<p>Du bekommst irgendwo den Text für die Fußzeile her. Im einfachsten Fall gibst Du ihn statisch an mit</p>
<pre><code>CString strFooter(&quot;Das ist die Fußzeile für mein Diagramm&quot;);
</code></pre>
<p>Du zeichnest den Text mit</p>
<pre><code>myDiagram.DrawFooter(strFooter);
</code></pre>
<p>unter das Diagramm. Der Memberfunktion wird also ein CString-Objekt als Referenz übergeben. Das kann man natürlich genauso mit selbstdefinierten Objekten machen.</p>
<p>Mehr weiß ich leider nicht. Vielleicht hilft dir das ein wenig. Wenn Du vielleicht beim nächsten Mal etwas Code mit postest, kann man konkret auf dein Problem eingehen.</p>
<p>Grüsse</p>
<p>WOODZ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586280</guid><dc:creator><![CDATA[woodz]]></dc:creator><pubDate>Thu, 19 Aug 2004 12:27:22 GMT</pubDate></item><item><title><![CDATA[Reply to Druckvorschau so möglich? on Thu, 19 Aug 2004 15:33:47 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Drucken war bis jetzt kein Problem! Aber Danke trotzdem für die super Beschreibung!</p>
<p>Ich handhabe das ganze bis jetzt so:</p>
<pre><code class="language-cpp">if (dlgPrint.DoModal()==IDOK) 
    { 
        CDC dcPrint; 
        dcPrint.Attach(dlgPrint.GetPrinterDC()); 
        DOCINFO myPrintJob; 
        myPrintJob.cbSize = sizeof(myPrintJob); 
        myPrintJob.lpszDocName = &quot;PrintingTest&quot;; 
        myPrintJob.lpszOutput = NULL; 
        myPrintJob.lpszDatatype = NULL; 
        myPrintJob.fwType = NULL; 
        if (dcPrint.StartDoc(&amp;myPrintJob)&gt;=0) 
        { 
            // Als Hilfe wie man bestimmte Parameter abfragt 
            int te = dcPrint.GetDeviceCaps(ASPECTY); 
            int test = dcPrint.GetDeviceCaps(ASPECTX); 
            int m_iHorizont = dcPrint.GetDeviceCaps(HORZRES); 
            int m_iVerdikal = dcPrint.GetDeviceCaps(VERTRES);
			int spalte2;
			int zeilenabstand; 

            dcPrint.StartPage(); 
            RECT rctA; 
            rctA.left = (m_iHorizont/210) * m_iLeft;            // 210 Breite DIN A4   
            rctA.top = (m_iVerdikal/297) * m_iTop;              // 297 Höhe DIN A4   
            rctA.right  = m_iHorizont - ((m_iHorizont/210) * m_iRight);   
            rctA.bottom = m_iVerdikal - ((m_iVerdikal/297) * m_iButton);

			zeilenabstand = (300/dcPrint.GetDeviceCaps(VERTRES)*20);
//Verschiedene zeichnungen
}
</code></pre>
<p>Nun kommt eine Neue Seite und dazu möchte ich diese Funktion aufrufen (mit dem Ausgabegerät)</p>
<pre><code class="language-cpp">void CADS2Dlg::fusszeile()
{

    CString Textzeile;
    CString Dateiname=&quot;sahfjlasfhl.dat&quot;;
    CString Erstellt= &quot;12.12.2004&quot;;
    CString datum=&quot;123456&quot;;

    Textzeile=&quot;Dateiname: %i | Erstellt am: %i | Ausgedruckt am: %i&quot;,Dateiname,Erstellt,datum;

    dcPrint.DrawText(Textzeile, &amp;rctA, DT_WORDBREAK);

}
</code></pre>
<p>Was muss ich nun in die Zeile: void CADS2Dlg::fusszeile() noch eingeben und was muss ich bei Funktionsaufruf übergeben?</p>
<p>Wäre es nun auch möglich, dass ich hier</p>
<pre><code class="language-cpp">CDC dcPrint; 
        dcPrint.Attach(dlgPrint.GetPrinterDC());
</code></pre>
<p>(in der ersten Zeilen) das Ausgabe gerät aus einer Variablen lese? (Damit ich nur eine Fukntion für Vorschau und Druck brauche) Ein anderes Problem ist, dass ich das ganze in der Druckvorschau Zoomen und Scrollen kann... Ist es nicht möglich wenn ich eine Dialogbasierende Anwendung habe, das ganze in ein fertiges Fenster zu &quot;drucken&quot; im Prinzip brauche ich so eine Vorschau wie in Word etc...</p>
<p>Ist dies sehr aufwendig? Wie packe ich das ganze am Besten an?<br />
p.S weiss jemand gerade, wie ich das aktuelle Datum (dd.mm.yyyy) auslesen kann?<br />
(Diese Zeile stimmt irgendwie nicht so ganz! Wie kann ich Veriablen mit statischem Text zusammenführen?</p>
<pre><code class="language-cpp">Textzeile=&quot;Dateiname: %i | Erstellt am: %i | Ausgedruckt am: %i&quot;,Dateiname,Erstellt,datum;
</code></pre>
<p>Vielen Dank für die Antworten!!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586519</guid><dc:creator><![CDATA[addict]]></dc:creator><pubDate>Thu, 19 Aug 2004 15:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to Druckvorschau so möglich? on Thu, 19 Aug 2004 22:17:42 GMT]]></title><description><![CDATA[<p>Hallo addict,</p>
<p>hab ich wohl falsch verstanden, das mit dem Drucken.</p>
<p>Zitat:<br />
Was muss ich nun in die Zeile: void CADS2Dlg::fusszeile() noch eingeben und was muss ich bei Funktionsaufruf übergeben?</p>
<p>Ganz einfach:</p>
<pre><code class="language-cpp">void CADS2Dlg::fusszeile(CDC* pDC) //Patrameter: pointer auf CDC
</code></pre>
<p>und der Funktionsaufruf:</p>
<pre><code class="language-cpp">fusszeile(&amp;dcPrint) //Paranmeter: Adresse des (außerhalb) kreierten Gerätekontextes
</code></pre>
<p>Zitat:<br />
Wäre es nun auch möglich, dass ich hier</p>
<pre><code class="language-cpp">CDC dcPrint; 
        dcPrint.Attach(dlgPrint.GetPrinterDC());
</code></pre>
<p>(in der ersten Zeilen) das Ausgabe gerät aus einer Variablen lese? ? (Damit ich nur eine Fukntion für Vorschau und Druck brauche)</p>
<p>Antwort:<br />
Damit erstellst Du einen neuen Drucker-Devicekontext, der nichts mit dem vor Aufruf von CADS2Dlg::fusszeile(...) zu tun hat. Du müßtest einen neuen Druckauftrag anstossen. Machs so, wie ich Dir oben gezeigt habe.<br />
Für die Druckvorschau rufst Du einfach CADS2Dlg::fusszeile(...) mit dem Gerätekontext für den Bildschirm auf, also</p>
<pre><code class="language-cpp">CPaintDC dc(this);
fusszeile(&amp;dc);
</code></pre>
<p>wie ich es Dir bei der letzten Antwort auch schon versucht habe zu erklären.</p>
<p>Zitat:<br />
Ein anderes Problem ist, dass ich das ganze in der Druckvorschau Zoomen und Scrollen kann... Ist es nicht möglich wenn ich eine Dialogbasierende Anwendung habe, das ganze in ein fertiges Fenster zu &quot;drucken&quot; im Prinzip brauche ich so eine Vorschau wie in Word etc...</p>
<p>Antwort:<br />
Zoomen und scrollen wird von der Klasse CScrollView hervorragend unterstützt. Dazu würde sich allerdings eine SDI- oder MDI-Anwendung extrem gut anbieten. Dort ist vorallem die Seitenvorschau und die Druckerei so gut wie vorgefertigt. Man kann aber bestimmt auch einen neuen Dialog erstellen, indem man dann programmatisch ein CScrollView-Objekt einbettet. Etwas ähnliches hab ich auch in meinem Projekt gemacht. Dazu schaust Du am besten unter diesem Link:</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic.php?t=78787" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic.php?t=78787</a></p>
<p>Bezieht sich aber auf eine MDI-Anwendung. Das prinzip ist ein Frame-Window zu erstellen und darin ein selbstdefiniertes CScrollview-Objekt einzubetten.<br />
Man kann auch die Messagehandler für die Nachrichten WM_VSCROLL und WM_HSCROLL implementieren, wenn man zu der Ansicht noch Scrolleisten hinzufügt. Das hab ich aber noch nie gemacht. Hab da also keine Ahnung.</p>
<p>Zitat:<br />
p.S weiss jemand gerade, wie ich das aktuelle Datum (dd.mm.yyyy) auslesen kann?</p>
<p>Antwort:<br />
Schau dir mal in der MSDN die CDateTimeCtrl-Klasse genauer an!</p>
<p>gutes Gelingen</p>
<p>WOODZ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586806</guid><dc:creator><![CDATA[woodz]]></dc:creator><pubDate>Thu, 19 Aug 2004 22:17:42 GMT</pubDate></item><item><title><![CDATA[Reply to Druckvorschau so möglich? on Sun, 22 Aug 2004 08:29:52 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Sorry aber ich bin wohl etwas schwe von Begriff... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Die Beispiele von CodeGuru sind irgendwie nicht so ganz das was ich suche...<br />
Ich möchte genau diese Vorschau (mit diesen Funktionen)<br />
<a href="http://www.codeguru.com/Cpp/W-D/doc_view/printing/article.php/c3263/" rel="nofollow">http://www.codeguru.com/Cpp/W-D/doc_view/printing/article.php/c3263/</a><br />
Ich habe aber eine Komplett Dialogbasierende Anwendung! Wie kann ich das denn so umsetzen? (Am liebsten immernoch, dass ich nur eine Funktion brauche.)<br />
Ich kann doch den Drucker zuerst zuweisen und erst danach, die Fukntio aufrufen, dann funktioniert dies doch oder nicht?</p>
<p>Sehe ich es richtig wenn die Fukntion so definiert ist</p>
<pre><code class="language-cpp">void CADS2Dlg::fusszeile(CDC* pDC)
</code></pre>
<p>ich dann mit pDC.move.... z.B zeichnen kann?</p>
<p>Vielen Dank für die Geduld und die super Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/588108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/588108</guid><dc:creator><![CDATA[addict]]></dc:creator><pubDate>Sun, 22 Aug 2004 08:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to Druckvorschau so möglich? on Mon, 23 Aug 2004 09:44:30 GMT]]></title><description><![CDATA[<p>Hi,</p>
<blockquote>
<p>Sorry aber ich bin wohl etwas schwe von Begriff...</p>
</blockquote>
<p>Das kann ich nicht beurteilen. Was Du aber auf jeden Fall verstehen mußt, wenn Du dich in der C/C++ Landschaft aufhältst sind Pointer und Referenzen. Dazu solltest Du dir ein Grundlagenbuch beschaffen und kräftig üben.</p>
<p>Aussagen, wie</p>
<blockquote>
<p>Sehe ich es richtig wenn die Fukntion so definiert ist</p>
<pre><code class="language-cpp">void CADS2Dlg::fusszeile(CDC* pDC)
</code></pre>
<p>ich dann mit pDC.move.... z.B zeichnen kann?</p>
</blockquote>
<p>dürften dann nicht mehr vorkommen. Zumal im CDC-Objekt gar keine move(...)-Funktion existiert, nur eine MoveTo(...)-Funktion.<br />
pDC.move kann nicht funktionieren, weil pDC ein Pointer ist. Du mußt CDC::MoveTo(...) so</p>
<pre><code class="language-cpp">pDC-&gt;MoveTo(...);
</code></pre>
<p>aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/588920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/588920</guid><dc:creator><![CDATA[woodz]]></dc:creator><pubDate>Mon, 23 Aug 2004 09:44:30 GMT</pubDate></item></channel></rss>