<?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[Hausfinden ob Druckvorschau oder normale View]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe wieder mal ein kleines Problem:</p>
<p>In meinem MDI-Projekt blende ich links neben den offenen Views einen Baum ein. Auf Benutzereingaben (rechte &amp; linke Maustaste auf Baum) reagiere ich in der PreTranslateMessage-Routine des MainFrames.</p>
<p>Das ganze sieht grob skizziert so aus:</p>
<pre><code class="language-cpp">if ((pMsg-&gt;message == WM_LBUTTONDOWN) || (pMsg-&gt;message == WM_RBUTTONDOWN))
  {
  HTREEITEM hProjectItem, hItem;
  CPoint pt = pMsg-&gt;pt;
  CString actViewText;
  CMyProjectView *actView;

  m_treeCtrl.ScreenToClient(&amp;pt);

  hItem = m_treeCtrl.HitTest(pt);
  hProjectItem = theApp.GetProjectTreeItem(hItem);

  if (hItem)
    {
    // Aktuelle View herausfinden
    actView = (CMyProjectView*)MDIGetActive()-&gt;GetActiveView();

    // Item selektieren
    m_treeCtrl.Select(hItem, TVGN_DROPHILITE);

    projectText = m_treeCtrl.GetItemText(hProjectItem);
    actViewText = actView-&gt;m_cStrWindowText;

    // ... weitere abarbeitung der Eingabe
    }
  }

return CMDIFrameWnd::PreTranslateMessage(pMsg);
</code></pre>
<p>Wenn nun das Druckvorschau-Fenster offen ist und der Benutzer auf irgend einen Bereich außerhalb des gezeichneten Bereichs druckt (zB. der graue Bereich, der im <a href="http://www.ras-kas.net/Pics/non_printarea.jpg" rel="nofollow">Pic1</a> durch den roten Pfeil gekennzeichnet ist) kommt das Programm auch in die PreTranslateMessage-Routine des MainFrames.</p>
<p>Hier bekomme ich dann bei folgendem Statement eine Exception:</p>
<pre><code class="language-cpp">actViewText = actView-&gt;m_cStrWindowText;
</code></pre>
<p>Ist ja soweit auch klar, weil die actView ja nicht vom Typ CMyProjectView, sondern CPreviewView ist und diese natürlich keine Member-Variable m_cStrWindowText besitzt...</p>
<p>Wie kann ich nun im PreTranslateMessage herausfinden, ob die ActView eine CMyProjectView oder eine CPreviewView ist, damit ich die Abarbeitung stoppen und somit die Exception verhindern kann?</p>
<p>danke, mfg</p>
<p>mike</p>
<p>ps.: <a href="http://www.ras-kas.net/Pics/CPreviewView.jpg" rel="nofollow">Pic2</a> zeigt ein paar (möglicherweise) Hilfreiche Details aus der Debug-Ansicht (links nach Mausklick in Druck-Vorschau-Bereich vor Programmabsturz und rechts nach Mausklick auf Tree-Item).<br />
Die schwarz Hinterlegten C...Views sind jeweils vom Typ CMyProjectView.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172555/hausfinden-ob-druckvorschau-oder-normale-view</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 17:10:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172555.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Feb 2007 09:43:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hausfinden ob Druckvorschau oder normale View on Tue, 06 Feb 2007 09:43:58 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe wieder mal ein kleines Problem:</p>
<p>In meinem MDI-Projekt blende ich links neben den offenen Views einen Baum ein. Auf Benutzereingaben (rechte &amp; linke Maustaste auf Baum) reagiere ich in der PreTranslateMessage-Routine des MainFrames.</p>
<p>Das ganze sieht grob skizziert so aus:</p>
<pre><code class="language-cpp">if ((pMsg-&gt;message == WM_LBUTTONDOWN) || (pMsg-&gt;message == WM_RBUTTONDOWN))
  {
  HTREEITEM hProjectItem, hItem;
  CPoint pt = pMsg-&gt;pt;
  CString actViewText;
  CMyProjectView *actView;

  m_treeCtrl.ScreenToClient(&amp;pt);

  hItem = m_treeCtrl.HitTest(pt);
  hProjectItem = theApp.GetProjectTreeItem(hItem);

  if (hItem)
    {
    // Aktuelle View herausfinden
    actView = (CMyProjectView*)MDIGetActive()-&gt;GetActiveView();

    // Item selektieren
    m_treeCtrl.Select(hItem, TVGN_DROPHILITE);

    projectText = m_treeCtrl.GetItemText(hProjectItem);
    actViewText = actView-&gt;m_cStrWindowText;

    // ... weitere abarbeitung der Eingabe
    }
  }

