<?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[In Thread ein Drawwindow aktualisieren]]></title><description><![CDATA[<p>Ich hab mir einen Dialog gebaut der sehr viele Daten Anzeig .... aber beim Felder füllen friert die Oberfläche komplett ein. Ok ich hab mir überlegt, dass ich das dann evtl über nenn Thread lösen kann, allerdings ist mir nicht ganz klar wie. Es ist eigentlich nur eine Schleife die dann alles blockiert .... sie dauert halt dummerweise relativ lange´und ich würde mir halt noch wünschen dass ich die schleife beim Klick eines buttons verlassen kann.</p>
<p>hab grad den Threadmiteingebaut ..... hab da aber noch so meine probleme.</p>
<pre><code class="language-cpp">//So ruf ich den Thread auf:
m_pThread = AfxBeginThread(Output, LPVOID(this));

//Sp sieht die Methoden aus
UINT
DialogAnalog::Output(LPVOID pParam){

	for (int i = 0; i &lt; mv_data.size(); ++i){
			GotoPosition(i);
			FillFields(i);
			UpdateTime(0,i);
	}

	return 0;

}

das hier ist die Methode die als Thread ausgeführt werden soll, bekomm aber die meldungen dass es net klappt

C:\projekt\mfcdatei\DialogAnalog.cpp(139) : warning C4805: '==' : unsichere Kombination von Typ 'int' mit Typ 'const bool' in einer Operation
C:\projekt\mfcdatei\DialogAnalog.cpp(125) : warning C4101: 'data' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(127) : warning C4101: 'charbuffer' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(184) : warning C4101: 'data' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(186) : warning C4101: 'buffer' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(560) : error C2228: Der linke Teil von '.size' muss eine Klasse/Struktur/Union sein
C:\projekt\mfcdatei\DialogAnalog.cpp(561) : error C2352: 'DialogAnalog::GotoPosition' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
        c:\projekt\mfcdatei\dialoganalog.h(84) : Siehe Deklaration von 'GotoPosition'
C:\projekt\mfcdatei\DialogAnalog.cpp(562) : error C2352: 'DialogAnalog::FillFields' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
        c:\projekt\mfcdatei\dialoganalog.h(82) : Siehe Deklaration von 'FillFields'
C:\projekt\mfcdatei\DialogAnalog.cpp(563) : error C2352: 'DialogAnalog::UpdateTime' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
        c:\projekt\mfcdatei\dialoganalog.h(80) : Siehe Deklaration von 'UpdateTime'
</code></pre>
<p>Cosmixx du meintest doch ich kann auch non Static methoden aufrufen<br />
.... nur wie mit den Fehlermeldungen seh ich da grad keine Möglichkeit.<br />
========================================================================)</p>
<p>nachdem das mit der Nonsatic geschichte funkt, hab ich aber noch ein kleines Problem. In dem Dialog den ich mir da gebastelt hab ist ein kleines OpenGL Fenster eingebaut, das aber durch den Thread seltsamerweise nicht aktualisiert wird. Wenn ich das ohne Thread mach klappts. Ich denk es ist weniger ein OpenGL Problem sondern eher dass ich dem Bild gesondert eine Updateanweisung schicken muss hab aber bisher nicht wirklich was gefunden.<br />
Hier mal der Code der beim Thread ausgeführt wird.</p>
<pre><code class="language-cpp">INT
DialogAnalog::Output(LPVOID pParam){

	DialogAnalog *pDialogAnalog = (DialogAnalog*) pParam;

	for (int i = 0; i &lt; pDialogAnalog-&gt;mv_data.size() &amp;&amp; pDialogAnalog-&gt;m_Interrupt != 1; ++i){
			pDialogAnalog-&gt;GotoPosition(i);
			pDialogAnalog-&gt;FillFields(i);
			pDialogAnalog-&gt;UpdateTime(0,i);
			pDialogAnalog-&gt;UpdateGlWindow();

	}

	return 0;

}
</code></pre>
<p>Hier mal wie ich mir mein GLWindow aufbaue bzw. nutze</p>
<pre><code class="language-cpp">BOOL DialogAnalog::OnInitDialog()
{
	CDialog::OnInitDialog();

    m_Interrupt = 0;

	pclStatic = (CStatic *)GetDlgItem(IDC_OPENGLWIN);
	pclGlView = new CGlView(pclStatic);
//	pclGlView-&gt;SetPixelformat(m_hDC);

	pclGlView-&gt;DrawGLScene();

	return true;

}

void DialogAnalog::OnPaint() 
{

	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&amp;rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
	CDialog::OnPaint();
	}

	CPaintDC dc(this); // device context for painting

	HDC m_hDC;
    m_hDC = ::GetDC(this-&gt;m_hWnd);

    RECT rect;
	GetClientRect(&amp;rect);

    int iWidth = -(rect.right - rect.left);
    int iHeight = rect.top - rect.bottom;

	pclGlView-&gt;OnCreate();
	pclGlView-&gt;ReSizeGLScene(iWidth, iHeight);
	pclGlView-&gt;InitGL();
	pclGlView-&gt;DrawGLScene();

}

