<?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[ocx-Problem]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit einem selbstprogrammierten *.ocx-Steuerelement.<br />
Das Control exportiert einige Funktionen, von denen einige einen (Zahlen)-Wert Zurückgeben, andere nur Aktionen ausführen wie Neuberechnungen und Neuzeichnen des Steuerelements. Im Testcontainer läuft alles gut.</p>
<p>Wenn ich das Control jedoch in Visual Basic (6.0 oder .NET) oder in eine C++/MFC Anwendung (dialogbasiert) einbinde, bekomme ich folgendes Problem:<br />
Ich rufe zunächst eine Funktion1 des Steuerelements auf, die keinen Wert zurückgibt und anschließend eine Funktion2, die einen (neuberechneten) Wert zurückgeben soll.<br />
Beide Funktionen werden nacheinander im selben Ereignis (Button_Klick) aufgerufen.<br />
Die zweite Funktion liefert den gewünschten Wert jedoch erst beim zweiten Aufruf zurück. Ich muß also den Button in der Anwendung, die das Conrol einbindet, zweimal anklicken, bevor der Wert aus dem Control erscheint.</p>
<p>In VB ließ sich das durch einen Aufruf von DoEvents zwischen den beiden Funktionen umschiffen, dann reicht ein einziger Klick auf den besagten Button.</p>
<p>Hat vielleicht jemand eine Erklärung für dieses Verhalten? Oder gibt es in C++/MFC eine analoge Funktion zu DoEvents?</p>
<p>Hier noch etwas Code. Hier die Funktionen im Control</p>
<p>Funktion1:</p>
<pre><code class="language-cpp">void CMSCtrlCtrl::FindPeaks() 
{
	// ZU ERLEDIGEN: Fügen Sie hier den Code für Ihre Dispatch-Behandlungsroutine ein
Integr=true; tRSet=true; DrwLbl=2;
FPkM.RemoveAll(); Areas.RemoveAll(); //secperpoint=1;
Invalidate();
return;
}
</code></pre>
<p>Funktion2:</p>
<pre><code class="language-cpp">[code]
float CMSCtrlCtrl::GetPeakArea(long PeakNr) 
{
	// ZU ERLEDIGEN: Fügen Sie hier den Code für Ihre Dispatch-Behandlungsroutine ein
if (Areas.GetSize()&gt;PeakNr)
	return Areas[PeakNr];
else return 0.0f;
}
</code></pre>
<p>Aufruf in C++/MFC Projekt:</p>
<pre><code class="language-cpp">void CTestOCXDlg::OnBTNintegr() 
{
	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
m_ms.FindPeaks();    //m_ms ist Membervariable des Steuerelements
float a = m_ms.GetPeakArea(1);  //a bekommt den Wert erst beim zweiten Klick auf den Button
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/171284/ocx-problem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 02:50:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171284.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Jan 2007 09:24:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ocx-Problem on Wed, 24 Jan 2007 09:24:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit einem selbstprogrammierten *.ocx-Steuerelement.<br />
Das Control exportiert einige Funktionen, von denen einige einen (Zahlen)-Wert Zurückgeben, andere nur Aktionen ausführen wie Neuberechnungen und Neuzeichnen des Steuerelements. Im Testcontainer läuft alles gut.</p>
<p>Wenn ich das Control jedoch in Visual Basic (6.0 oder .NET) oder in eine C++/MFC Anwendung (dialogbasiert) einbinde, bekomme ich folgendes Problem:<br />
Ich rufe zunächst eine Funktion1 des Steuerelements auf, die keinen Wert zurückgibt und anschließend eine Funktion2, die einen (neuberechneten) Wert zurückgeben soll.<br />
Beide Funktionen werden nacheinander im selben Ereignis (Button_Klick) aufgerufen.<br />
Die zweite Funktion liefert den gewünschten Wert jedoch erst beim zweiten Aufruf zurück. Ich muß also den Button in der Anwendung, die das Conrol einbindet, zweimal anklicken, bevor der Wert aus dem Control erscheint.</p>
<p>In VB ließ sich das durch einen Aufruf von DoEvents zwischen den beiden Funktionen umschiffen, dann reicht ein einziger Klick auf den besagten Button.</p>
<p>Hat vielleicht jemand eine Erklärung für dieses Verhalten? Oder gibt es in C++/MFC eine analoge Funktion zu DoEvents?</p>
<p>Hier noch etwas Code. Hier die Funktionen im Control</p>
<p>Funktion1:</p>
<pre><code class="language-cpp">void CMSCtrlCtrl::FindPeaks() 
{
	// ZU ERLEDIGEN: Fügen Sie hier den Code für Ihre Dispatch-Behandlungsroutine ein
Integr=true; tRSet=true; DrwLbl=2;
FPkM.RemoveAll(); Areas.RemoveAll(); //secperpoint=1;
Invalidate();
return;
}
</code></pre>
<p>Funktion2:</p>
<pre><code class="language-cpp">[code]
float CMSCtrlCtrl::GetPeakArea(long PeakNr) 
{
	// ZU ERLEDIGEN: Fügen Sie hier den Code für Ihre Dispatch-Behandlungsroutine ein
if (Areas.GetSize()&gt;PeakNr)
	return Areas[PeakNr];
else return 0.0f;
}
</code></pre>
<p>Aufruf in C++/MFC Projekt:</p>
<pre><code class="language-cpp">void CTestOCXDlg::OnBTNintegr() 
{
	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
m_ms.FindPeaks();    //m_ms ist Membervariable des Steuerelements
float a = m_ms.GetPeakArea(1);  //a bekommt den Wert erst beim zweiten Klick auf den Button
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1215764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215764</guid><dc:creator><![CDATA[Hajot]]></dc:creator><pubDate>Wed, 24 Jan 2007 09:24:09 GMT</pubDate></item><item><title><![CDATA[Reply to ocx-Problem on Fri, 26 Jan 2007 13:51:25 GMT]]></title><description><![CDATA[<p>o.k., scheint nicht so trivial zu sein.</p>
<p>Gibt es denn keine Möglichkeit in C++/MFC, um anstehende Nachrichten abarbeiten zu lassen (Das tut meines Wissens nach DoEvents in Visual Basic)?</p>
<p>Hajot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217597</guid><dc:creator><![CDATA[Hajot]]></dc:creator><pubDate>Fri, 26 Jan 2007 13:51:25 GMT</pubDate></item><item><title><![CDATA[Reply to ocx-Problem on Fri, 26 Jan 2007 13:56:54 GMT]]></title><description><![CDATA[<p><a href="http://www.mpdvc.de/html.htm#Q75" rel="nofollow">http://www.mpdvc.de/html.htm#Q75</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217603</guid><dc:creator><![CDATA[....]]></dc:creator><pubDate>Fri, 26 Jan 2007 13:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to ocx-Problem on Fri, 26 Jan 2007 14:29:58 GMT]]></title><description><![CDATA[<p>Vielen Dank für den Link.<br />
Funktioniert wunderbar!<br />
Auch wenn der eigentliche Fehler wohl im Quellcode des Steuerelements liegt, lässt sich das Problem so erst einmal umgehen.<br />
Nochmals Dank!</p>
<p>Hajot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217629</guid><dc:creator><![CDATA[Hajot]]></dc:creator><pubDate>Fri, 26 Jan 2007 14:29:58 GMT</pubDate></item></channel></rss>