return CMDIFrameWnd::PreTranslateMessage(pMsg);
</code></pre>
<p>Wenn nun das Druckvorschau-Fenster offen ist und der Benutzer auf irgend einen Bereich außerhalb des gezeichneten Bereichs druckt (zB. der graue Bereich, der im <a href="http://www.ras-kas.net/Pics/non_printarea.jpg" rel="nofollow">Pic1</a> durch den roten Pfeil gekennzeichnet ist) kommt das Programm auch in die PreTranslateMessage-Routine des MainFrames.</p>
<p>Hier bekomme ich dann bei folgendem Statement eine Exception:</p>
<pre><code class="language-cpp">actViewText = actView-&gt;m_cStrWindowText;
</code></pre>
<p>Ist ja soweit auch klar, weil die actView ja nicht vom Typ CMyProjectView, sondern CPreviewView ist und diese natürlich keine Member-Variable m_cStrWindowText besitzt...</p>
<p>Wie kann ich nun im PreTranslateMessage herausfinden, ob die ActView eine CMyProjectView oder eine CPreviewView ist, damit ich die Abarbeitung stoppen und somit die Exception verhindern kann?</p>
<p>danke, mfg</p>
<p>mike</p>
<p>ps.: <a href="http://www.ras-kas.net/Pics/CPreviewView.jpg" rel="nofollow">Pic2</a> zeigt ein paar (möglicherweise) Hilfreiche Details aus der Debug-Ansicht (links nach Mausklick in Druck-Vorschau-Bereich vor Programmabsturz und rechts nach Mausklick auf Tree-Item).<br />
Die schwarz Hinterlegten C...Views sind jeweils vom Typ CMyProjectView.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223693</guid><dc:creator><![CDATA[suamikim]]></dc:creator><pubDate>Tue, 06 Feb 2007 09:43:58 GMT</pubDate></item><item><title><![CDATA[Reply to Hausfinden ob Druckvorschau oder normale View on Tue, 06 Feb 2007 21:30:02 GMT]]></title><description><![CDATA[<p>suamikim schrieb:</p>
<blockquote>
<p>In meinem MDI-Projekt blende ich links neben den offenen Views einen Baum ein. Auf Benutzereingaben (rechte &amp; linke Maustaste auf Baum) reagiere ich in der PreTranslateMessage-Routine des MainFrames.</p>
<p>Das ganze sieht grob skizziert so aus:</p>
<pre><code class="language-cpp">if ((pMsg-&gt;message == WM_LBUTTONDOWN) || (pMsg-&gt;message == WM_RBUTTONDOWN))
  {
  HTREEITEM hProjectItem, hItem;
  CPoint pt = pMsg-&gt;pt;
  CString actViewText;
  CMyProjectView *actView;

  m_treeCtrl.ScreenToClient(&amp;pt);

  hItem = m_treeCtrl.HitTest(pt);
  hProjectItem = theApp.GetProjectTreeItem(hItem);
</code></pre>
</blockquote>
<p>Du solltest das ganze nur machen wenn:</p>
<pre><code class="language-cpp">if (m_treeCtrl.IsWindowVisible())
{
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1223697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223697</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 06 Feb 2007 21:30:02 GMT</pubDate></item><item><title><![CDATA[Reply to Hausfinden ob Druckvorschau oder normale View on Tue, 06 Feb 2007 09:56:16 GMT]]></title><description><![CDATA[<p>OMG, warum einfach, wenns kompliziert auch geht...</p>
<p>Danke, hab vor lauter Wald die Bäume nicht mehr gesehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223705</guid><dc:creator><![CDATA[suamikim]]></dc:creator><pubDate>Tue, 06 Feb 2007 09:56:16 GMT</pubDate></item></channel></rss>