void
DialogAnalog::UpdateGlWindow(){

	pclGlView-&gt;size = (float)m_intSlider * 0.005f;
	pclGlView-&gt;DrawGLScene();

}
</code></pre>
<p>Also vielleicht wisst ihr ja warums net geht</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/49137/in-thread-ein-drawwindow-aktualisieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 04:25:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/49137.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Sep 2003 13:27:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In Thread ein Drawwindow aktualisieren on Wed, 17 Sep 2003 08:40:54 GMT]]></title><description><![CDATA[<p>Ich hab mir einen Dialog gebaut der sehr viele Daten Anzeig .... aber beim Felder füllen friert die Oberfläche komplett ein. Ok ich hab mir überlegt, dass ich das dann evtl über nenn Thread lösen kann, allerdings ist mir nicht ganz klar wie. Es ist eigentlich nur eine Schleife die dann alles blockiert .... sie dauert halt dummerweise relativ lange´und ich würde mir halt noch wünschen dass ich die schleife beim Klick eines buttons verlassen kann.</p>
<p>hab grad den Threadmiteingebaut ..... hab da aber noch so meine probleme.</p>
<pre><code class="language-cpp">//So ruf ich den Thread auf:
m_pThread = AfxBeginThread(Output, LPVOID(this));

//Sp sieht die Methoden aus
UINT
DialogAnalog::Output(LPVOID pParam){

	for (int i = 0; i &lt; mv_data.size(); ++i){
			GotoPosition(i);
			FillFields(i);
			UpdateTime(0,i);
	}

	return 0;

}

das hier ist die Methode die als Thread ausgeführt werden soll, bekomm aber die meldungen dass es net klappt

C:\projekt\mfcdatei\DialogAnalog.cpp(139) : warning C4805: '==' : unsichere Kombination von Typ 'int' mit Typ 'const bool' in einer Operation
C:\projekt\mfcdatei\DialogAnalog.cpp(125) : warning C4101: 'data' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(127) : warning C4101: 'charbuffer' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(184) : warning C4101: 'data' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(186) : warning C4101: 'buffer' : Unreferenzierte lokale Variable
C:\projekt\mfcdatei\DialogAnalog.cpp(560) : error C2228: Der linke Teil von '.size' muss eine Klasse/Struktur/Union sein
C:\projekt\mfcdatei\DialogAnalog.cpp(561) : error C2352: 'DialogAnalog::GotoPosition' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
        c:\projekt\mfcdatei\dialoganalog.h(84) : Siehe Deklaration von 'GotoPosition'
C:\projekt\mfcdatei\DialogAnalog.cpp(562) : error C2352: 'DialogAnalog::FillFields' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
        c:\projekt\mfcdatei\dialoganalog.h(82) : Siehe Deklaration von 'FillFields'
C:\projekt\mfcdatei\DialogAnalog.cpp(563) : error C2352: 'DialogAnalog::UpdateTime' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
        c:\projekt\mfcdatei\dialoganalog.h(80) : Siehe Deklaration von 'UpdateTime'
</code></pre>
<p>Cosmixx du meintest doch ich kann auch non Static methoden aufrufen<br />
.... nur wie mit den Fehlermeldungen seh ich da grad keine Möglichkeit.<br />
========================================================================)</p>
<p>nachdem das mit der Nonsatic geschichte funkt, hab ich aber noch ein kleines Problem. In dem Dialog den ich mir da gebastelt hab ist ein kleines OpenGL Fenster eingebaut, das aber durch den Thread seltsamerweise nicht aktualisiert wird. Wenn ich das ohne Thread mach klappts. Ich denk es ist weniger ein OpenGL Problem sondern eher dass ich dem Bild gesondert eine Updateanweisung schicken muss hab aber bisher nicht wirklich was gefunden.<br />
Hier mal der Code der beim Thread ausgeführt wird.</p>
<pre><code class="language-cpp">INT
DialogAnalog::Output(LPVOID pParam){

	DialogAnalog *pDialogAnalog = (DialogAnalog*) pParam;

	for (int i = 0; i &lt; pDialogAnalog-&gt;mv_data.size() &amp;&amp; pDialogAnalog-&gt;m_Interrupt != 1; ++i){
			pDialogAnalog-&gt;GotoPosition(i);
			pDialogAnalog-&gt;FillFields(i);
			pDialogAnalog-&gt;UpdateTime(0,i);
			pDialogAnalog-&gt;UpdateGlWindow();

	}

	return 0;

}
</code></pre>
<p>Hier mal wie ich mir mein GLWindow aufbaue bzw. nutze</p>
<pre><code class="language-cpp">BOOL DialogAnalog::OnInitDialog()
{
	CDialog::OnInitDialog();

    m_Interrupt = 0;

	pclStatic = (CStatic *)GetDlgItem(IDC_OPENGLWIN);
	pclGlView = new CGlView(pclStatic);
//	pclGlView-&gt;SetPixelformat(m_hDC);

	pclGlView-&gt;DrawGLScene();

	return true;

}

void DialogAnalog::OnPaint() 
{

	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&amp;rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
	CDialog::OnPaint();
	}

	CPaintDC dc(this); // device context for painting

	HDC m_hDC;
    m_hDC = ::GetDC(this-&gt;m_hWnd);

    RECT rect;
	GetClientRect(&amp;rect);

    int iWidth = -(rect.right - rect.left);
    int iHeight = rect.top - rect.bottom;

	pclGlView-&gt;OnCreate();
	pclGlView-&gt;ReSizeGLScene(iWidth, iHeight);
	pclGlView-&gt;InitGL();
	pclGlView-&gt;DrawGLScene();

}

