<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[HDC global... GetDC überschreibt alles?]]></title><description><![CDATA[<p>Hi all,<br />
ich bin gerade Dabei sowas wie Paint zu machen (lediglich mit striche ziehen) und wollte jetzt halt noch Weiß mit rein bringen.</p>
<pre><code class="language-cpp">//Schwarzen kasten malen(zur Farbwahl)
for( i = blackColor.top; i &lt;= blackColor.bottom; i++ )
{
	MoveToEx( myHdc, blackColor.left, i, NULL );
	LineTo( myHdc, blackColor.right, i );
}
//Weißen Stift wählen
SelectObject( myHdc, whitePen );
//Weißen kasten malen(zur Farbwahl)
for( i = whiteColor.top; i &lt;= whiteColor.bottom; i++ )
{
	MoveToEx( myHdc, whiteColor.left, i, NULL );
	LineTo( myHdc, whiteColor.right, i );
}
</code></pre>
<p>Kein problem ~(whiteColor und blackColor sind globale RECTs)~ ABER ^(so wie immer gibt es eins)^:<br />
ich habe mir gedacht, wenn ich HDC global mache und dann nach</p>
<pre><code class="language-cpp">//Globale Vars
HPEN whitePen,
     blackPen;
[...]
whitePen = CreatePen( PS_SOLID, 1, RGB( 255, 255, 255 ) );
blackPen = CreatePen( PS_SOLID, 1, RGB( 0, 0, 0 ) );
</code></pre>
<p>einfach irgendwo sage:</p>
<pre><code class="language-cpp">case WM_MOUSEMOVE:
[...]
    //ist die Maus in dem bereich für FARBWAHL-&gt;SCHWARZ
    if( inRect( mouseKoord, blackColor ) )
    {
        R = 255;//für SetPixel
        G = 255;
        B = 255;
        SelectObject( myHdc, blackPen );
    }
[...]
</code></pre>
<p>aber das geht nicht.<br />
Dann dachte ich &quot;oko öffne vorher noch&quot;</p>
<pre><code class="language-cpp">case WM_MOUSEMOVE:
[...]
    //ist die Maus in dem bereich für FARBWAHL-&gt;SCHWARZ
    if( inRect( mouseKoord, blackColor ) )
    {
        myHdc = GetDC( myWnd );
            R = 255;//für SetPixel
            G = 255;
            B = 255;
            SelectObject( myHdc, blackPen );
        ReleaseDC( myWnd, myHdc );
    }
[...]
</code></pre>
<p>myWnd ist glob.HWND und myHdc ist glob.HDC <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Global is nich so toll ich weiß aber andererseits kann ich ja -in diesem zusammenhang- nicht ohne arbeiten.</p>
<p>Allerdings (wenn ich male) malt er trotzdem schwarz... Warum?</p>
<p>~(Quellcode: 375 Zeilen; wollt ich nich alles Posten, wenn mehr benötigt wird, bitte melden)~</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204009/hdc-global-getdc-überschreibt-alles</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 22:10:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204009.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jan 2008 09:51:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 09:51:19 GMT]]></title><description><![CDATA[<p>Hi all,<br />
ich bin gerade Dabei sowas wie Paint zu machen (lediglich mit striche ziehen) und wollte jetzt halt noch Weiß mit rein bringen.</p>
<pre><code class="language-cpp">//Schwarzen kasten malen(zur Farbwahl)
for( i = blackColor.top; i &lt;= blackColor.bottom; i++ )
{
	MoveToEx( myHdc, blackColor.left, i, NULL );
	LineTo( myHdc, blackColor.right, i );
}
//Weißen Stift wählen
SelectObject( myHdc, whitePen );
//Weißen kasten malen(zur Farbwahl)
for( i = whiteColor.top; i &lt;= whiteColor.bottom; i++ )
{
	MoveToEx( myHdc, whiteColor.left, i, NULL );
	LineTo( myHdc, whiteColor.right, i );
}
</code></pre>
<p>Kein problem ~(whiteColor und blackColor sind globale RECTs)~ ABER ^(so wie immer gibt es eins)^:<br />
ich habe mir gedacht, wenn ich HDC global mache und dann nach</p>
<pre><code class="language-cpp">//Globale Vars
HPEN whitePen,
     blackPen;
[...]
whitePen = CreatePen( PS_SOLID, 1, RGB( 255, 255, 255 ) );
blackPen = CreatePen( PS_SOLID, 1, RGB( 0, 0, 0 ) );
</code></pre>
<p>einfach irgendwo sage:</p>
<pre><code class="language-cpp">case WM_MOUSEMOVE:
[...]
    //ist die Maus in dem bereich für FARBWAHL-&gt;SCHWARZ
    if( inRect( mouseKoord, blackColor ) )
    {
        R = 255;//für SetPixel
        G = 255;
        B = 255;
        SelectObject( myHdc, blackPen );
    }
[...]
</code></pre>
<p>aber das geht nicht.<br />
Dann dachte ich &quot;oko öffne vorher noch&quot;</p>
<pre><code class="language-cpp">case WM_MOUSEMOVE:
[...]
    //ist die Maus in dem bereich für FARBWAHL-&gt;SCHWARZ
    if( inRect( mouseKoord, blackColor ) )
    {
        myHdc = GetDC( myWnd );
            R = 255;//für SetPixel
            G = 255;
            B = 255;
            SelectObject( myHdc, blackPen );
        ReleaseDC( myWnd, myHdc );
    }
[...]
</code></pre>
<p>myWnd ist glob.HWND und myHdc ist glob.HDC <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Global is nich so toll ich weiß aber andererseits kann ich ja -in diesem zusammenhang- nicht ohne arbeiten.</p>
<p>Allerdings (wenn ich male) malt er trotzdem schwarz... Warum?</p>
<p>~(Quellcode: 375 Zeilen; wollt ich nich alles Posten, wenn mehr benötigt wird, bitte melden)~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445517</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Tue, 29 Jan 2008 09:51:19 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 10:26:40 GMT]]></title><description><![CDATA[<p>Ich habe mir mit einem HPEN* selber geholfen...</p>
<p>Dürfte immer noch OK sein...</p>
<p>Wenn jemand an dem Code interessiert ist, postet einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445529</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Tue, 29 Jan 2008 10:26:40 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 12:07:37 GMT]]></title><description><![CDATA[<p>1. Es macht keinen Sinn eine globale myHdc Vaiable zu haben. Mach diese loka. ALles andere kann nur zu üblen Seiteneffekten führen und Nutzung von Informationen, die schon längst wieder ungültig sind.<br />
2. Der folgende Code ist unsinnig</p>
<pre><code class="language-cpp">myHdc = GetDC( myWnd );
            R = 255;//für SetPixel
            G = 255;
            B = 255;
            SelectObject( myHdc, blackPen );
        ReleaseDC( myWnd, myHdc );
</code></pre>
<p>Was nützt es ein Objekt in einen DC zu selektieren der wieder ferigegeben wird. Zudem dies Leaks verursachen kann weil Du das ursprüngliche Objekt nicht wieder selektierst.<br />
3. Man sollte nur in WM_PAINT zeichnen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445583</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 29 Jan 2008 12:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 12:34:43 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>1. Es macht keinen Sinn eine globale myHdc Vaiable zu haben. Mach diese loka. ALles andere kann nur zu üblen Seiteneffekten führen und Nutzung von Informationen, die schon längst wieder ungültig sind.<br />
2. Der folgende Code ist unsinnig</p>
<pre><code class="language-cpp">myHdc = GetDC( myWnd );
            R = 255;//für SetPixel
            G = 255;
            B = 255;
            SelectObject( myHdc, blackPen );
        ReleaseDC( myWnd, myHdc );
</code></pre>
<p>Was nützt es ein Objekt in einen DC zu selektieren der wieder ferigegeben wird. Zudem dies Leaks verursachen kann weil Du das ursprüngliche Objekt nicht wieder selektierst.<br />
3. Man sollte nur in WM_PAINT zeichnen!</p>
</blockquote>
<p>Hallo Martin...<br />
1. global -wie berichtet- Hilft mir bei meinem Vorhaben und allesklappt.<br />
2. Nein der ist nicht unnötig -naja njetzt schon- er war dafür gedacht den Stift zu wechseln, damit ich beim nächsten malvorgang andere Farben malen kann<br />
3. Ich bin mir nicht sicher... abe rmeiner meinung nach geht mein Vorhaben nicht in WM_PAINT, da ich quasi die mausbewegung aufzeichne, also quasi die Maus zum Stift mache...</p>
<p>Wie soll dass ohne WM_MOUSEMOVE gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445609</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Tue, 29 Jan 2008 12:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 12:46:26 GMT]]></title><description><![CDATA[<p>zu 1. selbst wenn es hilft ist es mieses Design und in meinen Augen falsch.<br />
zu 2. Du kannst kein Objekt selektieren und den DC danach freigeben. Das leaked ohne Ende. Punkt... Ganz egal was Du meinst.<br />
zu 3. Das macht Scribble (MFC) auch. D.h. Du zeichnest Due Bewegungen in einer Liste auf, und malst in WM_APINT. Was denkst Du denn, was passiert, wen Du mal den Explorer vor Deine Anwendung bringst und dann wieder minimierst. Wo sind dann Deine netten Zeichnungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445615</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 29 Jan 2008 12:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 13:23:09 GMT]]></title><description><![CDATA[<p>Momentan geht alles bei einem Rechtsklick verloren(absicht)[Das wird wohl erst ein wenig später eingebaut, da ich um 15:45 feierabend mache ;-)].</p>
<p>Wenn ich aber eine Liste mache mit den Bewegungen der Maus, dann kommt doch eine Zeitverzögerung in das Programm oder?</p>
<p>zu 1. Könntest du dass begründen, evtl einen Lösungsweg dazu geben(man lernt ja nie aus) ?<br />
zu 2. Dass ist schon raus...</p>
<p>Ahso: was ist denn das Standard-Objekt? Denn momentan wähle ich nur ein anderes(was im Pointer gespeichert ist) und benutze es</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445643</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Tue, 29 Jan 2008 13:23:09 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 13:36:53 GMT]]></title><description><![CDATA[<p>Beim ersten Aufruf von SelectObject() bekommst du ein Handle zurück. Das ist das Standardobjekt. Sichern und nachher wieder selektieren. Fertig.</p>
<p>Und was die Liste mit den Bewegungen angeht: Die Zeitverzögerung wirst du nicht merken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445647</guid><dc:creator><![CDATA[mad_martin]]></dc:creator><pubDate>Tue, 29 Jan 2008 13:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 13:48:07 GMT]]></title><description><![CDATA[<p>Danke.<br />
Habe es jetzt so eingestellt.</p>
<p>Jetzt werde ich mal überlegen wie ich dass mit dem PAINT malen fertig kriege.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445657</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Tue, 29 Jan 2008 13:48:07 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 13:49:27 GMT]]></title><description><![CDATA[<p>1. Ein HDC ist eine temporäres Handle, SOlch ein Handle holt man sich seltenst sondern man bekomt es geliefert (WM_PAINT)<br />
2. Ein DC verliert seine GTültigkeit mit dem ReleaseDC. Wieso sollte man also ein HDC speichern, dass sowieso ungültig ist.. und wenn DU den DC nicht frei gibst, dann ist dies eine Ressourcenverschwendung ohne Ende und es würde mich nicht wundern wenn Dein programm innerhalb eines gewissen Zeitarumes aus dem Ruder läuft.</p>
<p>BTW: Du hast auf meinen Einwurf /3.) nicht geantwortet.<br />
Was passiert, wenn der User Alt+Tab macht. Dann ist ales gemalte weg oder wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445658</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 29 Jan 2008 13:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 14:24:33 GMT]]></title><description><![CDATA[<p>Erstaunlicher weise nicht...<br />
Da ich allerddings gelesen hatte, das es passieren sollte habe ich probiert... Es verschwindet alles wenn man das Fenster neu Skalliert(was nicht möglich ist) oder es unter die Startleiste schiebt(also aus dem Bildschirm raus)...</p>
<p>Zumindest unter Vista...</p>
<p>ReleasDC ist doch zur freigabe von DC oder?</p>
<p>1. verstehe ich nicht, entweder ist dein Satz falsch (unverständlich) oder ich habe ein falsches WM_PAINT...<br />
Auch in WM_PAINT muss ich ein HDC deklarieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445687</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Tue, 29 Jan 2008 14:24:33 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Tue, 29 Jan 2008 14:51:05 GMT]]></title><description><![CDATA[<p>lippoliv schrieb:</p>
<blockquote>
<p>Erstaunlicher weise nicht...<br />
Da ich allerddings gelesen hatte, das es passieren sollte habe ich probiert... Es verschwindet alles wenn man das Fenster neu Skalliert(was nicht möglich ist) oder es unter die Startleiste schiebt(also aus dem Bildschirm raus)...</p>
</blockquote>
<p>Eben. Immer, wenn Du irgendwas mit dem Fenster machst, sendet Windows eine WM_PAINT. In der Standardbearbeitung (DefWindowProc) wird einfach das Fenster samt Hintergrund neu gezeichnet. Alles, was dann nicht in WM_PAINT gezeichnet wurde, verschwindet.</p>
<blockquote>
<p>1. verstehe ich nicht, entweder ist dein Satz falsch (unverständlich) oder ich habe ein falsches WM_PAINT...<br />
Auch in WM_PAINT muss ich ein HDC deklarieren...</p>
</blockquote>
<p>Unter WM_PAINT ist der hDC der Rückgabewert von BeginPaint(). Alles das muß dann mit EndPaint() abgeschlossen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445703</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Tue, 29 Jan 2008 14:51:05 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 08:23:45 GMT]]></title><description><![CDATA[<p>Ok dass verstehe ich.<br />
Habe ich doch bis jetzt auch gemacht (in WM_PAINT)...</p>
<p>Ne frage zu dem Array... Muss ich alles drin speichern oder nur den letzten schritt?</p>
<p>Ich meine WM_PAINT überschreibt deralles was vorher war, oder behält er dass von davor in sich?</p>
<p>[EDIT]</p>
<pre><code class="language-cpp">//glob.vars
HPEN *aktPen;
[...]
COORD myPoint,
      mouseKoord;
HDC myHdc;
HWND myWnd;
[...]
    case WM_PAINT:
        //zum Zeichnen anmelden
        myHdc = BeginPaint( myWnd, &amp;myPaint );
        {
            stdForm( myPaint, myRect, myWnd, myHdc );
            if( myPoint.x != -1 )
            {
                printf( &quot;.&quot; );
                backUp = SelectObject( myHdc, *aktPen );
                MoveToEx(
                    myHdc,		//Zeichenfläche
                    myPoint.x,	//X-Koordinate
                    myPoint.y,	//Y-Koordinate
                    NULL		  //old-Koordinate
                );
                LineTo(
                    myHdc,//Zeichenfläche
                    mouseKoord.X,	//X-Koordinate
                    mouseKoord.Y	 //Y-Koordinate
                );
                SelectObject( myHdc, backUp );
            }
        }
    EndPaint( myWnd, &amp;myPaint );
    break;
    [...]
    case WM_MOUSEMOVE:
        if( myPoint.x != -1 )
        {
            SendMessage( myAppWnd, WM_PAINT, 0, 0 );//send WM_PAINT so that the painting is just standing, if the window will be resized
            myPoint.x = LOWORD(lParam);//set new coordinates
            myPoint.y = HIWORD(lParam);
        }
        else
        {
            myPoint.x = LOWORD(lParam);//The first coordinates
            myPoint.y = HIWORD(lParam);
        }
    break;
[...]
</code></pre>
<p>Das funktioniert nicht... er macht punkte( Z: 16 ) aber... naja... er malt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446090</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 08:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 08:57:16 GMT]]></title><description><![CDATA[<p>Was übergibst Du denn da an BeginPaint()? Ist &amp;myPaint der Zeiger auf die PaintStruct?<br />
Normalerweise sollte das so aussehen:</p>
<pre><code>case WM_PAINT:
      {
         PAINTSTRUCT    myPaint;
         HDC            hDC;

         hDC = BeginPaint(hWnd, &amp;myPaint);
</code></pre>
<p>Dies nur, weil Du die Deklaration unterschlagen hast. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
zum Spechern der Punkte solltest du eine POINT-Variable anlegen, die sind schon vordefiniert:</p>
<pre><code>The POINT structure defines the x- and y- coordinates of a point. 

typedef struct tagPOINT { // pt  
    LONG x; 
    LONG y; 
} POINT; 

Members

x
Specifies the x-coordinate of the point. 

y
Specifies the y-coordinate of the point.
</code></pre>
<p>COORD benutzt man eigentlich nur für Consolen-Ausgaben.</p>
<p>Jetzt zu Deinem Problem: Natürlich mußt Du deine gezeichneten Punkte zwischenspeichern und unter WM_PAINT ausgeben. Du hast aber nur eine Variable dafür angelegt. Wenn Du nur jeweils einen Punkt speicherst, wird auch nur der ausgegeben. Du kannst die Punkte in einem Array speichern (muß evtl. redimensioniert werden, wenn Du die Zeichnung erweiterst) und dann unter WM_PAINT zeichnen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446121</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Wed, 30 Jan 2008 08:57:16 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 09:55:15 GMT]]></title><description><![CDATA[<p>Naja die idee ist:<br />
Ich speichere den aktuellen Punkt.</p>
<p>Wenn es schon einen Punkt gibt(zwischengespeichert), dann ziehe ich erst eine Linie zwischen den beiden Punkten und speichere den aktuellen zwischen.<br />
got Naja die idee ist;<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<p>So brauche ich nicht ein array für das gesamte Bild oder!?</p>
<p>PS: myPaint ist ein PAINTSTRUCT sry... vergessen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446156</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 09:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 10:06:06 GMT]]></title><description><![CDATA[<p>Dann bräuchtest Du zwei POINT-Variablen, hast aber unter WM_MOUSEMOVE nur eine angelegt. WM_PAINT liefert keine Mauskoordinaten.<br />
Der Effekt ist halt, wenn Du alles vorherige nicht gespeichert hast, wird das durch die WM_PAINT erstmal gelöscht. Dann zeichnet BeginPaint Deine Linie, hat aber nur den aktuellen Punkt dafür, die vorherigen nicht. Du mußt also die vorherigen Aktionen zwischenspeichern und bei WM_PAINT neu ausführen.</p>
<p>Übrigens bewirkt man das Aktualisieren des Fensters nicht mit SendMessage(...WM_PAINT...), sondern mit InvalidateRect().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446162</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Wed, 30 Jan 2008 10:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 10:07:57 GMT]]></title><description><![CDATA[<p>Ja das Tue ich doch...</p>
<pre><code class="language-cpp">LRESULT CALLBACK WndProc( HWND myWnd, UINT givenMessage, WPARAM wParam, LPARAM lParam )
/*
	This function recieves the Messages, wich are given from MS-Windows to the program.
	So the program can do message specific actions, if this message is incoming.
*/
{
	PAINTSTRUCT myPaint;
	//Handle für Gerätekontext(gültiger Zeichenbereich)
	BOOL visitMsg = FALSE;

	static POINT myPoint;

	static RECT myRect;

	static BOOL isPainting;

	static COORD mouseKoord;

	HANDLE backUp;

	if( LOWORD(lParam) != 0 || HIWORD(lParam) != 0)
	{
		mouseKoord.X = LOWORD(lParam);	//took the mouse-coordinates into a COORD variable (perfomance)
		mouseKoord.Y = HIWORD(lParam);
	}

	switch( givenMessage )
	{
		case WM_PAINT:
			//zum Zeichnen anmelden
			myHdc = BeginPaint( myWnd, &amp;myPaint );
			{
				stdForm( myPaint, myRect, myWnd, myHdc );
				if( myPoint.x != -1 )
				{
					backUp = SelectObject( myHdc, *aktPen );
					MoveToEx(
							myHdc,		//Zeichenfläche
							myPoint.x,	//X-Koordinate
							myPoint.y,	//Y-Koordinate
							NULL		//old-Koordinate
					);
					LineTo(
						myHdc,			//Zeichenfläche
						mouseKoord.X,	//X-Koordinate
						mouseKoord.Y	//Y-Koordinate
					);
					SelectObject( myHdc, backUp );
				}
			}
			EndPaint( myWnd, &amp;myPaint );
			visitMsg = TRUE;
		break;
		case WM_MOUSEMOVE:
			myHdc = GetDC( myWnd );			//open device-context (paintplace)
			{
				if( !isPainting )			//Wenn der 
				{
					if( inRect( mouseKoord, blackColor ) )
					{
						aktPen = &amp;blackPen;								//slect black pen

						R = 0;
						G = 0;
						B = 0;
					}
					else if( inRect( mouseKoord, whiteColor ) )
					{
						aktPen = &amp;whitePen;								//select white pen

						R = 255;
						G = 255;
						B = 255;
					}
					else if( inRect( mouseKoord, smallSize ) )
					{
						DeleteObject( aktPen );
						*aktPen = CreatePen( PS_SOLID, 1, RGB( R, G, B ) );
					}
					else if( inRect( mouseKoord, middleSize ) )
					{
						DeleteObject( aktPen );
						*aktPen = CreatePen( PS_SOLID, 3, RGB( R, G, B ) );
					}
					else if( inRect( mouseKoord, bigSize ) )
					{
						DeleteObject( aktPen );
						*aktPen = CreatePen( PS_SOLID, 4, RGB( R, G, B ) );
					}
				}
				else
				{
					if( myPoint.x != -1 )
					{
						SendMessage( myAppWnd, WM_PAINT, 0, 0 );	//send WM_PAINT so that the painting is just standing, if the window will be resized
						myPoint.x = mouseKoord.X;					//set new coordinates
						myPoint.y = mouseKoord.Y;
					}
					else
					{
						myPoint.x = mouseKoord.X;//The first coordinates
						myPoint.y = mouseKoord.Y;
					}
				}
			}
			ReleaseDC( myWnd, myHdc );
            visitMsg = TRUE;
		break;
		case WM_LBUTTONDOWN:
			isPainting = TRUE;
			visitMsg = TRUE;
		break;
		case WM_LBUTTONUP:
			isPainting = FALSE;

			myPoint.x = -1;
			myPoint.y = -1;

			visitMsg = TRUE;
		break;
		case WM_RBUTTONDOWN:
			DeleteObject( whitePen );
			DeleteObject( blackPen );
			setGlobalVars();
			InvalidateRect(
							myWnd,
							NULL,
							TRUE
			);

			visitMsg = TRUE;
		break;
		default:
		break;
	}

	if( visitMsg )
		return 0;
	else
		return DefWindowProc( myWnd, givenMessage, wParam, lParam );
}
</code></pre>
<p>Min invalidate rect, hackts ur wenn ich das Fenster erneuere... also beim malen zuckt mein &quot;Form&quot; total zusammen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446164</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 10:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 10:16:01 GMT]]></title><description><![CDATA[<p>Na endlich mal ein bißchen mehr Code... :p<br />
Unter WM_MOUSEMOVE fragst Du keine Koordinaten ab, sondern ordnest nur MouseKoord an MyPoint zu. Das bringt nichts.<br />
Dieser Abschnitt</p>
<pre><code>if( LOWORD(lParam) != 0 || HIWORD(lParam) != 0)
    {
        mouseKoord.X = LOWORD(lParam);    //took the mouse-coordinates into a COORD variable (perfomance)
        mouseKoord.Y = HIWORD(lParam);
    }
</code></pre>
<p>gehört auch unter WM_MOUSEMOVE. Sonst werden die aktuellen Koordinaten nicht aus der WM_MOUSEMOVE-Message genommen.<br />
Danach verschiebst Du die Maus und speicherst die neuen Koordinaten in myPoint. Damit hast Du zwei Punkte, die unter WM_PAINT abgefragt werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446168</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Wed, 30 Jan 2008 10:16:01 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 10:15:39 GMT]]></title><description><![CDATA[<p>Elektronix schrieb:</p>
<blockquote>
<p>Sonst werden die aktuellen Koordinaten nicht aus der WM_MOUSEMOVE-Message genommen.</p>
</blockquote>
<p>Diese Koordinaten sollen immer aktuell sein, ob mousemove oder nicht... sie werden überall wieder verwednet, damit ich nicht immer auf LO und HIWORD zurückgreife...</p>
<p>Ob sie da stehen oder in Mousemove... macht dass einen Unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446170</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 10:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 10:25:47 GMT]]></title><description><![CDATA[<p>lippoliv schrieb:</p>
<blockquote>
<p>Elektronix schrieb:</p>
<blockquote>
<p>Sonst werden die aktuellen Koordinaten nicht aus der WM_MOUSEMOVE-Message genommen.</p>
</blockquote>
<p>Diese Koordinaten sollen immer aktuell sein, ob mousemove oder nicht... sie werden überall wieder verwednet, damit ich nicht immer auf LO und HIWORD zurückgreife...</p>
</blockquote>
<p>Wieso, das tust Du doch ohnehin. Nur eben permanent und ohne Zusammenhang.</p>
<blockquote>
<p>Ob sie da stehen oder in Mousemove... macht dass einen Unterschied?</p>
</blockquote>
<p>Ja. Das Fenster wird noch mit einem Haufen anderer WM-Nachrichten bombardiert, die in lParam immer andere (oder auch gar keine) Werte enthalten. Damit kannst Du beim Zeichnen nichts anfangen. Die aktuellen Koordinaten bekommst Du nur mit den Mouse- oder Button-Nachrichten (oben aufgezählt), dazu sind die da!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446174</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Wed, 30 Jan 2008 10:25:47 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 10:31:19 GMT]]></title><description><![CDATA[<p>Ja ist ja kein Problem oder?<br />
Ich nehme ja nur welche an wo HO oder LO != 0 ist/sind.<br />
Und fürs Zeichnen bekomme ich dann ja immer die Aktuellsten Koordinaten...</p>
<p>Ich habe es jetzt umgebaut, und selbst da funktioniert es nicht.</p>
<p>1. Ich kriege keine striche,<br />
2. es zuckt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446182</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 10:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 10:44:41 GMT]]></title><description><![CDATA[<p>Programmier doch mal ein Textfeld, wo Du Dir die angeblichen Koordinaten anzeigen läßt. Dann wirste es ja sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446189</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Wed, 30 Jan 2008 10:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 11:28:33 GMT]]></title><description><![CDATA[<p>Ich soll, weil mein Form zuckt und keine Striche erscheinen, ein Textfeld Programmieren?</p>
<p>Ich bin -glaube ich- auf dem so ziemlich untesten Level der Fensterprogrammierung.. ein Textfeld ist da noch weit weg glaube ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446207</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 11:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 11:54:50 GMT]]></title><description><![CDATA[<p>Nö, ein Textfeld ist genau auf dem untersten Level <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><a href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms632679.aspx</a><br />
mit EDIT als lpClassName. Ganz einfach, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446226</guid><dc:creator><![CDATA[mad_martin]]></dc:creator><pubDate>Wed, 30 Jan 2008 11:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 11:58:20 GMT]]></title><description><![CDATA[<p>Trotzdem, was sollte mir das Helfen? Das Problem vergeht nicht, während ich ein anderes Programm schreibe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446227</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 11:58:20 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 12:04:18 GMT]]></title><description><![CDATA[<p>Du kannst auch ein ChildWindow erstellen und darin die Koordinaten per TextOut() ausgeben.</p>
<p>Allerdings scheint es mir, daß Du Dich mit Deinem Malprogramm etwas übernommen hast. Du solltest vielleicht doch noch mal die Tutorials durchackern. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446233</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Wed, 30 Jan 2008 12:04:18 GMT</pubDate></item><item><title><![CDATA[Reply to HDC global... GetDC überschreibt alles? on Wed, 30 Jan 2008 12:22:28 GMT]]></title><description><![CDATA[<p>Frage: Wieso zeigt mein WM_PAINT nichts an?<br />
Ich habe es genau so gemacht wie ihr es mir verdeutlich habt, also damit nichts verloren geht.</p>
<p>Ich speichere die letzte, und die Aktuelle aus WM_MOUSEMOVE und ziehe von der einen zur anderen einen strich.</p>
<p>Wenn ich direkt nach LineTo ein printf( &quot;.&quot; ) mache, zeigt er dass in der Konsole auch an...</p>
<p>Wieso malt er dann nicht?</p>
<p>Darauf brauche ich eine antwort, nicht wie ich ein ChildWindow erstelle, Koordinaten ausgebe oder so... &lt;&lt; klingt scheiße und aggresiv, ist es aber nicht.</p>
<p>Mich wundert dieser Fehler. Wenn er ja schon in der IF bedingung ist, wieso tut er nicht seine aufgaben....</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11581">@Elektronix</a> meintest du ich solle mir Testhalber die Koords ansehen?</p>
<pre><code>myPoint   |  mousePointForPaint
 x  |  y |||  x | y
324 | 430 =&gt; 324  430
318 | 413 =&gt; 318  413
314 | 401 =&gt; 314  401
304 | 372 =&gt; 304  372
292 | 336 =&gt; 292  336
284 | 320 =&gt; 284  320
269 | 276 =&gt; 269  276
258 | 244 =&gt; 258  244
248 | 214 =&gt; 248  214
245 | 204 =&gt; 245  204
240 | 189 =&gt; 240  189
235 | 175 =&gt; 235  175
234 | 168 =&gt; 234  168
232 | 156 =&gt; 232  156
229 | 145 =&gt; 229  145
226 | 135 =&gt; 226  135
223 | 126 =&gt; 223  126
221 | 122 =&gt; 221  122
219 | 114 =&gt; 219  114
217 | 110 =&gt; 217  110
216 | 106 =&gt; 216  106
214 | 104 =&gt; 214  104
213 | 101 =&gt; 213  101
211 | 100 =&gt; 211  100
</code></pre>
<p>scheint die richtigen coords zu haben</p>
<p>warum sind die alle gleich??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446240</guid><dc:creator><![CDATA[lippoliv]]></dc:creator><pubDate>Wed, 30 Jan 2008 12:22:28 GMT</pubDate></item></channel></rss>