<?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[Mit MOUSEMOVE Position von RECT aendern - Problem - Anfaenger]]></title><description><![CDATA[<p>Ich will mit Nachricht MOUSEMOVE Position von einem RECT aendern (etwas zu &quot;ziehen&quot;).<br />
Ich habe POINT start und POINT end, um die Koordinaten, wo man WM_LBUTTONDOWN macht (start), und, wohin man &quot;zieht&quot;(end), zu speichern.<br />
Man kann ziehen nur dann, wenn man mit WM_LBUTTONDOWN in Bereich von Rect drueckt.<br />
Problem ist: wie man rechnet neue Koordinaten von RECT? (ich brauche nur ein Punkt: rect.left und rect.top. Andere 2 Parameter werden automatisch berechnet.<br />
Ich habe so geschrieben:<br />
rect.left+=end.x-start.x;<br />
rect.top+=end.y-start.y;<br />
Das heisst, zum alten Wert von rect.left addiere ich die Differenz zwischen Punkt, wohin ich ziehe, und Punkt, wo ich gedrueckt hat.<br />
Aber das funktioniert nicht: mein Rect fliegt weit weit weg, viel weiter, als Mouse sich bewegt.<br />
Interessant ist, dass, wenn ich so schreibe:<br />
rect.left=end.x;<br />
dann funktioniert alles bestens, aber Mouse liegt immer im Punkt (rect.left;rect.top) vom RECT.<br />
Wo liegt Fehler oder villeicht gibts andere Loesung dieses Problems?<br />
Hier ist meine Code von WndProc:</p>
<pre><code>LRESULT CALLBACK WinProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    char text[]=&quot;Blood Mary&quot;;
    static RECT rect;
    static POINT start;
    static POINT end;
    SIZE size;

// Main SWITCH------------------------------------------------------------------
    switch (Message)
    {
        case WM_CREATE:
        {
            start.x = -1;
            start.y = -1;
            end.x = -1;
            end.y = -1;
            return 0;
        }    

        case WM_LBUTTONDOWN:
        {
            int xpos=LOWORD(lparam);
            int ypos=HIWORD(lparam);
            if ((rect.left&lt;=xpos)&amp;&amp;(xpos&lt;=rect.right)&amp;&amp;(rect.top&lt;=ypos)&amp;&amp;(ypos&lt;=rect.bottom))
            {
                start.x=xpos;
                start.y=ypos;
            }    
            return 0;   
        }
        case WM_MOUSEMOVE:
        {
            if ((wparam &amp; MK_LBUTTON)&amp;&amp;start.x!=-1)
            {
                end.x=LOWORD(lparam);
                end.y=HIWORD(lparam);
                InvalidateRect(hwnd,NULL,TRUE);    
            }    
            return 0;
        }
        case WM_LBUTTONUP:
        {
            start.x=-1;
            return 0;
        }    
        case WM_PAINT:
        {
            HDC hdc;
            PAINTSTRUCT ps;
            hdc=BeginPaint(hwnd,&amp;ps);
                GetTextExtentPoint32(hdc,text,strlen(text),&amp;size);
                if (start.x!=-1)
                {
                    rect.left=(end.x-start.x+rect.left);
                    rect.top=(end.y-start.y+rect.top);
                }
                else
                {
                    rect.left=100;
                    rect.top=50;    
                }            
                rect.right=rect.left+size.cx;
                rect.bottom=rect.top+size.cy;
                DrawText(hdc,text,strlen(text),&amp;rect,DT_CENTER|DT_VCENTER);
            EndPaint(hwnd, &amp;ps);
            return 0;
        }    
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }    
        default:
            return DefWindowProc(hwnd, Message, wparam, lparam);
   }
// END of Main SWITCH------------------------------------------------------------    
return 0;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/90028/mit-mousemove-position-von-rect-aendern-problem-anfaenger</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 21:46:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/90028.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Oct 2004 16:47:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mit MOUSEMOVE Position von RECT aendern - Problem - Anfaenger on Mon, 25 Oct 2004 16:47:31 GMT]]></title><description><![CDATA[<p>Ich will mit Nachricht MOUSEMOVE Position von einem RECT aendern (etwas zu &quot;ziehen&quot;).<br />
Ich habe POINT start und POINT end, um die Koordinaten, wo man WM_LBUTTONDOWN macht (start), und, wohin man &quot;zieht&quot;(end), zu speichern.<br />
Man kann ziehen nur dann, wenn man mit WM_LBUTTONDOWN in Bereich von Rect drueckt.<br />
Problem ist: wie man rechnet neue Koordinaten von RECT? (ich brauche nur ein Punkt: rect.left und rect.top. Andere 2 Parameter werden automatisch berechnet.<br />
Ich habe so geschrieben:<br />
rect.left+=end.x-start.x;<br />
rect.top+=end.y-start.y;<br />
Das heisst, zum alten Wert von rect.left addiere ich die Differenz zwischen Punkt, wohin ich ziehe, und Punkt, wo ich gedrueckt hat.<br />
Aber das funktioniert nicht: mein Rect fliegt weit weit weg, viel weiter, als Mouse sich bewegt.<br />
Interessant ist, dass, wenn ich so schreibe:<br />
rect.left=end.x;<br />
dann funktioniert alles bestens, aber Mouse liegt immer im Punkt (rect.left;rect.top) vom RECT.<br />
Wo liegt Fehler oder villeicht gibts andere Loesung dieses Problems?<br />
Hier ist meine Code von WndProc:</p>
<pre><code>LRESULT CALLBACK WinProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    char text[]=&quot;Blood Mary&quot;;
    static RECT rect;
    static POINT start;
    static POINT end;
    SIZE size;

// Main SWITCH------------------------------------------------------------------
    switch (Message)
    {
        case WM_CREATE:
        {
            start.x = -1;
            start.y = -1;
            end.x = -1;
            end.y = -1;
            return 0;
        }    

        case WM_LBUTTONDOWN:
        {
            int xpos=LOWORD(lparam);
            int ypos=HIWORD(lparam);
            if ((rect.left&lt;=xpos)&amp;&amp;(xpos&lt;=rect.right)&amp;&amp;(rect.top&lt;=ypos)&amp;&amp;(ypos&lt;=rect.bottom))
            {
                start.x=xpos;
                start.y=ypos;
            }    
            return 0;   
        }
        case WM_MOUSEMOVE:
        {
            if ((wparam &amp; MK_LBUTTON)&amp;&amp;start.x!=-1)
            {
                end.x=LOWORD(lparam);
                end.y=HIWORD(lparam);
                InvalidateRect(hwnd,NULL,TRUE);    
            }    
            return 0;
        }
        case WM_LBUTTONUP:
        {
            start.x=-1;
            return 0;
        }    
        case WM_PAINT:
        {
            HDC hdc;
            PAINTSTRUCT ps;
            hdc=BeginPaint(hwnd,&amp;ps);
                GetTextExtentPoint32(hdc,text,strlen(text),&amp;size);
                if (start.x!=-1)
                {
                    rect.left=(end.x-start.x+rect.left);
                    rect.top=(end.y-start.y+rect.top);
                }
                else
                {
                    rect.left=100;
                    rect.top=50;    
                }            
                rect.right=rect.left+size.cx;
                rect.bottom=rect.top+size.cy;
                DrawText(hdc,text,strlen(text),&amp;rect,DT_CENTER|DT_VCENTER);
            EndPaint(hwnd, &amp;ps);
            return 0;
        }    
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }    
        default:
            return DefWindowProc(hwnd, Message, wparam, lparam);
   }
// END of Main SWITCH------------------------------------------------------------    
return 0;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/637292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/637292</guid><dc:creator><![CDATA[vadimiron]]></dc:creator><pubDate>Mon, 25 Oct 2004 16:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to Mit MOUSEMOVE Position von RECT aendern - Problem - Anfaenger on Mon, 25 Oct 2004 21:43:57 GMT]]></title><description><![CDATA[<p>vadimiron schrieb:</p>
<blockquote>
<p>rect.left=end.x;<br />
dann funktioniert alles bestens, aber Mouse liegt immer im Punkt (rect.left;rect.top) vom RECT.</p>
</blockquote>
<p>Das sieht auch schon viel besser aus - was du allerdings mit dem 2. Teil des Satzes sagen willst, habe ich nicht ganz verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/637518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/637518</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Mon, 25 Oct 2004 21:43:57 GMT</pubDate></item><item><title><![CDATA[Reply to Mit MOUSEMOVE Position von RECT aendern - Problem - Anfaenger on Tue, 26 Oct 2004 08:19:07 GMT]]></title><description><![CDATA[<p>flenders schrieb:</p>
<blockquote>
<p>vadimiron schrieb:</p>
<blockquote>
<p>rect.left=end.x;<br />
dann funktioniert alles bestens, aber Mouse liegt immer im Punkt (rect.left;rect.top) vom RECT.</p>
</blockquote>
<p>Das sieht auch schon viel besser aus - was du allerdings mit dem 2. Teil des Satzes sagen willst, habe ich nicht ganz verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich habe versucht damit zu sagen, dass RECT sich bei WM_MOUSEMOVE so verlagert, dass MouseZeiger sich im linken oberen Punkt vom RECT befindet, ganz egal ob ich in der Mitte vom RECT gedrueckt habe oder unten rechts; und das ist selbstverstaendlich, weil ich so: rect.left=end.x;-schreibe.<br />
Aber ich will, wenn ich zB in die Mitte vom RECT druecke, dass MouseZeiger auch beim Ziehen (bei WM_MOUSEMOVE) da bleibt. Dafuer versuchte ich so was zu schreiben: rect.left=(end.x-start.x+rect.left);. zum alten Wert vom rect.left addiere ich Abstand zwischen end.x und start.x<br />
Aber das funktioniert nicht richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/637637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/637637</guid><dc:creator><![CDATA[vadimiron]]></dc:creator><pubDate>Tue, 26 Oct 2004 08:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Mit MOUSEMOVE Position von RECT aendern - Problem - Anfaenger on Tue, 26 Oct 2004 08:59:03 GMT]]></title><description><![CDATA[<p>Evtl. hilft dir das:<br />
<a href="http://www.geeky.de/cpp/downloads/test_rect.rar" rel="nofollow">http://www.geeky.de/cpp/downloads/test_rect.rar</a><br />
(Ist eine Beispielanwendung, bei der man ein Rechteck mit Text drin ziehen kann, und anschließend verschieben...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/637673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/637673</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Tue, 26 Oct 2004 08:59:03 GMT</pubDate></item><item><title><![CDATA[Reply to Mit MOUSEMOVE Position von RECT aendern - Problem - Anfaenger on Tue, 26 Oct 2004 14:21:17 GMT]]></title><description><![CDATA[<p>geeky schrieb:</p>
<blockquote>
<p>Evtl. hilft dir das:<br />
<a href="http://www.geeky.de/cpp/downloads/test_rect.rar" rel="nofollow">http://www.geeky.de/cpp/downloads/test_rect.rar</a><br />
(Ist eine Beispielanwendung, bei der man ein Rechteck mit Text drin ziehen kann, und anschließend verschieben...)</p>
</blockquote>
<p>Vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Das hat geholfen<br />
Wer sich interessiert, mein Code muss man so ergaenzen:<br />
Nach<br />
rect.left=(end.x-start.x+rect.left);<br />
rect.top=(end.y-start.y+rect.top);<br />
soll man noch das schreiben:<br />
start.x=end.x;<br />
start.y=end.y;<br />
weil start muss beim nächsten WM_MOUSEMOVE der jetzige Punkt sein und der jetzige Punkt ist immer end</p>
]]></description><link>https://www.c-plusplus.net/forum/post/637972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/637972</guid><dc:creator><![CDATA[vadimiron]]></dc:creator><pubDate>Tue, 26 Oct 2004 14:21:17 GMT</pubDate></item></channel></rss>