<?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[Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird?]]></title><description><![CDATA[<p>Also ich schreibe für ein Programm, was ursprünglich für die Konsole geschrieben wurde, ein Oberfläche. Jetzt bin ich gerade dabei die &quot;cout&quot; Nachrichten umzuschreiben. Und zwar habe ich ein Fenster erstellt, indem ich jetzt die Nachrichten genauso wie vorher in der Konsole ausgeben möchte. Ich habe also eine Prozedur für das Hauptfenster und eine für das Ausgabefenster. Noch dazu gibt es ganz viele andere Funktionen, die das eigentliche Berechnugsprogramm darstellen. Die &quot;Hauptfunktion&quot; des Berechnungsprogramms ruft logischerweise all die anderen Berechnungsfunktionen auf. Jetzt möchte ich aus einer dieser Berechnungsfunktionen eine Nachricht an die Prozedur für das Ausgabefenster schicken à la &quot;gib jetzt irgendwas aus&quot;.<br />
Problem: dazu brauche ich ein Handle auf das Fenster, was natürlich in der Berechnungsfunktion nicht bekannt ist. Und ein &quot;globales Handle&quot; hab ich auch noch nicht gesehen...geht das überhaupt? <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 />
Hat jemand eine Idee, wie ich das Lösen könnte? Wenn jemand meinen Ausführungen nicht ganz folgen kann, erklär ichs auch gern nochmal <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 versuch das ganze mal mit etwas Code zu untermalen:</p>
<pre><code class="language-cpp">//Prozedur für das Hauptfenster
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     .
     .
     .
   case WM_CREATE:
        {
	 hChild = CreateWindowEx(WS_EX_CLIENTEDGE,
			                 lpszChildName, 
			                 NULL, 
			                 WS_CHILD,
			                 500,30,300,300,
			                 hWnd,
			                 NULL,
			                 NULL,
			                 NULL);
        }
   case WM_COMMAND:
        {
            if(lParam == (LPARAM)hButtonStart)
                if(HIWORD(wParam) == BN_CLICKED)
                {
                                        //startet die eigentliche Berechnung
                                          start();
                }
        }
     .
     .
     .
   return 0;
}
//Prozedur für das Ausgabefenster   (hChild)
LRESULT CALLBACK ChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
         {
         case WM_IRGENDWAS:
              {
                   //hier steht dann Ausgabeanweisung...
              }
            .
            .
            .
         }
         return DefWindowProc(hWnd, message, wParam, lParam);
}
//Die Berechnung
//Der Code ist unwesentlich, wichtig ist nur, dass die Nachricht aus einer
//For-Schleife gesendet werden soll...
int start() 
{
       register int t,s;

       char   tmp[5];
       double Energy;

       Mesh();
       Time();
       Initialisation();
       TemperatureCoefficients();

       for (t=1; t&lt;=N5; t++) 
       { 
              IntensityDistribution(t);
              ComputeEnergy(t);

              s=Temperature();
              //hier soll jedesmal die bewusste
              //Nachricht gesendet werden:
              SendMessage(hChild, WM_IRGENDWAS,0,0);

              sprintf(tmp,&quot;%d&quot;,t);
              string number=tmp;
              if(!SaveData(&quot;./data/main&quot;+number+&quot;.dat&quot;))
              return -1;
       }
       video();
       return 0;
}
</code></pre>
<p>Vielleicht kann mir ja jemand weiterhelfen. Ich bin gespannt <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/topic/143952/handle-auf-ein-fenster-dass-in-einer-anderen-funktion-benutzt-wird</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 19:45:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143952.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Apr 2006 08:30:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 08:39:23 GMT]]></title><description><![CDATA[<p>Also ich schreibe für ein Programm, was ursprünglich für die Konsole geschrieben wurde, ein Oberfläche. Jetzt bin ich gerade dabei die &quot;cout&quot; Nachrichten umzuschreiben. Und zwar habe ich ein Fenster erstellt, indem ich jetzt die Nachrichten genauso wie vorher in der Konsole ausgeben möchte. Ich habe also eine Prozedur für das Hauptfenster und eine für das Ausgabefenster. Noch dazu gibt es ganz viele andere Funktionen, die das eigentliche Berechnugsprogramm darstellen. Die &quot;Hauptfunktion&quot; des Berechnungsprogramms ruft logischerweise all die anderen Berechnungsfunktionen auf. Jetzt möchte ich aus einer dieser Berechnungsfunktionen eine Nachricht an die Prozedur für das Ausgabefenster schicken à la &quot;gib jetzt irgendwas aus&quot;.<br />
Problem: dazu brauche ich ein Handle auf das Fenster, was natürlich in der Berechnungsfunktion nicht bekannt ist. Und ein &quot;globales Handle&quot; hab ich auch noch nicht gesehen...geht das überhaupt? <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 />
Hat jemand eine Idee, wie ich das Lösen könnte? Wenn jemand meinen Ausführungen nicht ganz folgen kann, erklär ichs auch gern nochmal <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 versuch das ganze mal mit etwas Code zu untermalen:</p>
<pre><code class="language-cpp">//Prozedur für das Hauptfenster
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     .
     .
     .
   case WM_CREATE:
        {
	 hChild = CreateWindowEx(WS_EX_CLIENTEDGE,
			                 lpszChildName, 
			                 NULL, 
			                 WS_CHILD,
			                 500,30,300,300,
			                 hWnd,
			                 NULL,
			                 NULL,
			                 NULL);
        }
   case WM_COMMAND:
        {
            if(lParam == (LPARAM)hButtonStart)
                if(HIWORD(wParam) == BN_CLICKED)
                {
                                        //startet die eigentliche Berechnung
                                          start();
                }
        }
     .
     .
     .
   return 0;
}
//Prozedur für das Ausgabefenster   (hChild)
LRESULT CALLBACK ChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
         {
         case WM_IRGENDWAS:
              {
                   //hier steht dann Ausgabeanweisung...
              }
            .
            .
            .
         }
         return DefWindowProc(hWnd, message, wParam, lParam);
}
//Die Berechnung
//Der Code ist unwesentlich, wichtig ist nur, dass die Nachricht aus einer
//For-Schleife gesendet werden soll...
int start() 
{
       register int t,s;

       char   tmp[5];
       double Energy;

       Mesh();
       Time();
       Initialisation();
       TemperatureCoefficients();

       for (t=1; t&lt;=N5; t++) 
       { 
              IntensityDistribution(t);
              ComputeEnergy(t);

              s=Temperature();
              //hier soll jedesmal die bewusste
              //Nachricht gesendet werden:
              SendMessage(hChild, WM_IRGENDWAS,0,0);

              sprintf(tmp,&quot;%d&quot;,t);
              string number=tmp;
              if(!SaveData(&quot;./data/main&quot;+number+&quot;.dat&quot;))
              return -1;
       }
       video();
       return 0;
}
</code></pre>
<p>Vielleicht kann mir ja jemand weiterhelfen. Ich bin gespannt <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/1036518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036518</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Thu, 13 Apr 2006 08:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 08:46:13 GMT]]></title><description><![CDATA[<p>Mach dsa fenster handle einfach eine globale variable dann kannst du es in jeder funktion benutzen, das geht schon <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="😉"
    /> oder schreib dir gleich eine bequemere funktion log() die formatierten text ins log fenster schreibt so wie printf, dann musst du das fensterhandle nur in der funktion nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1036539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036539</guid><dc:creator><![CDATA[Lobster]]></dc:creator><pubDate>Thu, 13 Apr 2006 08:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 08:47:00 GMT]]></title><description><![CDATA[<p>schreibe doch einen eigenen streambuffer der auf das hwnd die nachricht umleitet, somit bräuchtest die cout nicht umleiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1036540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036540</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 13 Apr 2006 08:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 09:00:34 GMT]]></title><description><![CDATA[<p>@ Lobster: Ja stimmt, wobei ich das dann doch als die Notlösung nehmen würde oder?<br />
@ miller_m: Ich hab noch nie einen Streambuffer geschrieben, aber es klingt interessant und so, als ob es nützlich wäre ( und für das cout-Problem liegt der Sinn auf der Hand ). Ich hab grad die Suche und gogle mal gefragt, aber so richtig etwas zum Streambuffer wollten die mir nicht verraten. Hast du einen Tip, wo ich mir was dazu anlesen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1036553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036553</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Thu, 13 Apr 2006 09:00:34 GMT</pubDate></item><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 09:33:48 GMT]]></title><description><![CDATA[<p>Frage an die, die etwas mehr Ahnung haben als ich: gibt es etwas dagegen einzuwenden, der Funktion start beim Aufruf das Handle auf das entsprechende Fenster zu übergeben? Dann funktioniert es nämlich, hab ich gerade festgestellt. Ich hatte irgendwie gedacht, mit einem Handle würde das nicht funktionieren. Kann man sich ein Handle genauso wie eine beliebige Variable vorstellen? Oder wo ist der Unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1036580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036580</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Thu, 13 Apr 2006 09:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 09:37:47 GMT]]></title><description><![CDATA[<p>bsp: <a href="http://www.olaf-groeger.de/prog_str.html" rel="nofollow">http://www.olaf-groeger.de/prog_str.html</a></p>
<p>hat mich jetzt so stark interessiert das ich schnell was geschrieben habe.<br />
denk dran quick&amp;dirty, nicht optimiert, usw usw ist nur zur verdeutlichung.</p>
<pre><code class="language-cpp">class windowsguilogstream : public std::streambuf
{
	public:
		explicit windowsguilogstream(HWND hwnd)
		:	m_hWnd(hwnd)
		{ }

		virtual ~windowsguilogstream()		{ sync(); }

	protected:
		int overflow(int c)
		{
			if(!traits_type::eq_int_type(c, traits_type::eof()))
			{
				if(pbase() == epptr())
                       m_strBuffer += c;
				else
					sputc(c);
			}

			return traits_type::not_eof(c);
		}

		int sync()
		{
			int nLen = (SendMessage(m_hWnd, WM_GETTEXTLENGTH, 0, 0)) + 1;

			char *pszTemp = new char[nLen + m_strBuffer.size()];

			SendMessage(m_hWnd, WM_GETTEXT, (WPARAM)nLen, (LPARAM)pszTemp);

			strncat(pszTemp, m_strBuffer.c_str(), m_strBuffer.size());

			SendMessage(m_hWnd, WM_SETTEXT, 0, (LPARAM)pszTemp);

			delete [] pszTemp;
			m_strBuffer.clear();

			return 0;
		}

	private:
		HWND			m_hWnd;
		std::string     m_strBuffer;
};

// ---------
case WM_CREATE:
    hEdit1 = CreateWindow(&quot;edit&quot;, // ...

    // ich weis memleak, hier bietet sich nen smartpointer an
    std::cout.rdbuf(new util::windowsguilogstream(hEdit1));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1036585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036585</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 13 Apr 2006 09:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 09:41:20 GMT]]></title><description><![CDATA[<p>BeNNeR schrieb:</p>
<blockquote>
<p>Frage an die, die etwas mehr Ahnung haben als ich: gibt es etwas dagegen einzuwenden, der Funktion start beim Aufruf das Handle auf das entsprechende Fenster zu übergeben?</p>
</blockquote>
<p>keine einwände</p>
<p>BeNNeR schrieb:</p>
<blockquote>
<p>Kann man sich ein Handle genauso wie eine beliebige Variable vorstellen?</p>
</blockquote>
<p>ja</p>
<p>BeNNeR schrieb:</p>
<blockquote>
<p>Oder wo ist der Unterschied?</p>
</blockquote>
<p>gibt in der regel keinen</p>
<p>ps: vergiss meinen obrigen code und mache es so, habe zu kompliziert gedacht <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/1036587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036587</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 13 Apr 2006 09:41:20 GMT</pubDate></item><item><title><![CDATA[Reply to Handle auf ein Fenster, dass in einer anderen Funktion benutzt wird? on Thu, 13 Apr 2006 10:15:25 GMT]]></title><description><![CDATA[<p>Danke für deine Antworten. Und ich bin offen gestanden froh, dass meine Variante in diesem Fall sogar günstiger ist. Ich hatte mir nämlich fest vorgenommen, mich mit deinem Code auseinanderzusetzen, wenn du dir schon die Mühe gemacht hast, verstanden hab ich nämlich davon auf den ersten Blick gar nichts... <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="😃"
    /> Ist ja jetzt nicht mehr nötig.<br />
Naja..ein blindes Huhn findet auch mal ein Korn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1036610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1036610</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Thu, 13 Apr 2006 10:15:25 GMT</pubDate></item></channel></rss>