<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martin&#039;s Blog &#187; C++</title>
	<atom:link href="http://blog.m-ri.de/index.php/category/programmieren/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.m-ri.de</link>
	<description>Gesammeltes aus dem Leben eines &#34;normalen&#34; Programmierers... :-)</description>
	<lastBuildDate>Thu, 29 Jul 2010 19:26:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MFC-Next 9.0 &gt; MFC 10.0 denn CMFCRibbonPanel::EnableLaunchButton gibt es nicht mehr</title>
		<link>http://blog.m-ri.de/index.php/2010/07/25/mfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr/</link>
		<comments>http://blog.m-ri.de/index.php/2010/07/25/mfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 15:19:40 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[MFC-Next]]></category>
		<category><![CDATA[VS-2005]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=645</guid>
		<description><![CDATA[<p>Sehr erfreut waren viele C++ Entwickler darüber das es mit der <em>MFC</em> in <em>VC-2008</em> weiter ging und <em>MFC-Next </em>veröffentlicht wurde. Das ganze wurde dann fest in <em>VS-2008 SP1</em> integriert. Normalerweise sind wir es gewohnt, dass zur <em>MFC </em>nur Dinge hinzukommen und nichts wegfällt.</p>
<p>Für die <em>MFC 10.0</em> aus <em>VS-2010</em> gilt das diesmal nicht: <strong><em>MFC 10.0 &lt; MFC-Next 9.0</em></strong>!</p>
<p>Irgendwie hat es <a href="http://msdn.microsoft.com/en-us/library/bb983968(VS.100).aspx">CMFCRibbonPanel::EnableLaunchButton</a> nicht in die <em>MFC 10.0 </em>geschafft, obwohl die Funktion vollständig in der <em>MFC-Next 9.0 </em>implementiert war. Das soll mal einer verstehen <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_confused.gif' alt=':?' class='wp-smiley' />  ich jedenfalls nicht!</p>
<p>Diese Funktion sorgt für den kleinen netten Schalter in einem Panel:<br />
<a href="http://blog.m-ri.de/wp-content/uploads/2010/07/LaunchButton.jpg"><img class="alignnone size-full wp-image-646" title="LaunchButton" src="http://blog.m-ri.de/wp-content/uploads/2010/07/LaunchButton.jpg" alt="" width="173" height="102" /></a></p>
<p>Erstaunlicherweise gibt es diese Funktion nun nicht mehr! Wer also 100% Office-kompatible Anwendungen schreiben will ist hier schon mal aufgeschmissen, wenn er das mit MFC 10.0 machen will.<br />
Im Header finden wir diese Funktion noch mit einem <em>#ifdef </em>auskommentiert. Allerdings nützt es nichts diesen <em>#define </em>zu setzen, denn es gibt keine Implementierung und entsprechend keinen Code in der DLL/Library. Ja und in der <a href="http://msdn.microsoft.com/en-us/library/bb983968(VS.100).aspx">MFC Doku </a>finden wir die Funktion auch noch.</p>
<p>Und auch dieses Problem war noch in der Beta-Phase bekannt und wurde abgebügelt, wie man in den nachfolgenden Links lesen kann.<br />
<a href="http://social.msdn.microsoft.com/Forums/en/vcmfcatl/thread/29ad2859-6341-4ffb-85c2-f5f056a6ca48">http://social.msdn.microsoft.com/Forums/en/vcmfcatl/thread/29ad2859-6341-4ffb-85c2-f5f056a6ca48</a><br />
<a href="https://connect.microsoft.com/VisualStudioJapan/feedback/details/533876/cmfcribbonpanel-enablelaunchbutton?wa=wsignin1.0">https://connect.microsoft.com/VisualStudioJapan/feedback/details/533876/cmfcribbonpanel-enablelaunchbutton?wa=wsignin1.0</a><br />
<strong>Wem es möglich ist, sollte hier bitte Abstimmen und diesen Bug als wichtig kennzeichnen!</strong></p>
<p>Langsam frage ich mich ob es nicht gescheiter gewesen wäre bei MFC-Next 9.0 zu bleiben und mit VS-2008 weiter zu arbeiten.<br />
Tja und so hat die <a href="http://www.bcgsoft.com">BCG-Library</a> in Verbindung mit VS-2010 auch eine Daseinsberechtigung. Die kann diesen LaunchButton natürlich darstellen.</p>
<p>PS: Auf Nachfrage bei Microsoft bekam ich eine Antwort aber keinerlei Begründung. Jetzt habe ich eine Support-Anfrage dies bzgl. laufen, allerdings mit wenig Hoffnung. <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F25%2Fmfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr%2F&amp;title=MFC-Next%209.0%20%3E%20MFC%2010.0%20denn%20CMFCRibbonPanel%3A%3AEnableLaunchButton%20gibt%20es%20nicht%20mehr&amp;annotation=Sehr%20erfreut%20waren%20viele%20C%2B%2B%20Entwickler%20dar%C3%BCber%20das%20es%20mit%20der%20MFC%20in%20VC-2008%20weiter%20ging%20und%20MFC-Next%20ver%C3%B6ffentlicht%20wurde.%20Das%20ganze%20wurde%20dann%20fest%20in%20VS-2008%20SP1%20integriert.%20Normalerweise%20sind%20wir%20es%20gewohnt%2C%20dass%20zur%20MFC%20nur%20Dinge%20hinzukommen%20" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F25%2Fmfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr%2F&amp;title=MFC-Next%209.0%20%3E%20MFC%2010.0%20denn%20CMFCRibbonPanel%3A%3AEnableLaunchButton%20gibt%20es%20nicht%20mehr&amp;notes=Sehr%20erfreut%20waren%20viele%20C%2B%2B%20Entwickler%20dar%C3%BCber%20das%20es%20mit%20der%20MFC%20in%20VC-2008%20weiter%20ging%20und%20MFC-Next%20ver%C3%B6ffentlicht%20wurde.%20Das%20ganze%20wurde%20dann%20fest%20in%20VS-2008%20SP1%20integriert.%20Normalerweise%20sind%20wir%20es%20gewohnt%2C%20dass%20zur%20MFC%20nur%20Dinge%20hinzukommen%20" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F25%2Fmfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr%2F&amp;bm_description=MFC-Next%209.0%20%3E%20MFC%2010.0%20denn%20CMFCRibbonPanel%3A%3AEnableLaunchButton%20gibt%20es%20nicht%20mehr&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F25%2Fmfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F25%2Fmfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr%2F&amp;t=MFC-Next%209.0%20%3E%20MFC%2010.0%20denn%20CMFCRibbonPanel%3A%3AEnableLaunchButton%20gibt%20es%20nicht%20mehr" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F25%2Fmfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr%2F&amp;title=MFC-Next%209.0%20%3E%20MFC%2010.0%20denn%20CMFCRibbonPanel%3A%3AEnableLaunchButton%20gibt%20es%20nicht%20mehr" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=MFC-Next%209.0%20%3E%20MFC%2010.0%20denn%20CMFCRibbonPanel%3A%3AEnableLaunchButton%20gibt%20es%20nicht%20mehr%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F25%2Fmfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2009/12/03/afxmessagebox-versus-cwndmessagebox/" title="AfxMessageBox versus CWnd::MessageBox (Do 03. Dez 2009)">AfxMessageBox versus CWnd::MessageBox</a> (4)</li>
	<li><a href="http://blog.m-ri.de/index.php/2007/06/02/wie-findet-die-mfc-80-eigentlich-die-mfc80llldll-dateien/" title="Wie findet die MFC 8.0 eigentlich die MFC80lll.DLL Dateien? (Sa 02. Jun 2007)">Wie findet die MFC 8.0 eigentlich die MFC80lll.DLL Dateien?</a> (0)</li>
	<li><a href="http://blog.m-ri.de/index.php/2009/12/21/vs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif/" title="VS-Tipps &#038; Tricks: Springe zur nächsten Klammer funktioniert auch für #if, #elif, #else und #endif (Mo 21. Dez 2009)">VS-Tipps &#038; Tricks: Springe zur nächsten Klammer funktioniert auch für #if, #elif, #else und #endif</a> (1)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/07/25/mfc-next-9-0-mfc-10-0-denn-cmfcribbonpanelenablelaunchbutton-gibt-es-nicht-mehr/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bug in der MFC von VC-2010 in CImageList::DrawIndirect</title>
		<link>http://blog.m-ri.de/index.php/2010/07/21/bug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect/</link>
		<comments>http://blog.m-ri.de/index.php/2010/07/21/bug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 18:35:35 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[VC-Express]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=643</guid>
		<description><![CDATA[<p>Die Funktion <em>CImageList::DrawIndirect </em>der <em>MFC-10 </em></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">BOOL CImageList<span style="color: #008080;">::</span><span style="color: #007788;">DrawIndirect</span><span style="color: #008000;">&#40;</span>CDC<span style="color: #000040;">*</span> pDC, <span style="color: #0000ff;">int</span> nImage, POINT pt, SIZE sz,
    POINT ptOrigin, UINT fStyle <span style="color: #000080;">=</span> ILD_NORMAL, DWORD dwRop <span style="color: #000080;">=</span> SRCCOPY,
    COLORREF rgbBack <span style="color: #000080;">=</span> CLR_DEFAULT, COLORREF rgbFore <span style="color: #000080;">=</span> CLR_DEFAULT,
    DWORD fState <span style="color: #000080;">=</span> ILS_NORMAL, DWORD Frame <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>,
    COLORREF crEffect <span style="color: #000080;">=</span> CLR_DEFAULT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>hat einen massiven Bug: Sie funktioniert einfach nicht.</p>
<p>Der Unsinn, der sich eingeschlichen hat, liegt in der überschriebenen Funktion</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">BOOL CImageList<span style="color: #008080;">::</span><span style="color: #007788;">DrawIndirect</span><span style="color: #008000;">&#40;</span>IMAGELISTDRAWPARAMS<span style="color: #000040;">*</span> pimldp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>die durch die oben genannte Variante aufgerufen wird. Denn hier <em>cbSize </em>von <em>IMAGELISTDRAWPARAMS </em>nicht mehr in allen Fällen auf einen korrekten Wert gesetzt. Die Folge <em>cbSize </em>enthält Garbage und der Aufruf von ImageList_DrawIndirect geht in die Hose!<br />
Sowohl in <em>VC-2005</em> als auch <em>VC-2008</em> wurde in dieser Funktion explizit der cbSize Member überschrieben, je nach dem ob <em>ComCtl 6.0</em> oder höher von der Anwendung benutzt wird.</p>
<p>Auch das ist ein Bug, denn hierdurch wird evtl. ein korrekt gesetzter cbSize Wert mit <em>IMAGELISTDRAWPARAMS_V3_SIZE</em> (pre <em>IE 5.01</em> d.h. <em>_WIN32_IE &lt; 0&#215;0501</em>) überschrieben und damit vergrößert vergrößert. Dadurch kann es zu Zugriffsfehlern kommen oder zu unerwünschten Seiteneffekten.<br />
(siehe <a href="https://connect.microsoft.com/VisualStudio/feedback/details/322713/bug-in-cimagelist-drawindirect">https://connect.microsoft.com/VisualStudio/feedback/details/322713/bug-in-cimagelist-drawindirect</a>)</p>
<p>Also haben die Entwickler scheinbar die Zuweisung von <em>pimldp-&gt;cbSize = sizeof(IMAGELISTDRAWPARAMS)</em> entfernt! Allerdings haben Sie dabei vergessen in der anderen Funktion nun <em>cbSize </em>korrekt zu initialisieren!</p>
<p>Wir haben also wieder mal einen Fall von: <em>Let us fix one thing and break others&#8230;</em></p>
<p>Das Gemeine an der Sache ist, dass dieser Bug noch vor RTM bekannt war:<br />
<a href="https://connect.microsoft.com/VisualStudio/feedback/details/543108/bug-in-cimagelist-drawindirect">https://connect.microsoft.com/VisualStudio/feedback/details/543108/bug-in-cimagelist-drawindirect</a><br />
Nur ist er nicht mehr gefixed worden!</p>
<p>PS: Natürlich fährt die eigene Software mit der <em>MFC-10</em> auch gegen die Wand, wenn man die <em>CImageList::DrawIndirect(IMAGELISTDRAWPARAMS* pimldp)</em> Variante verwendet und selbst <em>cbSize </em>nicht initialisiert, was ein ordentlicher Entwickler aber sicherlich nicht vergisst! <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Wem es möglich ist, sollte bei den beiden Connect Einträgen Abstimmen und diesen Bug als wichtig kennzeichnen!</strong></p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F21%2Fbug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect%2F&amp;title=Bug%20in%20der%20MFC%20von%20VC-2010%20in%20CImageList%3A%3ADrawIndirect&amp;annotation=Die%20Funktion%20CImageList%3A%3ADrawIndirect%20der%20MFC-10%20%0D%0ABOOL%20CImageList%3A%3ADrawIndirect%28CDC%2A%20pDC%2C%20int%20nImage%2C%20POINT%20pt%2C%20SIZE%20sz%2C%0D%0A%20%20%20%20POINT%20ptOrigin%2C%20UINT%20fStyle%20%3D%20ILD_NORMAL%2C%20DWORD%20dwRop%20%3D%20SRCCOPY%2C%0D%0A%20%20%20%20COLORREF%20rgbBack%20%3D%20CLR_DEFAULT%2C%20COLORREF%20rgbFore%20%3D%20CL" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F21%2Fbug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect%2F&amp;title=Bug%20in%20der%20MFC%20von%20VC-2010%20in%20CImageList%3A%3ADrawIndirect&amp;notes=Die%20Funktion%20CImageList%3A%3ADrawIndirect%20der%20MFC-10%20%0D%0ABOOL%20CImageList%3A%3ADrawIndirect%28CDC%2A%20pDC%2C%20int%20nImage%2C%20POINT%20pt%2C%20SIZE%20sz%2C%0D%0A%20%20%20%20POINT%20ptOrigin%2C%20UINT%20fStyle%20%3D%20ILD_NORMAL%2C%20DWORD%20dwRop%20%3D%20SRCCOPY%2C%0D%0A%20%20%20%20COLORREF%20rgbBack%20%3D%20CLR_DEFAULT%2C%20COLORREF%20rgbFore%20%3D%20CL" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F21%2Fbug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect%2F&amp;bm_description=Bug%20in%20der%20MFC%20von%20VC-2010%20in%20CImageList%3A%3ADrawIndirect&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F21%2Fbug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F21%2Fbug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect%2F&amp;t=Bug%20in%20der%20MFC%20von%20VC-2010%20in%20CImageList%3A%3ADrawIndirect" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F21%2Fbug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect%2F&amp;title=Bug%20in%20der%20MFC%20von%20VC-2010%20in%20CImageList%3A%3ADrawIndirect" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Bug%20in%20der%20MFC%20von%20VC-2010%20in%20CImageList%3A%3ADrawIndirect%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F07%2F21%2Fbug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2008/11/16/cfiledialog-oeffnet-unter-umstaenden-nicht/" title="CFileDialog öffnet unter Umständen nicht (So 16. Nov 2008)">CFileDialog öffnet unter Umständen nicht</a> (2)</li>
	<li><a href="http://blog.m-ri.de/index.php/2009/01/29/wm_floatstatus-der-nette-helfer-fuer-eigene-popup-fenster/" title="WM_FLOATSTATUS der nette Helfer für eigene Popup Fenster (Do 29. Jan 2009)">WM_FLOATSTATUS der nette Helfer für eigene Popup Fenster</a> (0)</li>
	<li><a href="http://blog.m-ri.de/index.php/2007/06/02/wie-findet-die-mfc-80-eigentlich-die-mfc80llldll-dateien/" title="Wie findet die MFC 8.0 eigentlich die MFC80lll.DLL Dateien? (Sa 02. Jun 2007)">Wie findet die MFC 8.0 eigentlich die MFC80lll.DLL Dateien?</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/07/21/bug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wie man den Namen einer RegisterWindowMessage bekommt</title>
		<link>http://blog.m-ri.de/index.php/2010/06/23/wie-man-den-namen-einer-registerwindowmessage-bekommt/</link>
		<comments>http://blog.m-ri.de/index.php/2010/06/23/wie-man-den-namen-einer-registerwindowmessage-bekommt/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 19:08:02 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Vista / Windows 7]]></category>
		<category><![CDATA[Windows API]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[WinAPI]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=128</guid>
		<description><![CDATA[<p>Manchmal muss man Software verstehen. D.h. auch andere Software, die man selbst nicht geschrieben hat <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>In meinem Fall war es hier ein Client, den ich geschrieben habe, der eine andere Software startet. Diese Software verwendete interne Nachrichten zur Kommunikation, die mit RegisterWindowMessage registriert wurden. Ich wollte nun hier einen Eingriff machen, der ein Fehlverhalten unter <em>Windows 7</em> und <em>Vista</em> vermeiden soll.</p>
<p>Hilfreich wäre für mich nun gewesen an den Namen der registrierten Nachrichten zu kommen. <em>Spy++</em> kann es auch und der importiert auch keine mystischen Funktionen. Also muss es einfach gehen.</p>
<p>Und ein wenig Recherche und ein Verweis eines Community Eintrags brachte mich auf diesen Thread:<br />
<a href="http://groups.google.it/group/microsoft.public.vc.mfc/browse_thread/thread/f83f7c12c80e4ada/460bc4c43a844a37">http://groups.google.it/group/microsoft.public.vc.mfc/browse_thread/thread/f83f7c12c80e4ada/460bc4c43a844a37</a></p>
<p>Siehe da <a href="http://msdn.microsoft.com/en-us/library/ms649040(v=VS.85).aspx" target="_self">GetClipboardFormatName</a> löst das Problem. Der nachfolgende Code lieferte mir nun im Detail, was das so hin und her läuft und der Name der Nachrichten war zum Glück sprechend. Ich konnte das Problem lösen.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>uiMsg<span style="color: #000080;">&gt;=</span><span style="color: #208080;">0xC000</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  TCHAR szName<span style="color: #008000;">&#91;</span>MAX_PATH<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  <span style="color: #008080;">::</span><span style="color: #007788;">GetClipboardFormatName</span><span style="color: #008000;">&#40;</span>uiMsg,szName,MfxCountOf<span style="color: #008000;">&#40;</span>szName<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  TCHAR szOut<span style="color: #008000;">&#91;</span>MAX_PATH<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  _stprintf<span style="color: #008000;">&#40;</span>szOut,_T<span style="color: #008000;">&#40;</span>__FUNCTION__<span style="color: #008000;">&#41;</span> _T<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; %s, wp=0x%08x, lp=0x%08x<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span>,
            szName, wParam, lParam<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  OutputDebugString<span style="color: #008000;">&#40;</span>szOut<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F23%2Fwie-man-den-namen-einer-registerwindowmessage-bekommt%2F&amp;title=Wie%20man%20den%20Namen%20einer%20RegisterWindowMessage%20bekommt&amp;annotation=Manchmal%20muss%20man%20Software%20verstehen.%20D.h.%20auch%20andere%20Software%2C%20die%20man%20selbst%20nicht%20geschrieben%20hat%20%3B%29%0D%0A%0D%0AIn%20meinem%20Fall%20war%20es%20hier%20ein%20Client%2C%20den%20ich%20geschrieben%20habe%2C%20der%20eine%20andere%20Software%20startet.%20Diese%20Software%20verwendete%20interne%20Nachricht" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F23%2Fwie-man-den-namen-einer-registerwindowmessage-bekommt%2F&amp;title=Wie%20man%20den%20Namen%20einer%20RegisterWindowMessage%20bekommt&amp;notes=Manchmal%20muss%20man%20Software%20verstehen.%20D.h.%20auch%20andere%20Software%2C%20die%20man%20selbst%20nicht%20geschrieben%20hat%20%3B%29%0D%0A%0D%0AIn%20meinem%20Fall%20war%20es%20hier%20ein%20Client%2C%20den%20ich%20geschrieben%20habe%2C%20der%20eine%20andere%20Software%20startet.%20Diese%20Software%20verwendete%20interne%20Nachricht" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F23%2Fwie-man-den-namen-einer-registerwindowmessage-bekommt%2F&amp;bm_description=Wie%20man%20den%20Namen%20einer%20RegisterWindowMessage%20bekommt&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F23%2Fwie-man-den-namen-einer-registerwindowmessage-bekommt%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F23%2Fwie-man-den-namen-einer-registerwindowmessage-bekommt%2F&amp;t=Wie%20man%20den%20Namen%20einer%20RegisterWindowMessage%20bekommt" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F23%2Fwie-man-den-namen-einer-registerwindowmessage-bekommt%2F&amp;title=Wie%20man%20den%20Namen%20einer%20RegisterWindowMessage%20bekommt" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Wie%20man%20den%20Namen%20einer%20RegisterWindowMessage%20bekommt%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F23%2Fwie-man-den-namen-einer-registerwindowmessage-bekommt%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2010/01/23/was-denn-nun-switchtothread-sleep0-sleep1-2/" title="Was denn nun SwitchToThread(), Sleep(0), Sleep(1)? (Sa 23. Jan 2010)">Was denn nun SwitchToThread(), Sleep(0), Sleep(1)?</a> (2)</li>
	<li><a href="http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/" title="VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version (So 09. Aug 2009)">VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version</a> (9)</li>
	<li><a href="http://blog.m-ri.de/index.php/2008/11/04/vs-tipps-tricks-heap-bugs-finden-teil-3/" title="VS Tipps &#038; Tricks: Heap Bugs finden (Teil 3) (Di 04. Nov 2008)">VS Tipps &#038; Tricks: Heap Bugs finden (Teil 3)</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/06/23/wie-man-den-namen-einer-registerwindowmessage-bekommt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExitInstance gibt für dialogbasierende MFC Anwendungen Unfug zurück</title>
		<link>http://blog.m-ri.de/index.php/2010/06/18/exitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck/</link>
		<comments>http://blog.m-ri.de/index.php/2010/06/18/exitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 18:58:56 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Windows API]]></category>
		<category><![CDATA[4NT]]></category>
		<category><![CDATA[Batch]]></category>
		<category><![CDATA[CMD.EXE]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[Dialog]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=484</guid>
		<description><![CDATA[<p>Wer eine dialogbasierende Anwendung mal mit etwas mehr Aufmerksamkeit debuggt oder analysiert wird feststellen, dass der Returncode der Anwendung irgendwie ziemlich zufällig ist. Beobachtet man dies genauer dann stellt man folgendes fest:</p>
<ul>
<li>Beendet man die Anwendung mit der Maus (Klick auf X) oder OK/Cancel so ist der Returncode 0</li>
<li>Hält man die <em>Strg</em>-Taste beim Klick fest ist der Returncode 8</li>
<li>Beendet man die Anwendung mit <em>Alt+F4 </em>bekommen wir 2.</li>
<li>Und jedermann kann jetzt schon mal raten was passiert, wenn wir die Umschalttaste festhalten. Genau dann bekommen wir 4 als Returncode.</li>
</ul>
<p>Die Mystik hinter dem Ganzen ist die Behandlung von (<em>Afx)PostQuitMessage</em>. Eigentlich sollte mit dieser Nachricht auch der Exitcode gesetzt werden, der mit <em>WM_QUIT</em> versendet wird. Und wenn eben bei einer <em>MDI/SDI </em>Anwendung alles normal läuft, dann ist diese Nachricht die letzte, die aus der Messsagequeue gezogen wird. Und was passiert in <em>CWinApp::ExitInstance</em>? Genau&#8230; aus dem statischen Thread Puffer für die Windowsnachrichten wird mit  AfxGetCurrentMessage die letzte Windowsnachricht (normalerweise <em>WM_QUIT</em>) geholt und der <em>wParam</em> Wert bestimmt. Dieser wird dann zurückgegeben.</p>
<p>Leider ist aber <em>WM_QUIT </em>in manchen Fällen aber nicht die letzte Nachricht, die zum Beenden eines Programms führt. Ganz besonders eben nicht bei einer dialogbasierenden <em>MFC</em>-Anwendung. Da ist die letzte Nachricht ist dann eben ein <em>WM_COMMAND </em>oder ein <em>WM_LBUTTONUP </em>der das Schließen der Anwendung auslöst <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  Und der <em>wParam</em> Wert ist eben entsprechend dieser Nachricht belegt!</p>
<p>Gleiches passiert natürlich, wenn man nach dem Beenden der Messageloop noch andere interne Fenster zerstört. Auch in diesem Fall kann noch mal die interne <em>AfxWndProc</em> durchlaufen werden und dann wird der Returncode auch wieder verändert.</p>
<p>Wer also wirklich Wert auf den Returncode legt (im wahrsten Sinne des Wortes), der sollte sich nie auf den Wert verlassen, der durch <em>CWinApp::ExitInstance</em> zurückgegeben wird oder den Wert, den man selbst mit <em>AfxPostQuitMessage </em>evtl. versucht zu setzen. Eine Variable in <em>CWinApp </em>tut hier einen besseren Dienst. Ebenfalls sollte man ExitInstance überschreiben und immer 0 zurückgeben, wenn man sowieso keine Verwendung für den Returncode des Prozesses hat oder haben möchte.</p>
<p>BTW:<br />
Die Geschichte, wie ich darauf gekommen bin ist schon eigentümlich genug.<br />
Ich habe komplexere Batch-Dateien, die die gesamte Erstellung einer produktiv-Version regelt. Darin kommen im Problemfall auch ein paar Userinteraktionen vor. Diese werden durch Windows Anwendungen ausgelöst, die evtl. einen Dialog anzeigen. Jedem ist klar, dass ohne Dialog und ohne Fenster keine Nachricht abgearbeitet wird. Der Returncode ist also 0! Der Batch verwendet <a href="http://www.jpsoft.com/">4NT</a> Syntax und dort kann man <em>ON ERROR </em>definieren und somit sofort eine Fehlerbehandlung auslösen, wenn der Returncode eines Programms nicht 0 ist.<br />
Nun kann sich jeder schon denken was passiert ist. Die Userinteraktion wurde ausgelöst. Der Benutzer machte eine Angabe und&#8230; der Batch terminierte erstaunlicherweise mit einem Fehler&#8230; (s.o.)</p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F18%2Fexitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck%2F&amp;title=ExitInstance%20gibt%20f%C3%BCr%20dialogbasierende%20MFC%20Anwendungen%20Unfug%20zur%C3%BCck&amp;annotation=Wer%20eine%20dialogbasierende%20Anwendung%20mal%20mit%20etwas%20mehr%20Aufmerksamkeit%20debuggt%20oder%20analysiert%20wird%20feststellen%2C%20dass%20der%20Returncode%20der%20Anwendung%20irgendwie%20ziemlich%20zuf%C3%A4llig%20ist.%20Beobachtet%20man%20dies%20genauer%20dann%20stellt%20man%20folgendes%20fest%3A%0D%0A%0D%0A%09Beende" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F18%2Fexitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck%2F&amp;title=ExitInstance%20gibt%20f%C3%BCr%20dialogbasierende%20MFC%20Anwendungen%20Unfug%20zur%C3%BCck&amp;notes=Wer%20eine%20dialogbasierende%20Anwendung%20mal%20mit%20etwas%20mehr%20Aufmerksamkeit%20debuggt%20oder%20analysiert%20wird%20feststellen%2C%20dass%20der%20Returncode%20der%20Anwendung%20irgendwie%20ziemlich%20zuf%C3%A4llig%20ist.%20Beobachtet%20man%20dies%20genauer%20dann%20stellt%20man%20folgendes%20fest%3A%0D%0A%0D%0A%09Beende" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F18%2Fexitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck%2F&amp;bm_description=ExitInstance%20gibt%20f%C3%BCr%20dialogbasierende%20MFC%20Anwendungen%20Unfug%20zur%C3%BCck&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F18%2Fexitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F18%2Fexitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck%2F&amp;t=ExitInstance%20gibt%20f%C3%BCr%20dialogbasierende%20MFC%20Anwendungen%20Unfug%20zur%C3%BCck" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F18%2Fexitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck%2F&amp;title=ExitInstance%20gibt%20f%C3%BCr%20dialogbasierende%20MFC%20Anwendungen%20Unfug%20zur%C3%BCck" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=ExitInstance%20gibt%20f%C3%BCr%20dialogbasierende%20MFC%20Anwendungen%20Unfug%20zur%C3%BCck%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F18%2Fexitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/" title="VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version (So 09. Aug 2009)">VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version</a> (9)</li>
	<li><a href="http://blog.m-ri.de/index.php/2008/11/27/vs-tipps-tricks-heap-bugs-finden-teil-4/" title="VS Tipps &#038; Tricks: Heap Bugs finden (Teil 4) (Do 27. Nov 2008)">VS Tipps &#038; Tricks: Heap Bugs finden (Teil 4)</a> (0)</li>
	<li><a href="http://blog.m-ri.de/index.php/2008/11/04/vs-tipps-tricks-heap-bugs-finden-teil-3/" title="VS Tipps &#038; Tricks: Heap Bugs finden (Teil 3) (Di 04. Nov 2008)">VS Tipps &#038; Tricks: Heap Bugs finden (Teil 3)</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/06/18/exitinstance-gibt-fuer-dialogbasierende-mfc-anwendungen-unfug-zurueck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tool: Screen-OCR Version 2.0, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren</title>
		<link>http://blog.m-ri.de/index.php/2010/06/01/tool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/</link>
		<comments>http://blog.m-ri.de/index.php/2010/06/01/tool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 19:36:52 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Freeware]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=635</guid>
		<description><![CDATA[<p>Am 15. Mai hatte ich eine erste Version meines Freeware Screen-OCR Programmes veröffentlicht. Siehe <a title="Permanent Link: Tool: Screen-OCR, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren" rel="bookmark" href="http://blog.m-ri.de/index.php/2010/05/15/tool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/">Tool: Screen-OCR, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren</a></p>
<p>Nun habe ich etwas Zeit für <strong>Version 2.0 </strong>gefunden <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /><br />
Folgende Verbesserungen wurden eingebaut:</p>
<ul>
<li>Etwas schönere UI für das Auschneiden aus dem aktuellen Desktop.</li>
<li>Deutsches und englisches Benutzerinterface.</li>
<li>Das Programm kann nur noch einmal gestartet werden. Mehrfaches Starten macht hier keinen Sinn.</li>
<li>Das Tool kann nun auch das letzte aktive Fenster per OCR erfassen, oder auch eine Bitmap in der Zwischenablage. Es wurde ein entsprechendes Drop-Down Menü eingebaut.</li>
<li>Es gab bei mehrfachen Aufrufen ab und zu Crashs, was offensichtlich daran liegt, dass die MODI-DLLs es nicht mögen geladen, entladen und wieder geladen zu werden.</li>
</ul>
<p><strong>Download hier  </strong><a href="http://blog.m-ri.de/wp-content/uploads/2010/05/MRiScreenOCR-2.0.zip"><strong>MRi-Screen-OCR Version 2.0</strong></a></p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F01%2Ftool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;title=Tool%3A%20Screen-OCR%20Version%202.0%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren&amp;annotation=Am%2015.%20Mai%20hatte%20ich%20eine%20erste%20Version%20meines%20Freeware%20Screen-OCR%20Programmes%20ver%C3%B6ffentlicht.%20Siehe%20Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren%0D%0A%0D%0ANun%20habe%20ich%20etwas%20Zeit%20f%C3%BC" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F01%2Ftool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;title=Tool%3A%20Screen-OCR%20Version%202.0%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren&amp;notes=Am%2015.%20Mai%20hatte%20ich%20eine%20erste%20Version%20meines%20Freeware%20Screen-OCR%20Programmes%20ver%C3%B6ffentlicht.%20Siehe%20Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren%0D%0A%0D%0ANun%20habe%20ich%20etwas%20Zeit%20f%C3%BC" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F01%2Ftool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;bm_description=Tool%3A%20Screen-OCR%20Version%202.0%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F01%2Ftool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F01%2Ftool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;t=Tool%3A%20Screen-OCR%20Version%202.0%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F01%2Ftool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;title=Tool%3A%20Screen-OCR%20Version%202.0%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Tool%3A%20Screen-OCR%20Version%202.0%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F06%2F01%2Ftool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2010/05/15/tool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/" title="Tool: Screen-OCR, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren (Sa 15. Mai 2010)">Tool: Screen-OCR, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren</a> (5)</li>
	<li><a href="http://blog.m-ri.de/index.php/2010/04/12/mal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend/" title="Mal einen ganz anderen Blick auf seinen Code werfen mit CppDepend (Mo 12. Apr 2010)">Mal einen ganz anderen Blick auf seinen Code werfen mit CppDepend</a> (8)</li>
	<li><a href="http://blog.m-ri.de/index.php/2007/05/31/_unicode-versus-unicode-und-so-manches-eigentuemliche/" title="_UNICODE versus UNICODE und so manches Eigentümliche (Do 31. Mai 2007)">_UNICODE versus UNICODE und so manches Eigentümliche</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/06/01/tool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tool: Screen-OCR, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren</title>
		<link>http://blog.m-ri.de/index.php/2010/05/15/tool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/</link>
		<comments>http://blog.m-ri.de/index.php/2010/05/15/tool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/#comments</comments>
		<pubDate>Sat, 15 May 2010 09:36:32 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Freeware]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=627</guid>
		<description><![CDATA[<p>Im Second-Level Support habe ich es oft mit Fehlermeldungen zu tun, die mir von Kunden als Screenshots gesendet werden. Um das ganze in unserem Support-System zu dokumentieren, müssen die oft genug abgeschrieben werden. Oder ich möchte diese Texte haben um sie einfach in Google suchen zu können. Viele Leute wissen nicht, dass man ganz einfach <a href="http://blog.m-ri.de/index.php/2008/08/21/text-aus-eine-messagebox-einfach-in-die-zwischenablage-kopieren/" target="_blank">Texte aus Messageboxen in die Zwischenablage</a> kopieren kann. Also bekommt man Megabyte große Screenshots.<br />
Lästig&#8230;</p>
<p>Es gibt einige kleine Tools  für Geld (z.B. von Abbyy) und auch einige kostenlose habe ich mal ausprobiert, mit denen man solch einen Screen-OCR durchführen kann. Aber die waren alle nicht das wahre oder unverschämt groß.</p>
<p>Da ich wusste, dass es</p>
<ol>
<li>im <em>MODI</em> (<em>Microsoft Office Document Imaging</em>) ein einfaches COM Interface gibt,</li>
<li>ein Screenshot einfach zu machen ist und</li>
<li>man mit GDI+ alle möglichen Grafikumwandlungen machen kann benötigt man</li>
<li>nur etwas C++ als Kleber um alles zusammen zu bringen.</li>
</ol>
<p>Herausgekommen ist Version 1.0 von <strong><em>MRiScreenOCR.exe</em></strong>. Eine simple Freeware EXE, mit der man einen beliebigen Bildschirmausschnitt per OCR in Text umwandeln kann und wahlweise in einem Dialog anzeigen kann oder direkt in die Zwischenablage kopieren kann.<br />
Optional kann man das ganze über ein paar Optionen im Systemmenü steuern.<br />
Eigentlich komplett selbsterklärend.<br />
Wer weiß, vielleicht mache ich mich noch an Version 2.0 und ergänze noch eine Trayicon-Funktion optional.</p>
<p> <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  Einzige Voraussetzung <em>MODI</em> (<em>Microsoft Office Document Imaging</em>) muss installiert sein, damit das kleine Tool arbeiten kann (siehe auch Anmerkung unten). Sonst benötigt man nichts. Die EXE funktioniert stand alone mit XCOPY Installation. Das Tool wurde mit <em>VC-2010 </em>erzeugt, man benötigt also mindestens <em>Windows XP SP2</em>.</p>
<p>Hier kann man <a href="http://blog.m-ri.de/index.php/2010/06/01/tool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/">MRiScreenOCR.exe</a> kostenlos herunter laden und es steht jedem als Freeware zur freien Nutzung.</p>
<p>PS:<br />
<em>MODI </em>ist übrigens teil von <em>Microsoft Office 2003 </em>und <em>Office 2007</em>. Leider ist es im <em>Office 2010 </em>nicht mehr enthalten. Schade, denn es war für mich das primäre Programm Dokumente zu scannen zu archivieren und auch zu indizieren.</p>
<p><strong>Nachtrag 18.05.2010:<br />
</strong>Es ist ohne weiteres möglich nur <em>MODI </em>aus <em>Office 2007 </em>alleine ohne weitere Komponenten zu installieren. Das funktioniert sowohl auf 32bit Systemen wie auch auf 64bit Systemen.</p>
<p><strong>Nachtrag 01.06.2010:<br />
</strong>Die <a href="http://blog.m-ri.de/index.php/2010/06/01/tool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/">Version 2.0 von MRiScreenOCR.exe</a> ist nun verfügbar.</p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F05%2F15%2Ftool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;title=Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren&amp;annotation=Im%20Second-Level%20Support%20habe%20ich%20es%20oft%20mit%20Fehlermeldungen%20zu%20tun%2C%20die%20mir%20von%20Kunden%20als%20Screenshots%20gesendet%20werden.%20Um%20das%20ganze%20in%20unserem%20Support-System%20zu%20dokumentieren%2C%20m%C3%BCssen%20die%20oft%20genug%20abgeschrieben%20werden.%20Oder%20ich%20m%C3%B6chte%20diese%20Texte%20" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F05%2F15%2Ftool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;title=Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren&amp;notes=Im%20Second-Level%20Support%20habe%20ich%20es%20oft%20mit%20Fehlermeldungen%20zu%20tun%2C%20die%20mir%20von%20Kunden%20als%20Screenshots%20gesendet%20werden.%20Um%20das%20ganze%20in%20unserem%20Support-System%20zu%20dokumentieren%2C%20m%C3%BCssen%20die%20oft%20genug%20abgeschrieben%20werden.%20Oder%20ich%20m%C3%B6chte%20diese%20Texte%20" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F05%2F15%2Ftool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;bm_description=Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F05%2F15%2Ftool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F05%2F15%2Ftool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;t=Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F05%2F15%2Ftool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F&amp;title=Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Tool%3A%20Screen-OCR%2C%20einfach%20mal%20Texte%20vom%20Monitor%20aus%20Bildschirmausschnitten%20und%20Grafiken%20in%20die%20Zwischenablage%20kopieren%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F05%2F15%2Ftool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2010/06/01/tool-screen-ocr-version-2-0-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/" title="Tool: Screen-OCR Version 2.0, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren (Di 01. Jun 2010)">Tool: Screen-OCR Version 2.0, einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage kopieren</a> (6)</li>
	<li><a href="http://blog.m-ri.de/index.php/2010/04/12/mal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend/" title="Mal einen ganz anderen Blick auf seinen Code werfen mit CppDepend (Mo 12. Apr 2010)">Mal einen ganz anderen Blick auf seinen Code werfen mit CppDepend</a> (8)</li>
	<li><a href="http://blog.m-ri.de/index.php/2007/05/31/_unicode-versus-unicode-und-so-manches-eigentuemliche/" title="_UNICODE versus UNICODE und so manches Eigentümliche (Do 31. Mai 2007)">_UNICODE versus UNICODE und so manches Eigentümliche</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/05/15/tool-screen-ocr-einfach-mal-texte-vom-monitor-aus-bildschirmausschnitten-und-grafiken-in-die-zwischenablage-kopieren/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Achtung: Die festen Mapping Modes des GDI basieren nicht auf LOGPIXELSX und LOGPIXELSY!</title>
		<link>http://blog.m-ri.de/index.php/2010/04/20/achtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy/</link>
		<comments>http://blog.m-ri.de/index.php/2010/04/20/achtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 19:10:07 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Windows API]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[WinAPI]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=608</guid>
		<description><![CDATA[<p>Jeder der mit Fontgrößen und Darstellungsgrößen herumspielt, oder wer selber in Fenstern zeichnet kennt <em>LOGPIXELSX</em> und <em>LOGPIXELSY</em>, die durch <a href="http://msdn.microsoft.com/de-de/library/0h8e85be(VS.80).aspx">GetDevCaps</a> geliefert werden. Diese Werte dienen auch <em>CFont::CreatePointFont </em>und anderen Funktionen bei der Umrechnung von &#8220;realen&#8221; Maßen auf die Devicepoints, die man dann benötigt. Alles kein Hexenwerk und überall im Netz beschrieben.<br />
Auf diesem Weg kann man mit etwas <em>MulDiv</em> Arithmetik schnell umrechnen wie viele Punkte man benötigt um etwas von 10mm Größe auf einem Device darzustellen.</p>
<p>Der nachfolgende Code wandelt Einheiten von 1mm entsprechend der Auflösung eines Devices in Pixel um.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">pDC<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>SetMapMode<span style="color: #008000;">&#40;</span>MM_TEXT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">// Convert mm to with LOGPIXELSX</span>
CSize sizeLogPixel<span style="color: #008000;">&#40;</span>pDC<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>GetDeviceCaps<span style="color: #008000;">&#40;</span>LOGPIXELSX<span style="color: #008000;">&#41;</span>,
            pDC<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>GetDeviceCaps<span style="color: #008000;">&#40;</span>LOGPIXELSY<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
rect.<span style="color: #007788;">top</span> <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">MulDiv</span><span style="color: #008000;">&#40;</span>rect.<span style="color: #007788;">top</span>,sizeLogPixel.<span style="color: #007788;">cy</span><span style="color: #000040;">*</span><span style="color: #0000dd;">10</span>,<span style="color: #0000dd;">254</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
rect.<span style="color: #007788;">bottom</span> <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">MulDiv</span><span style="color: #008000;">&#40;</span>rect.<span style="color: #007788;">bottom</span>,sizeLogPixel.<span style="color: #007788;">cy</span><span style="color: #000040;">*</span><span style="color: #0000dd;">10</span>,<span style="color: #0000dd;">254</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
rect.<span style="color: #007788;">left</span> <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">MulDiv</span><span style="color: #008000;">&#40;</span>rect.<span style="color: #007788;">left</span>,sizeLogPixel.<span style="color: #007788;">cx</span><span style="color: #000040;">*</span><span style="color: #0000dd;">10</span>,<span style="color: #0000dd;">254</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
rect.<span style="color: #007788;">right</span> <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">MulDiv</span><span style="color: #008000;">&#40;</span>rect.<span style="color: #007788;">right</span>,sizeLogPixel.<span style="color: #007788;">cx</span><span style="color: #000040;">*</span><span style="color: #0000dd;">10</span>,<span style="color: #0000dd;">254</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Die Auflösung von 0,1mm je Einheit ist die Metrik des Mappingmodes <em>MM_LOMETRIC</em>. Man sollte also meinen, dass die Verwendung von <em>MM_LOMETRIC</em> mit einem Faktor 10, der obigen Umrechnung gleich kommt.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">pDC<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>SetMapMode<span style="color: #008000;">&#40;</span>MM_LOMETRIC<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">// Convert mm to 0.1mm</span>
rect.<span style="color: #007788;">top</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
rect.<span style="color: #007788;">bottom</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
rect.<span style="color: #007788;">left</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
rect.<span style="color: #007788;">right</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span></pre></div></div>

<p>Probiert man dies aus, so stellt man überrascht fest, dass die Größen nicht übereinstimmen.<br />
Der Dokumentation nach müsste man es aber denken.</p>
<p>Mit einem bisschen experimentieren bin ich letztlich auf den Grund gekommen.<br />
Keiner der Mappingmodes <em>MM_LOENGLISH, MM_HIENGLICH, MM_LOMETRIC </em>oder <em>MM_HIMETRIC </em>verwendet <em>LOGPIXELSX</em> oder <em>LOGPIXELSY</em>. Diese Mappingmodes verwenden die Werte <em>HORZRES</em> und <em>VERTRES</em> in dem Viewport-Extent und die Werte <em>HORZSIZE</em> und <em>VERTSIZE</em> im Window-Extent.</p>
<p>D.h. der Viewport-Extent bekommt die Größe des Bildschirmes in Pixeln zugewiesen und das Window-Extent bekommt die Größe des Devices in mm zugewiesen. Nun ist diese Größe (<em>HORZSIZE/VERTSIZE</em>) bei Bildschirmen nicht die reale Größe sondern eine Größe, die der Hersteller festlegt. (Anmerkung: Bei Druckern stimmt dieser Wert)</p>
<p>Nun wäre noch alles OK, wenn sich aus den Werten von <em>VERT/HORZSIZE</em> und <em>VERT/HORZRES</em> nun der Quotient <em>LOGPIXELSX/SY</em> ermitteln ließe. Das ist aber nicht der Fall! <em>LOGPIXELSX/SY </em>sind Skalierungswerte die bei Bildschirmen unabhängig von der realen Auflösung angegeben werden und die z.B. dazu Dienen Schriftgrößen grundsätzlich größer oder kleiner anzeigen zu lassen (siehe auch <em>High DPI Mode</em>).</p>
<p>Die Konsequenz daraus ist, dass die Mappingmodes ein relativ exotisches Einzelleben führen, weil die meisten Entwickler eben korrekterweise auf <em>LOGPIXELSX/SY</em> zurückgreifen. Noch mal sei hier bemerkt, dass für Drucker DCs hier in mir bekannten Fällen kein Unterschied existiert und auch das ist gut so.</p>
<p>Die Lösung die sich anbietet, ist nicht weiter schwierig und sie auch der Grund warum ich erst jetzt auf diesen gesamten Umstand gestoßen bin. Ich habe niemals die <em>MM_LO…/MM_HI… </em>Mappingmodes verwendet. Entweder pur <em>MM_TEXT </em>und wenn ich was anderes benötigt habe einfach <em>MM_ANISOTROPIC</em>, und in der entsprechenden Skalierung habe ich dann meistens die Werte aus <em>LOGPIXELSX/SY</em> verwendet. Also musste es passen.</p>
<p><em>MM_ANISOTROPIC </em>ist sowieso der Mappingmode der Wahl, wenn es um skalierbare Darstellungen und Zoomfaktoren geht, aber dazu vielleicht mehr in einem Artikel demnächst.</p>
<p>Ich habe ein kleines MFC-Programm gebaut (<a href="http://blog.m-ri.de/wp-content/uploads/2010/04/MappingModeTest.zip">MappingModeTest</a>), dass diese Konflikte aufzeigt. Ich zeichne dort ein Rechteck auf den Koordinaten 20mm,10mm mit der Größe 60mm,40mm. Damit die verschiedenen Rechtecke alle sichtbar werden verwende ich immer einen Versatz von 1mm und zeichne die Rechtecke in unterschiedlichen Farben.<br />
In der Debugausgabe kann man wunderschön sehen wie Extents mit den Werten aus <em>GetDeviceCaps</em> zusammenhängen.</p>
<p>Dieser Artikel basiert auf zwei Anfragen in microsoft.public.de.vc die dieses unterschiedliche Verhalten aufzeigten und diskutieren:<br />
<a href="http://groups.google.de/group/microsoft.public.de.vc/browse_thread/thread/23467a5e95051291/7c66c01b8295eaab">http://groups.google.de/group/microsoft.public.de.vc/browse_thread/thread/23467a5e95051291/7c66c01b8295eaab</a><br />
<a href="http://groups.google.de/group/microsoft.public.de.vc/browse_thread/thread/201719d23a411256/17b41c09844bf105">http://groups.google.de/group/microsoft.public.de.vc/browse_thread/thread/201719d23a411256/17b41c09844bf105</a></p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F20%2Fachtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy%2F&amp;title=Achtung%3A%20Die%20festen%20Mapping%20Modes%20des%20GDI%20basieren%20nicht%20auf%20LOGPIXELSX%20und%20LOGPIXELSY%21&amp;annotation=Jeder%20der%20mit%20Fontgr%C3%B6%C3%9Fen%20und%20Darstellungsgr%C3%B6%C3%9Fen%20herumspielt%2C%20oder%20wer%20selber%20in%20Fenstern%20zeichnet%20kennt%20LOGPIXELSX%20und%20LOGPIXELSY%2C%20die%20durch%20GetDevCaps%20geliefert%20werden.%20Diese%20Werte%20dienen%20auch%20CFont%3A%3ACreatePointFont%20und%20anderen%20Funktionen%20bei%20de" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F20%2Fachtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy%2F&amp;title=Achtung%3A%20Die%20festen%20Mapping%20Modes%20des%20GDI%20basieren%20nicht%20auf%20LOGPIXELSX%20und%20LOGPIXELSY%21&amp;notes=Jeder%20der%20mit%20Fontgr%C3%B6%C3%9Fen%20und%20Darstellungsgr%C3%B6%C3%9Fen%20herumspielt%2C%20oder%20wer%20selber%20in%20Fenstern%20zeichnet%20kennt%20LOGPIXELSX%20und%20LOGPIXELSY%2C%20die%20durch%20GetDevCaps%20geliefert%20werden.%20Diese%20Werte%20dienen%20auch%20CFont%3A%3ACreatePointFont%20und%20anderen%20Funktionen%20bei%20de" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F20%2Fachtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy%2F&amp;bm_description=Achtung%3A%20Die%20festen%20Mapping%20Modes%20des%20GDI%20basieren%20nicht%20auf%20LOGPIXELSX%20und%20LOGPIXELSY%21&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F20%2Fachtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F20%2Fachtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy%2F&amp;t=Achtung%3A%20Die%20festen%20Mapping%20Modes%20des%20GDI%20basieren%20nicht%20auf%20LOGPIXELSX%20und%20LOGPIXELSY%21" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F20%2Fachtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy%2F&amp;title=Achtung%3A%20Die%20festen%20Mapping%20Modes%20des%20GDI%20basieren%20nicht%20auf%20LOGPIXELSX%20und%20LOGPIXELSY%21" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Achtung%3A%20Die%20festen%20Mapping%20Modes%20des%20GDI%20basieren%20nicht%20auf%20LOGPIXELSX%20und%20LOGPIXELSY%21%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F20%2Fachtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2007/05/31/_unicode-versus-unicode-und-so-manches-eigentuemliche/" title="_UNICODE versus UNICODE und so manches Eigentümliche (Do 31. Mai 2007)">_UNICODE versus UNICODE und so manches Eigentümliche</a> (0)</li>
	<li><a href="http://blog.m-ri.de/index.php/2008/11/09/winmain-mit-argc-und-argv/" title="WinMain mit argc und argv (So 09. Nov 2008)">WinMain mit argc und argv</a> (2)</li>
	<li><a href="http://blog.m-ri.de/index.php/2010/06/23/wie-man-den-namen-einer-registerwindowmessage-bekommt/" title="Wie man den Namen einer RegisterWindowMessage bekommt (Mi 23. Jun 2010)">Wie man den Namen einer RegisterWindowMessage bekommt</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/04/20/achtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mal einen ganz anderen Blick auf seinen Code werfen mit CppDepend</title>
		<link>http://blog.m-ri.de/index.php/2010/04/12/mal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend/</link>
		<comments>http://blog.m-ri.de/index.php/2010/04/12/mal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 19:16:54 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Code Analyse]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=605</guid>
		<description><![CDATA[<p>Vor einiger Zeit habe ich versucht mit einem anderen Werkzeug mal den eigenen Code zu analysieren.<br />
Ich habe <strong><em>CppDepend</em> </strong>entdeckt.  <a href="http://www.cppdepend.com/">http://www.cppdepend.com/</a></p>
<p>Gerade bei großen Projekten kann man schnell den Überblick verlieren und es ist schwierig die abhängigen Klassen und Objekte in Ihren Verbindungen zu sehen oder mögliche Designprobleme nachträglich festzustellen. Oder den richtigen Ansatzpunkt für Reviews zu finden. Man hat manchmal das Gefühl, dass etwas nicht stimmt, aber man weiß oft nicht genau was.</p>
<p><em>CppDepend</em> kann helfen schlecht konstruierte Klassen zu finden, Fehler in den Namenskonfentionen oder der Dokumentation und gezielter auf notwendige Reviews hinzuweisen.<br />
Durch eine eigene <a href="http://www.cppdepend.com/Features.aspx">Abfragesprache</a> ist es extrem einfach große unübersichtliche Funktionen zu finden. Klassen mit zyklischen Abhängigkeiten und extreme Vererbungstiefen aufzuspüren. Besonders einfach wird es zum Beispiel auch Namenskonventionen zu überprüfen. Die eigene Codebase wird durch die Abfragesprache analysierbar.</p>
<p>Ich empfand die graphischen Darstellungen der eigenen Codebasis und die Ergebnisse der Abfragen in diesen Grafiken als extrem anschaulich und nützlich. Weitaus mehr als manche tabellarische Analyse meines Codes.</p>
<p>Einen guten Einblick was hier möglich ist liefern die Case-Studies. Wie zum Beispiel die Analyse der MFC 8.0 (VC-2005) <a href="http://www.cppdepend.com/MFC.aspx">http://www.cppdepend.com/MFC.aspx</a>. Man kann die MFC sicherlich nicht als Glanzstück des OOP bezeichnen, umso mehr ist es mal interessant mit diesem Tool einen Blick auf die MFC zu werfen. Wem das nicht anschaulich genug ist kann sollte sich auch die anderen <a href="http://www.cppdepend.com/CasesStudies.aspx">Case-Studies </a>mal ansehen. Oder noch besser die Software 2 Wochen testen.</p>
<p>Ein gutes Tool, aber leider nicht ganz billig, aber in jedem Fall mal einen Blick wert.</p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F12%2Fmal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend%2F&amp;title=Mal%20einen%20ganz%20anderen%20Blick%20auf%20seinen%20Code%20werfen%20mit%20CppDepend&amp;annotation=Vor%20einiger%20Zeit%20habe%20ich%20versucht%20mit%20einem%20anderen%20Werkzeug%20mal%20den%20eigenen%20Code%20zu%20analysieren.%0D%0AIch%20habe%20CppDepend%20entdeckt.%C2%A0%20http%3A%2F%2Fwww.cppdepend.com%2F%0D%0A%0D%0AGerade%20bei%20gro%C3%9Fen%20Projekten%20kann%20man%20schnell%20den%20%C3%9Cberblick%20verlieren%20und%20es%20ist%20schwieri" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F12%2Fmal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend%2F&amp;title=Mal%20einen%20ganz%20anderen%20Blick%20auf%20seinen%20Code%20werfen%20mit%20CppDepend&amp;notes=Vor%20einiger%20Zeit%20habe%20ich%20versucht%20mit%20einem%20anderen%20Werkzeug%20mal%20den%20eigenen%20Code%20zu%20analysieren.%0D%0AIch%20habe%20CppDepend%20entdeckt.%C2%A0%20http%3A%2F%2Fwww.cppdepend.com%2F%0D%0A%0D%0AGerade%20bei%20gro%C3%9Fen%20Projekten%20kann%20man%20schnell%20den%20%C3%9Cberblick%20verlieren%20und%20es%20ist%20schwieri" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F12%2Fmal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend%2F&amp;bm_description=Mal%20einen%20ganz%20anderen%20Blick%20auf%20seinen%20Code%20werfen%20mit%20CppDepend&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F12%2Fmal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F12%2Fmal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend%2F&amp;t=Mal%20einen%20ganz%20anderen%20Blick%20auf%20seinen%20Code%20werfen%20mit%20CppDepend" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F12%2Fmal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend%2F&amp;title=Mal%20einen%20ganz%20anderen%20Blick%20auf%20seinen%20Code%20werfen%20mit%20CppDepend" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Mal%20einen%20ganz%20anderen%20Blick%20auf%20seinen%20Code%20werfen%20mit%20CppDepend%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F04%2F12%2Fmal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2008/08/28/was-tun-gegen-fehler-in-statischen-tabellen-bzw-variablen-deklarationen/" title="Was tun gegen Fehler in statischen Tabellen bzw. Variablen Deklarationen (Do 28. Aug 2008)">Was tun gegen Fehler in statischen Tabellen bzw. Variablen Deklarationen</a> (4)</li>
	<li><a href="http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/" title="VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version (So 09. Aug 2009)">VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version</a> (9)</li>
	<li><a href="http://blog.m-ri.de/index.php/2008/11/27/vs-tipps-tricks-heap-bugs-finden-teil-4/" title="VS Tipps &#038; Tricks: Heap Bugs finden (Teil 4) (Do 27. Nov 2008)">VS Tipps &#038; Tricks: Heap Bugs finden (Teil 4)</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/04/12/mal-einen-ganz-anderen-blick-auf-seinen-code-werfen-mit-cppdepend/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CDialog::SetDefID und DM_SETDEFID, des Tastaturfreunds Liebling</title>
		<link>http://blog.m-ri.de/index.php/2010/01/04/cdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling/</link>
		<comments>http://blog.m-ri.de/index.php/2010/01/04/cdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 16:43:32 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Windows API]]></category>
		<category><![CDATA[Dialoge]]></category>
		<category><![CDATA[Eingabetaste]]></category>
		<category><![CDATA[Tastatur]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[WinAPI]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=519</guid>
		<description><![CDATA[<p>Die Frage um die Eingabe-Taste in Dialogen und wie man diese &#8220;missbraucht&#8221; (sage ich mal provokant) ist eine regelmäßige Frage in allen Foren.</p>
<p>Die Intention ist oft klar. Man möchte mit der Eingabetaste eine bestimmte Aktion verbinden, die evtl. sehr oft ausgeführt werden soll und nicht den Dialog schließen.<br />
Die üblichen Wege sind schon mehrfach diskutiert worden und auch in meinem Blog finden sich dazu ein <a href="http://blog.m-ri.de/index.php/2008/09/21/die-return-taste-in-dialogen-eine-unendliche-geschichte/">Artikel</a> .</p>
<p>Zu kurz kommt bei dieser Diskussion die Funktion <em><a href="http://msdn.microsoft.com/en-us/library/7sd15kw3(VS.80).aspx">CDialog::SetDefID</a></em> bzw. <em><a href="http://msdn.microsoft.com/en-us/library/ms645413(VS.85).aspx">DM_SETDEFID</a> </em>Nachricht.<br />
Was macht diese Funktion/Nachricht?<br />
Sie definieren die Button-ID, die als Default-Aktion in einem Dialog ausgelöst werden soll und das ist nichts anderes als die Aktion die geschehen, soll wenn die Eingabe-Taste gedrückt wird.<br />
Viele Entwickler definieren einfach <em>OnOK</em> um. Aber das eigentlich tolle ist mit <em>SetDefID</em> den Button in Abhängigkeit der Daten umzusetzen und das hat auch einen visuellen Effekt für den Nutzer.</p>
<p>Mal ein Beispiel:<br />
Wir haben einen Dialog mit zwei List Views. Links Elemente die zur Auswahl stehen, rechts die Elemente in der Reihenfolge, die der Benutzer ausgewählt hat.<br />
Der Mausschubser wird einfach die Einträge auf der linken oder rechten Seite doppelklicken und damit auswählen oder entfernen. Entsprechende Buttons für Hinzufügen und Entfernen wird es auch geben. Man kann also auch links oder rechts markieren und dann den Hinzufügen oder Entfernen Schalter nutzen.</p>
<p>Dem Tastaturnutzer können wir helfen indem wir intelligent <em>CDialog::SetDefID / DM_SETDEFID</em> verwenden. Die Vorgehensweise ist einfach.</p>
<ul>
<li>Wir richten uns nur danach in welchem <em>List View </em>wir uns befinden, d.h. befinden wir uns im linken <em>List View </em>steuern wir den <em>Hinzufügen </em>Schalter, und im rechten <em>List View </em>steuern wir den <em>Entfernen </em>Schalter.</li>
<li>Wird also im linken List View ein Item ausgewählt, setzen wir mit <em>CDialog::SetDefID / DM_SETDEFID </em>die ID des <em>Hinzufügen </em>Schalters.</li>
<li>In dem Moment wird der <em>Hinzufügen </em>Schalter zum <em>Default</em>-Button. Der Nutzer kann nun die Eingabe-Taste drücken und die Items werden in die rechte Box verschoben.</li>
<li>Links liegt jetzt nun noch der Fokus, aber es sind keine Items mehr markiert. D.h. wir setzen nun den Default Button zurück auf <em>IDOK</em>.</li>
<li>Jetzt kann der Nutzer erneut ein Item markieren. Der <em>Default</em>-Button wird wieder der <em>Hinzufügen/Entfernen</em> Schalter und die Eingabetaste macht was der Nutzer gerne hätte.</li>
<li>Ist kein Item mehr markiert schließt die Eingabetaste wieder über <em>IDOK </em>den Dialog.</li>
</ul>
<p>Ohne Maus kann man also mit den Pfeiltasten, der Leertaste (evtl. <em>Strg</em>-Taste) und der Eingabetaste diesen Dialog bedienen. Und das sogar intuitiv, denn der entsprechende Default Button wird ja in der UI schön umrandet und hervorgehoben.<br />
Das freut jeden Tastaturfreund. Und man muss gar nichts groß machen mit der Behandlung Eingabetaste.</p>
<p>Damit das Ganze nicht so abstrakt ist, habe ich <a href="http://blog.m-ri.de/wp-content/uploads/2009/12/TestSetDefDlgID.zip">ein kleines Sample</a> gebaut, dass diese Anwendung zeigt. Es hat keine Implementierung für <em>Drag&amp;Drop </em>aber es macht deutlich, wie man dem Tastaturnutzer entgegen kommen kann indem man die Controls geschickt aktiviert.</p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F01%2F04%2Fcdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling%2F&amp;title=CDialog%3A%3ASetDefID%20und%20DM_SETDEFID%2C%20des%20Tastaturfreunds%20Liebling&amp;annotation=Die%20Frage%20um%20die%20Eingabe-Taste%20in%20Dialogen%20und%20wie%20man%20diese%20%22missbraucht%22%20%28sage%20ich%20mal%20provokant%29%20ist%20eine%20regelm%C3%A4%C3%9Fige%20Frage%20in%20allen%20Foren.%0D%0A%0D%0ADie%20Intention%20ist%20oft%20klar.%20Man%20m%C3%B6chte%20mit%20der%20Eingabetaste%20eine%20bestimmte%20Aktion%20verbinden%2C%20die%20evtl" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F01%2F04%2Fcdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling%2F&amp;title=CDialog%3A%3ASetDefID%20und%20DM_SETDEFID%2C%20des%20Tastaturfreunds%20Liebling&amp;notes=Die%20Frage%20um%20die%20Eingabe-Taste%20in%20Dialogen%20und%20wie%20man%20diese%20%22missbraucht%22%20%28sage%20ich%20mal%20provokant%29%20ist%20eine%20regelm%C3%A4%C3%9Fige%20Frage%20in%20allen%20Foren.%0D%0A%0D%0ADie%20Intention%20ist%20oft%20klar.%20Man%20m%C3%B6chte%20mit%20der%20Eingabetaste%20eine%20bestimmte%20Aktion%20verbinden%2C%20die%20evtl" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F01%2F04%2Fcdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling%2F&amp;bm_description=CDialog%3A%3ASetDefID%20und%20DM_SETDEFID%2C%20des%20Tastaturfreunds%20Liebling&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F01%2F04%2Fcdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F01%2F04%2Fcdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling%2F&amp;t=CDialog%3A%3ASetDefID%20und%20DM_SETDEFID%2C%20des%20Tastaturfreunds%20Liebling" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F01%2F04%2Fcdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling%2F&amp;title=CDialog%3A%3ASetDefID%20und%20DM_SETDEFID%2C%20des%20Tastaturfreunds%20Liebling" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=CDialog%3A%3ASetDefID%20und%20DM_SETDEFID%2C%20des%20Tastaturfreunds%20Liebling%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2010%2F01%2F04%2Fcdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2008/12/07/aus-zwei-mach-eins-wie-man-zwei-cursor-kombinieren-kann/" title="Aus zwei mach eins: Wie man zwei Cursor kombinieren kann (So 07. Dez 2008)">Aus zwei mach eins: Wie man zwei Cursor kombinieren kann</a> (5)</li>
	<li><a href="http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/" title="VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version (So 09. Aug 2009)">VS-Tipps&#038;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version</a> (9)</li>
	<li><a href="http://blog.m-ri.de/index.php/2008/11/04/vs-tipps-tricks-heap-bugs-finden-teil-3/" title="VS Tipps &#038; Tricks: Heap Bugs finden (Teil 3) (Di 04. Nov 2008)">VS Tipps &#038; Tricks: Heap Bugs finden (Teil 3)</a> (0)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2010/01/04/cdialogsetdefid-und-dm_setdefid-des-tastaturfreunds-liebling/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>VS-Tipps &amp; Tricks: Springe zur nächsten Klammer funktioniert auch für #if, #elif, #else und #endif</title>
		<link>http://blog.m-ri.de/index.php/2009/12/21/vs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif/</link>
		<comments>http://blog.m-ri.de/index.php/2009/12/21/vs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 19:05:08 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[VS-Tipps&Tricks]]></category>
		<category><![CDATA[Windows API]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[VS-2003]]></category>
		<category><![CDATA[VS-2005]]></category>
		<category><![CDATA[VS-2008]]></category>
		<category><![CDATA[VS-2010]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=520</guid>
		<description><![CDATA[<p>Wer sich schon durch die Windows Header gekämpft hat um herauszufinden warum welche Definition einer Struktur oder Funktion in irgend einer Windows Version so oder gar nicht vorhanden ist, der weiß auch wie einem <em>#if</em>,<em> #elif</em>,<em> #else </em>und <em>#endif </em>das Leben schwer machen können, was die Orientierung betrifft.</p>
<p>Netterweise hilft einem eine Funktion, die man nur von Blöcken und verschachtelten Funktionen her kennt <em><strong>Strg+´</strong></em> (<em>Edit.GotoBrace</em>). Wichtig! Man darf nicht auf der Variable oder Bedingung stehen, sondern muss auf dem Schlüsselwort stehen.</p>
<p>Wenn man auf einer Präprozessor Direktive kann man mit den Tasten die einem zur passenden Klammer bringt zur nachfolgenden Direktive. Und mit dem Festhalten der Umschalttaste kann man den entsprechenden Block auch markieren.</p>
<hr /><small>Copyright &copy; 2008 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>
<div class="sociable">

<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="javascript:AddToFavorites();" title="Add to favorites"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/addtofavorites.png" title="Add to favorites" alt="Add to favorites" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2009%2F12%2F21%2Fvs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif%2F&amp;title=VS-Tipps%20%26%20Tricks%3A%20Springe%20zur%20n%C3%A4chsten%20Klammer%20funktioniert%20auch%20f%C3%BCr%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif&amp;annotation=Wer%20sich%20schon%20durch%20die%20Windows%20Header%20gek%C3%A4mpft%20hat%20um%20herauszufinden%20warum%20welche%20Definition%20einer%20Struktur%20oder%20Funktion%20in%20irgend%20einer%20Windows%20Version%20so%20oder%20gar%20nicht%20vorhanden%20ist%2C%20der%20wei%C3%9F%20auch%20wie%20einem%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif%20das%20Le" title="Google Bookmarks"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2009%2F12%2F21%2Fvs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif%2F&amp;title=VS-Tipps%20%26%20Tricks%3A%20Springe%20zur%20n%C3%A4chsten%20Klammer%20funktioniert%20auch%20f%C3%BCr%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif&amp;notes=Wer%20sich%20schon%20durch%20die%20Windows%20Header%20gek%C3%A4mpft%20hat%20um%20herauszufinden%20warum%20welche%20Definition%20einer%20Struktur%20oder%20Funktion%20in%20irgend%20einer%20Windows%20Version%20so%20oder%20gar%20nicht%20vorhanden%20ist%2C%20der%20wei%C3%9F%20auch%20wie%20einem%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif%20das%20Le" title="del.icio.us"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a></li>
	<li><a rel="nofollow"  href="http://www.mister-wong.de/addurl/?bm_url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2009%2F12%2F21%2Fvs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif%2F&amp;bm_description=VS-Tipps%20%26%20Tricks%3A%20Springe%20zur%20n%C3%A4chsten%20Klammer%20funktioniert%20auch%20f%C3%BCr%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif&amp;plugin=soc" title="MisterWong.DE"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/misterwong.png" title="MisterWong.DE" alt="MisterWong.DE" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2009%2F12%2F21%2Fvs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif%2F" title="Technorati"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2009%2F12%2F21%2Fvs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif%2F&amp;t=VS-Tipps%20%26%20Tricks%3A%20Springe%20zur%20n%C3%A4chsten%20Klammer%20funktioniert%20auch%20f%C3%BCr%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif" title="Facebook"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2009%2F12%2F21%2Fvs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif%2F&amp;title=VS-Tipps%20%26%20Tricks%3A%20Springe%20zur%20n%C3%A4chsten%20Klammer%20funktioniert%20auch%20f%C3%BCr%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif" title="Live"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=VS-Tipps%20%26%20Tricks%3A%20Springe%20zur%20n%C3%A4chsten%20Klammer%20funktioniert%20auch%20f%C3%BCr%20%23if%2C%20%23elif%2C%20%23else%20und%20%23endif%20-%20http%3A%2F%2Fblog.m-ri.de%2Findex.php%2F2009%2F12%2F21%2Fvs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif%2F" title="Twitter"><img src="http://blog.m-ri.de/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a></li>
</ul>
</div>

	<h4>Themenverwandte Beiträge:</h4>
	<ul class="st-related-posts">
	<li><a href="http://blog.m-ri.de/index.php/2009/12/03/afxmessagebox-versus-cwndmessagebox/" title="AfxMessageBox versus CWnd::MessageBox (Do 03. Dez 2009)">AfxMessageBox versus CWnd::MessageBox</a> (4)</li>
	<li><a href="http://blog.m-ri.de/index.php/2010/05/20/vs-tipps-tricks-kommentare-intelligent-und-einfach-formatieren/" title="VS-Tipps &#038; Tricks: Kommentare intelligent und einfach umbrechen (Do 20. Mai 2010)">VS-Tipps &#038; Tricks: Kommentare intelligent und einfach umbrechen</a> (2)</li>
	<li><a href="http://blog.m-ri.de/index.php/2009/09/23/vs-tipps-tricks-format-specifier-in-den-debugger-fenstern/" title="VS-Tipps &#038; Tricks: Format Specifier in den Debugger Fenstern (Mi 23. Sep 2009)">VS-Tipps &#038; Tricks: Format Specifier in den Debugger Fenstern</a> (2)</li>
</ul>

]]></description>
		<wfw:commentRss>http://blog.m-ri.de/index.php/2009/12/21/vs-tipps-tricks-springe-zur-naechsten-klammer-funktioniert-auch-fuer-if-elif-else-und-endif/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