void
DialogAnalog::UpdateGlWindow(){

	pclGlView-&gt;size = (float)m_intSlider * 0.005f;
	pclGlView-&gt;DrawGLScene();

}
</code></pre>
<p>Also vielleicht wisst ihr ja warums net geht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354590</guid><dc:creator><![CDATA[Jason_Frost]]></dc:creator><pubDate>Wed, 17 Sep 2003 08:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to In Thread ein Drawwindow aktualisieren on Tue, 16 Sep 2003 13:50:45 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ja mit nem Thread sollte es gehen, schau mal hier im Forum. Da gibts viele, die was über Threads wissen wollten.</p>
<p>Als kleiner Anreiz:</p>
<p>Mit<br />
CWinThread * m_pThread=AfxBeginThread(ThreadProc, LPVOID(this));<br />
den Thread aufrufen, dies Thread-Methode muss so deklariert sein:<br />
static UINT ThreadProc(LPVOID pParam);</p>
<p>Zwar muss die eigentliche Thread-Methode static deklariert sein, du kannst aber eine non-static Methode aus der Thread-Methode heraus aufrufen. <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>
<p>Cosmixx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354611</guid><dc:creator><![CDATA[Cosmixx]]></dc:creator><pubDate>Tue, 16 Sep 2003 13:50:45 GMT</pubDate></item><item><title><![CDATA[Reply to In Thread ein Drawwindow aktualisieren on Tue, 16 Sep 2003 13:53:44 GMT]]></title><description><![CDATA[<p>Threads ist der korrekte Lösungsansatz.<br />
Kannst direkt in die FAQ schauen, dort gibts ne Lösung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354618</guid><dc:creator><![CDATA[C-O-M-M-A-N-D-E-R]]></dc:creator><pubDate>Tue, 16 Sep 2003 13:53:44 GMT</pubDate></item><item><title><![CDATA[Reply to In Thread ein Drawwindow aktualisieren on Tue, 16 Sep 2003 15:51:40 GMT]]></title><description><![CDATA[<p>cool danke ;o) dann zieh ich mir mal die faq´s rein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354711</guid><dc:creator><![CDATA[Jason_Frost]]></dc:creator><pubDate>Tue, 16 Sep 2003 15:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to In Thread ein Drawwindow aktualisieren on Tue, 16 Sep 2003 19:02:52 GMT]]></title><description><![CDATA[<p><a href="http://www.henkessoft.de/mfc_einsteigerbuch_kapitel17.htm" rel="nofollow">http://www.henkessoft.de/mfc_einsteigerbuch_kapitel17.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/354896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354896</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Tue, 16 Sep 2003 19:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to In Thread ein Drawwindow aktualisieren on Wed, 17 Sep 2003 09:30:38 GMT]]></title><description><![CDATA[<p>Nur noch eine kurze Anmerkung, in den Methoden die man dann aufruft sollte kein UpdateData aufgerufen werden ....... bei mir ist dann einfach das Programm abgeraucht ;o) nur falls jemand mal das selbe Problem hat.</p>
<p>.... nu hab ich haber schon wieder ein anderes Problem ..... hab ich oben angehängt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/355081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355081</guid><dc:creator><![CDATA[Jason_Frost]]></dc:creator><pubDate>Wed, 17 Sep 2003 09:30:38 GMT</pubDate></item></channel></rss>