<?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[Unterscheiden zwischen Klick und Doppelklick]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe gerade vor dem Problem in einem Programm zwischen zwei Mausaktionen,<br />
WM_LBUTTONDBLCLK und WM_LBUTTONUP, zu unterscheiden, was etwas verzwickt ist,<br />
weil eine WM_LBUTTONDBLCLK-Nachricht auch immer, unter anderem, zwei<br />
WM_LBUTTONUP-Nachrichten mit sich bringt. Gibt es hier eine Standardvorgehens-<br />
weise zu erkennen, wann es sich um einen Doppelklick und wann es sich um einen<br />
einfachen Klick handelt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/210059/unterscheiden-zwischen-klick-und-doppelklick</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 02:53:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210059.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Apr 2008 19:13:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Sun, 06 Apr 2008 19:13:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe gerade vor dem Problem in einem Programm zwischen zwei Mausaktionen,<br />
WM_LBUTTONDBLCLK und WM_LBUTTONUP, zu unterscheiden, was etwas verzwickt ist,<br />
weil eine WM_LBUTTONDBLCLK-Nachricht auch immer, unter anderem, zwei<br />
WM_LBUTTONUP-Nachrichten mit sich bringt. Gibt es hier eine Standardvorgehens-<br />
weise zu erkennen, wann es sich um einen Doppelklick und wann es sich um einen<br />
einfachen Klick handelt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487555</guid><dc:creator><![CDATA[js]]></dc:creator><pubDate>Sun, 06 Apr 2008 19:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Sun, 06 Apr 2008 20:15:00 GMT]]></title><description><![CDATA[<p>hm ... gib mal nochn paar Infos. So wie ich das verstehe reagierst du sowohl auf einen Click als auch auf einen DblClick, willst aber nicht auf den Click reagieren der ja zwangsläufig 2 mal ausgelöst wird, wenn es sich um einen DblClick handelt.</p>
<p>Richtig?</p>
<p>Oder willst du den Click schon behandeln, aber nur einmal statt 2 mal?</p>
<p>Was du machen könntest (und was sicherlich auch std ist (keine Gewähr)) ist mit deiner Click-Reaktion so lange zu warten, bis du einen DblClick ausschließen kannst, das sind ja nur ein paar Millisekunden, das stört sicher nicht. Dazu legst du einfach eine boolsche Variable an die für beide Messages sichtbar ist und bei DblClick setzt du sie auf true, beim Click schaust du dann nach den paar millisekunden ob die Variable auf true ist und führst nur dann die Aktionen aus, ansonsten setzt du die Variable wieder auf false. EDIT: Da Click ja zweimal aufgerufen wird musst du statt ner boolschen Variable mit ner int arbeiten und incrementieren und decramentieren ... u know?</p>
<p>Geholfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487567</guid><dc:creator><![CDATA[dust]]></dc:creator><pubDate>Sun, 06 Apr 2008 20:15:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Sun, 06 Apr 2008 20:06:27 GMT]]></title><description><![CDATA[<p>musste dir selbst wsa frickeln, wie du schon sagtest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487571</guid><dc:creator><![CDATA[rofler]]></dc:creator><pubDate>Sun, 06 Apr 2008 20:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Mon, 07 Apr 2008 01:07:04 GMT]]></title><description><![CDATA[<p>Ausleuchtung mit Pseudo-Code:</p>
<pre><code class="language-cpp">//der Einfachheit halber globale Variable
int iDblClick = 0;

...

MessageHandler()
{
   switch(msg)
   {
      case WM_LBUTTONDBLCLK:
      {
         iDblClick = 2;
         //dein DoubleClick-Code
      }
      case WM_LBUTTONUP:
      {
         Sleep(GetDoubleClickTime()); //der Einfachheit halber Sleep
         if(iDblClick &lt;= 0)
         {
            //dein Click-Code
         }
         else
         {
            --iDblClick;
         }
      }
   }
   ...
}
</code></pre>
<p>Sleep() und das mit der globalen Variable kann sicher besser gelöst werden, ansonsten sollte jetzt klar sein, wie du das Problem lösen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487622</guid><dc:creator><![CDATA[dust]]></dc:creator><pubDate>Mon, 07 Apr 2008 01:07:04 GMT</pubDate></item><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Mon, 07 Apr 2008 06:40:24 GMT]]></title><description><![CDATA[<p>Man muss Click und Doppelklick in der Funkltionsweise doch gar nichtunterscheiden.<br />
Einfach-Klick selektiert.<br />
Doppelklick-führt aus.</p>
<p>Ansonsten kannst Du beim ersten Click einen Timer setzen. AM besten mit dre Länge des Dopelklickintervalles.<br />
Geht in der zwischenzeit bevor der Timer fällt ein weitere Klick ein bzw. der Doppelklick dan weißt Du, dass eben doppelt geklickt wurde. Geht keine weitere Info ein, dann weißt Du das es nur ein einfacher Klick war.</p>
<p>Die von dust vorgestellte Sleep Variante finde ich unmöglich... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487644</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 07 Apr 2008 06:40:24 GMT</pubDate></item><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Mon, 07 Apr 2008 07:29:36 GMT]]></title><description><![CDATA[<p>Tatsächlich Martin, hast du exakt das wiederholt was ich schon 2 mal geschrieben habe, und das mit Sleep steht auch unten drunter, dass man das nicht so lösen soll. Ist jawohl logisch, dass man im MainThread kein Sleep benutzt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487664</guid><dc:creator><![CDATA[dust]]></dc:creator><pubDate>Mon, 07 Apr 2008 07:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Mon, 07 Apr 2008 17:49:13 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten, an eine Timersteuerung hatte ich auch schon gedacht,<br />
aber mir ist inzwischen etwas anderes eingefallen, was besser in die Programm-<br />
logik paßt, da in meinem Programm etwas gezeichnet wird und somit die<br />
WM_LBUTTONDOWN und WM_LBUTTONUP Nachricht unterschiedlich bearbeitet werden<br />
ist es für mich einfacher die Mausbewegung zu protokollieren und die einfachen<br />
Klick-Nachrichten, bei denen die Maus nicht bewegt wurde, wie es bei<br />
WM_LBUTTONDBLCLK der Fall sein sollte, zu verwerfen,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488114</guid><dc:creator><![CDATA[js]]></dc:creator><pubDate>Mon, 07 Apr 2008 17:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Unterscheiden zwischen Klick und Doppelklick on Mon, 07 Apr 2008 21:20:31 GMT]]></title><description><![CDATA[<p>js schrieb:</p>
<blockquote>
<p>da in meinem Programm etwas gezeichnet wird und somit die WM_LBUTTONDOWN und WM_LBUTTONUP Nachricht unterschiedlich bearbeitet werden</p>
</blockquote>
<p>Laut MSDN ist ein &quot;Klick&quot; == &quot;WM_LBUTTON<strong>DOWN</strong> -&gt; WM_LBUTTON<strong>UP</strong>&quot;,<br />
Und ein &quot;Doppelklick&quot; == &quot;WM_LBUTTON<strong>DOWN</strong> -&gt; WM_LBUTTON<strong>UP</strong> -&gt; WM_LBUTTON<strong>DBLCLICK</strong> -&gt; WM_LBUTTON<strong>UP</strong>&quot;.<br />
Da wird ein Flag ausreichend sein um beide zu unterscheiden :</p>
<pre><code class="language-cpp">case WM_LBUTTONDOWN : {
  ...
  flag = 1;
 }
 case WM_LBUTTONDBLCLICK : {
  ...
  flag = 2;
 }

 case WM_LBUTTONUP : {
  if (flag == 1) {  // gehört zu Klick
  }
  if (flag == 2) {  // gehört zu Doppelklick
  }
  flag = 0;         // flag hier immer zurücksetzen
 }
 case WM_MOUSEMOVE : {
  if (flag == 1) {  // gehört zu Klick
  }
  if (flag == 2) {  // gehört zu Doppelklick
  }
//  flag = 0;         // flag hier immer zurücksetzen
 }
</code></pre>
<p>*edit* Bei WM_MOUSEMOVE das Flag natürlich <em>nicht</em> zurücksetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488212</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 07 Apr 2008 21:20:31 GMT</pubDate></item></channel></rss>