<?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[Benutzerdefinierte Windows Prozedur mit zusätzlichen Argumenten möglich?]]></title><description><![CDATA[<p>Hallo, ich habe eine Problem, beziehungsweise eine Frage...</p>
<p>Und zwar möchte ich dass die WindowsProzedur keine globalen Variablen benötigt, sondern eine Möglichkeit bekommt lokale Variablen zu benutzen, indem die Anzahl der Argumente erweitert wird.</p>
<pre><code class="language-cpp">LRESULT CALLBACK CustWndProc(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam, int i);
</code></pre>
<p>Die Windows Klasse nimmt sie auch an, sofern ich sie mit (WNDPROC) caste...</p>
<p>Es scheint auch alles prima zu funktionieren, bis ich das Fenster durch eine WM_DESTROY Nachricht zerstört wird -&gt; i beinhaltet Müll...</p>
<p>Da ich relativ neu dabei bin was C++/WinAPI programmierung betrifft, war ich mir nicht genau sicher wie sich soetwas auf den Message Loop auswirkt, daher habe ich vorsichtshalber eine eigene DispatchMessage Funktion geschrieben, aber ob die wirklich sinnvoll ist weiss ich nicht <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>
<pre><code class="language-cpp">while((status = ::GetMessage(&amp;msg, 0, 0, 0)) != 0) 
	{

		ko = rand() % 2000 + 1000; 
		if(status == -1) 
		{
			return -1;
		}

		if (msg.hwnd == window.RetWnd() ) //checkt ob die nachricht wirklich ans Hauptfenster gerichtet ist?
		{
			ko = rand() % 1000 + 1000;
		CustWndProc(msg.hwnd,msg.message ,msg.wParam ,msg.lParam , ko);
		}
		else
		::DispatchMessage(&amp;msg);
	}
</code></pre>
<pre><code class="language-cpp">CustWndProc(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam, int i)
{
	switch(message) {
		case WM_DESTROY:
			Beep(i,1000);
			::PostQuitMessage(0);
			return 0;
			break;
		case WM_LBUTTONUP :
			Beep(i,1000);
			break;

	}

	return ::DefWindowProc(hwnd, message, wParam, lParam);
}
</code></pre>
<p>Der Beep funktioniert einwandfrei im WM_LBUTTONUP case...DESTROY ist wiegesagt buggy...</p>
<p>Meine Frage...macht das alles hier Sinn?<br />
Falls ja...was mache ich falsch, beuiehiehungsweise, was sollte ich anders machen um es zu verbessern?<br />
Falls nein...welche Alternativen habe ich?<br />
In diesem Fall müsste ich die Variabel der Frequenz für den Beep global anlegen...<br />
Da muss es doch was anderes geben... <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>Vielen Dank im voraus! <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220779/benutzerdefinierte-windows-prozedur-mit-zusätzlichen-argumenten-möglich</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 17:04:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220779.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Aug 2008 21:50:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Benutzerdefinierte Windows Prozedur mit zusätzlichen Argumenten möglich? on Wed, 20 Aug 2008 21:54:25 GMT]]></title><description><![CDATA[<p>Hallo, ich habe eine Problem, beziehungsweise eine Frage...</p>
<p>Und zwar möchte ich dass die WindowsProzedur keine globalen Variablen benötigt, sondern eine Möglichkeit bekommt lokale Variablen zu benutzen, indem die Anzahl der Argumente erweitert wird.</p>
<pre><code class="language-cpp">LRESULT CALLBACK CustWndProc(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam, int i);
</code></pre>
<p>Die Windows Klasse nimmt sie auch an, sofern ich sie mit (WNDPROC) caste...</p>
<p>Es scheint auch alles prima zu funktionieren, bis ich das Fenster durch eine WM_DESTROY Nachricht zerstört wird -&gt; i beinhaltet Müll...</p>
<p>Da ich relativ neu dabei bin was C++/WinAPI programmierung betrifft, war ich mir nicht genau sicher wie sich soetwas auf den Message Loop auswirkt, daher habe ich vorsichtshalber eine eigene DispatchMessage Funktion geschrieben, aber ob die wirklich sinnvoll ist weiss ich nicht <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>
<pre><code class="language-cpp">while((status = ::GetMessage(&amp;msg, 0, 0, 0)) != 0) 
	{

		ko = rand() % 2000 + 1000; 
		if(status == -1) 
		{
			return -1;
		}

		if (msg.hwnd == window.RetWnd() ) //checkt ob die nachricht wirklich ans Hauptfenster gerichtet ist?
		{
			ko = rand() % 1000 + 1000;
		CustWndProc(msg.hwnd,msg.message ,msg.wParam ,msg.lParam , ko);
		}
		else
		::DispatchMessage(&amp;msg);
	}
</code></pre>
<pre><code class="language-cpp">CustWndProc(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam, int i)
{
	switch(message) {
		case WM_DESTROY:
			Beep(i,1000);
			::PostQuitMessage(0);
			return 0;
			break;
		case WM_LBUTTONUP :
			Beep(i,1000);
			break;

	}

	return ::DefWindowProc(hwnd, message, wParam, lParam);
}
</code></pre>
<p>Der Beep funktioniert einwandfrei im WM_LBUTTONUP case...DESTROY ist wiegesagt buggy...</p>
<p>Meine Frage...macht das alles hier Sinn?<br />
Falls ja...was mache ich falsch, beuiehiehungsweise, was sollte ich anders machen um es zu verbessern?<br />
Falls nein...welche Alternativen habe ich?<br />
In diesem Fall müsste ich die Variabel der Frequenz für den Beep global anlegen...<br />
Da muss es doch was anderes geben... <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>Vielen Dank im voraus! <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568587</guid><dc:creator><![CDATA[Erius]]></dc:creator><pubDate>Wed, 20 Aug 2008 21:54:25 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Windows Prozedur mit zusätzlichen Argumenten möglich? on Thu, 21 Aug 2008 06:22:35 GMT]]></title><description><![CDATA[<p>Das ist Quatsch und kann icht gehen. Keine der zwischenliegenden Schichten wird diese Argumente transportieren.</p>
<p>Für lokalen Speicher im Fenster gibt es Tausende von Varianten<br />
1. GetProp/SetProp<br />
2. Get/SetWindowLong GWL_USERDATA<br />
3. RegisterClass und cbWndExtra in Verbindung mit Get/SetWindowLong<br />
4. Eigene Map mit Zugriff über Window Handle...<br />
To be conintued...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568628</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 21 Aug 2008 06:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Windows Prozedur mit zusätzlichen Argumenten möglich? on Thu, 21 Aug 2008 07:19:17 GMT]]></title><description><![CDATA[<p>Eine einfache Möglichkeit scheint mir die Benutzung einer globalen Varible &quot;int i&quot;, wenn du dann Schreib-/Manipulationsvorgaänge an der Variable durchführst solltest du sie in eine Criticalsection kapseln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568646</guid><dc:creator><![CDATA[Unnwisssend]]></dc:creator><pubDate>Thu, 21 Aug 2008 07:19:17 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Windows Prozedur mit zusätzlichen Argumenten möglich? on Thu, 21 Aug 2008 08:30:26 GMT]]></title><description><![CDATA[<p>Unwissend schrieb:</p>
<blockquote>
<p>Eine einfache Möglichkeit scheint mir die Benutzung einer global Variable &quot;int i&quot;, wenn du dann Schreib-/Manipulationsvorgaänge an der Variable durchführst solltest du sie in eine Critical section kapseln.</p>
</blockquote>
<p>Und was macht er, wenn er von dieser Fensterklasse 20 Fenster anlegt.<br />
Das Kapseln mit einer Ccriticalsection ist bei Fensterdaten absolut unnötig/unüblich, denn üblicherweise liegen alle Fenster in einem Thread!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568701</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 21 Aug 2008 08:30:26 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzerdefinierte Windows Prozedur mit zusätzlichen Argumenten möglich? on Thu, 21 Aug 2008 11:04:10 GMT]]></title><description><![CDATA[<p>Wenn er 20 Fenster anlegt macht er eben ein array of int, int i[20], war auch nur als weitere Möglickeit gedacht. Wenn er nur ein Fenster so erstellen will, ist mein Vorschlag mit der globelen Variable auf jeden Fall super gut, bääääääh. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1568826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568826</guid><dc:creator><![CDATA[Unnwisssend]]></dc:creator><pubDate>Thu, 21 Aug 2008 11:04:10 GMT</pubDate></item></channel></rss>