<?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[MFC]]></title><description><![CDATA[Fragen zu den MFC (Microsoft Foundation Classes). WinForms haben mit MFC übrigens nichts zu tun.]]></description><link>https://www.c-plusplus.net/forum/category/19</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 11:58:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/category/19.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Apr 2026 13:28:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Neues von MFC ?]]></title><description><![CDATA[Hallo zusammen, mal wieder. Ich interessiere mich für neue Features von C++ MFC nach Visual C++ 60. Bis dahin habe ich viele Bücher, darüber hinaus aber leider nicht. Bei Visual C++ 2010 wurden neue Klassen eingeführt, deren Namen mit &quot;CMFC&quot; beginnen. Deren Verwendung hätte ich auch gern beschrieben. Auch mit Google bin ich nicht weitergekommen. Eigentlich arbeite ich mit C#, habe aber noch Altlasten. Ganz tot scheint MFC nicht zu sein ! ? Habt Ihr Literaturempfehlungen bzw Links ?
]]></description><link>https://www.c-plusplus.net/forum/topic/355455/neues-von-mfc</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355455/neues-von-mfc</guid><dc:creator><![CDATA[biter]]></dc:creator><pubDate>Fri, 10 Apr 2026 13:28:11 GMT</pubDate></item><item><title><![CDATA[Activate CMFCPropertySheet Application]]></title><description><![CDATA[Hi DocShoe,
vielen Dank für Deinen Beitrag!
Leider funktioniert das bei mir nicht. Der Tastaturfocus ist/bleibt woanders. Das kann der Desktop sein, oder ein anderes unbeteiligtes Programm.
Wenn ich meinen Code so ergänze
DWORD dwForegroundThread = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL);
DWORD dwCurrentThread = ::GetCurrentThreadId();
if (dwForegroundThread != dwCurrentThread) {
    if (AttachThreadInput(dwForegroundThread, dwCurrentThread, TRUE)) {
          this-&gt;SetWindowPos(&amp;CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
          this-&gt;SetWindowPos(&amp;CWnd::wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

          COXMessageBoxDialog dlgMessageBox(this, _T(&quot;Einen Moment bitte&quot;), _T(&quot;DTPdfQuery&quot;), MB_NO_SOUND);
          dlgMessageBox.SetTimeout(1, FALSE, TRUE);
          dlgMessageBox.DoModal();

          AttachThreadInput(dwForegroundThread, dwCurrentThread, FALSE);
     }
}


dann funktioniert das mit der Übernahme des Tastaturfocus. Die MessageBox hat eine Lebenszeit von 1ms und erscheint nicht (bemerkbar) auf dem Bildschirm. Das habe ich schon einige Wochen auf unsere diverse TerminalServer2019  am laufen. Nur diese Vorgehensweise gefällt mir nicht so gut.
Nochmals danke für Deine Hilfe
-Uwe
]]></description><link>https://www.c-plusplus.net/forum/topic/355424/activate-cmfcpropertysheet-application</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355424/activate-cmfcpropertysheet-application</guid><dc:creator><![CDATA[Uwe Heyer]]></dc:creator><pubDate>Wed, 07 Jan 2026 17:48:37 GMT</pubDate></item><item><title><![CDATA[CString Anführungszeichen]]></title><description><![CDATA[@Th69 sagte in CString Anführungszeichen:

Und hättest du uns gleich dein konkretes Problem beschrieben, hätten wir dir schneller und besser helfen können...

This!
]]></description><link>https://www.c-plusplus.net/forum/topic/355270/cstring-anführungszeichen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355270/cstring-anführungszeichen</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 03 Jun 2025 07:45:52 GMT</pubDate></item><item><title><![CDATA[Suche im CTreeCtrl]]></title><description><![CDATA[Du hast recht, damit wird nur der HTML-Code des Artikels heruntergeladen (anscheinend gibt es diese Dateien nicht mehr bei Codeproject - oder nicht im richtigen Pfad).
Bei den funktionierenden SourceCode/Demos-Links lauten die Adressen auch jeweils https://www.codeproject.com/KB/tree/... (und nicht https://www.codeproject.com/Articles/...)
Auch eine manuelle Änderung der Adressen auf
https://www.codeproject.com/KB/tree/2340/colortreectrl_src.zip
https://www.codeproject.com/KB/tree/2340/colortreectrl_demo.zip
führt nur zu einer Fehlermeldung.
Dann probiere mal die Links zu den anderen CodeProject-Seiten (auch die erste funktioniert nicht, aber die anderen beiden).
]]></description><link>https://www.c-plusplus.net/forum/topic/355204/suche-im-ctreectrl</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355204/suche-im-ctreectrl</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 15 Mar 2025 08:28:08 GMT</pubDate></item><item><title><![CDATA[Dialog aus dynamisch geladener DLL erzeugen (WinCE6)]]></title><description><![CDATA[@DNKpp sagte in Dialog aus dynamisch geladener DLL erzeugen (WinCE6):

Allerdings sagt CDialog::Create nichts darüber aus, ob sie einen Error-Code setzt oder nicht. Ich würde daher davon ausgehen, dass sie es nicht tut.

Erstmal Danke für dein Feedback. Laut Google kann ich mit &quot;GetLastError&quot; die fehler detail bei &quot;Create&quot; auslesen, habe auch schon bewußt fehler provoziert um zu schaun ob da was sinnvolles kommt.
@DNKpp sagte in Dialog aus dynamisch geladener DLL erzeugen (WinCE6):

Da du scheinbar irgendwelche funktion-Pointer ansprichst, ist das für mich schwierig genau nachzuvollziehen.

hinter den func-ptr sind eben die die externen dll api funktionen, also die instanzierung des in der dll verpackten Dialoges.
CDialog* CreateClient(CWnd* pParent)
 {
	 CDialog * _pDepolyDlg = new CTestDlg();

	return _pDepolyDlg;
 }

void DestroyClient(CDialog* pDlgClient)
{
	delete pDlgClient;
}

UINT GetDialogID()
{
	return CTestDlg::IDD;
}

]]></description><link>https://www.c-plusplus.net/forum/topic/355182/dialog-aus-dynamisch-geladener-dll-erzeugen-wince6</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355182/dialog-aus-dynamisch-geladener-dll-erzeugen-wince6</guid><dc:creator><![CDATA[SoIntMan]]></dc:creator><pubDate>Mon, 13 Jan 2025 06:03:17 GMT</pubDate></item><item><title><![CDATA[Handler für Symbolleiste]]></title><description><![CDATA[Ich verstehe nicht ganz was eine CallbackMessage ist, mit von Hand einrichten meine ich folgendes:
afx_msg void OnErsetzen();  // in der HeaderDatei
			
BEGIN_MESSAGE_MAP(CGLispView, CEditView) // in der cpp Datei
			...
ON_COMMAND(ID_ERSETZEN, OnErsetzen) // ID_ERSETZEN ist die ID von der Schalfläche
			...
END_MESSAGE_MAP()

void CGLispView::OnErsetzen() 
{
				....
}

Das geht schon, aber umständlich ....
]]></description><link>https://www.c-plusplus.net/forum/topic/355154/handler-für-symbolleiste</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355154/handler-für-symbolleiste</guid><dc:creator><![CDATA[biter]]></dc:creator><pubDate>Mon, 02 Dec 2024 10:30:37 GMT</pubDate></item><item><title><![CDATA[pDC-&gt;SetTextColor geht nicht mehr in OnCtlColor(..) - Visual Studio 2019]]></title><description><![CDATA[Hier hat im Jahre 2011 mal jemand als Alternative vorgeschlagen, stattdessen Rich Text Markup zu verwenden. Wäre natürlich ein größerer Eingriff, nämlich völlig andere Vorgehensweise...
]]></description><link>https://www.c-plusplus.net/forum/topic/355139/pdc-settextcolor-geht-nicht-mehr-in-onctlcolor-visual-studio-2019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355139/pdc-settextcolor-geht-nicht-mehr-in-onctlcolor-visual-studio-2019</guid><dc:creator><![CDATA[cpr]]></dc:creator><pubDate>Sat, 16 Nov 2024 17:17:39 GMT</pubDate></item><item><title><![CDATA[Visual Studio C++: Problem mit Dialog Eingabe-Feld]]></title><description><![CDATA[@jbaben Ich vermute, dass du nach MFC Möglichkeiten gesucht hast, oder nach Visual C++ oder so.
Ich würde dir empfehlen, nach C++ Lösungen zu suchen, sobald es nicht mehr um irgendwelche Fenster geht. Die C++ Standard Library ist sehr mächtig (https://en.cppreference.com/w/) und bietet für vieles angenehme Lösungen.
]]></description><link>https://www.c-plusplus.net/forum/topic/355110/visual-studio-c-problem-mit-dialog-eingabe-feld</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355110/visual-studio-c-problem-mit-dialog-eingabe-feld</guid><dc:creator><![CDATA[Schlangenmensch]]></dc:creator><pubDate>Mon, 04 Nov 2024 14:10:56 GMT</pubDate></item><item><title><![CDATA[Alte MFC Anwendung auf GDI+ umstellen]]></title><description><![CDATA[Die zu TPenMode äquivalente Liste findet man in der WinAPI-Doku z.B. in BitBlt (s. unter &quot;Parameters: [in] rop&quot;).
Dies nennt sich &quot;Raster Operation&quot; (ROP).
Mit MFC kannst du dafür die Funktion CDC::SetROP2 benutzen.
]]></description><link>https://www.c-plusplus.net/forum/topic/355084/alte-mfc-anwendung-auf-gdi-umstellen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355084/alte-mfc-anwendung-auf-gdi-umstellen</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 22 Sep 2024 11:06:57 GMT</pubDate></item><item><title><![CDATA[Fenster wirklich neu zeichnen]]></title><description><![CDATA[@elmut19 sagte in Fenster wirklich neu zeichnen:

Wer kennt das Messaging schon komplett.

Die KI kann so etwas bestens.
]]></description><link>https://www.c-plusplus.net/forum/topic/355040/fenster-wirklich-neu-zeichnen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355040/fenster-wirklich-neu-zeichnen</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sat, 24 Aug 2024 10:58:14 GMT</pubDate></item><item><title><![CDATA[Grau]]></title><description><![CDATA[@Th69 sagte in Grau:

Du brauchst doch nur per &quot;Find &amp; Replace&quot; alle &quot;CWnd&quot; (bzw. &quot;: CWnd&quot;) durch die neue Basisklasse ersetzen (bzw. eine eigene Basisklasse dafür erzeugen, falls noch Anpassungen im Konstruktor vorgenommen werden müssen).

Vielleicht auch erstmal zur Probe mit -DCWnd=NeueKlasse kompilieren und schauen, was einen erwarten würde .
Edit: Ja, vielleicht doch keine so elegante Idee wegen eingebundener Header, die CWnd deklarieren/definieren. Zu schnell geantwortet 
]]></description><link>https://www.c-plusplus.net/forum/topic/354673/grau</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354673/grau</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Thu, 27 Jun 2024 16:55:42 GMT</pubDate></item><item><title><![CDATA[Neuronal Network mit Genetic Algorithmus]]></title><description><![CDATA[Ja, das stimmt. Einfaches NN ist easy.
constexpr int INPUT_SIZE = 4;
constexpr int OUTPUT_SIZE = 2;
constexpr double INPUT_3 = 0.0;
constexpr double INPUT_4 = 0.0;
constexpr int NUM_HIDDEN_LAYERS = 2;
constexpr int HIDDEN_LAYER_SIZE = 8;
constexpr bool RELU_FOR_HIDDEN = false; 
constexpr bool SIGMOID_FOR_OUTPUT = false;

#pragma once
#include &lt;vector&gt;

class NeuralNetwork
{
public:
    NeuralNetwork(int inputSize, int outputSize, int numHiddenLayers, int hiddenLayerSize);
    std::vector&lt;double&gt; FeedForward(const std::vector&lt;double&gt;&amp; inputs);
    std::vector&lt;double&gt; GetWeights() const;
    void SetWeights(const std::vector&lt;double&gt;&amp; newWeights);
    double Sigmoid(double x);
    double ReLU(double x);

private:
    std::vector&lt;std::vector&lt;double&gt;&gt; weights;
    int inputSize;
    int outputSize;
    int numHiddenLayers;
    int hiddenLayerSize;

    void InitializeWeights();
};

#include &lt;random&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;cassert&gt;
#include &lt;sstream&gt;
#include &quot;NeuralNetwork.h&quot;
#include &quot;DebugOutput.h&quot;
#include &quot;ConstantData.h&quot;

NeuralNetwork::NeuralNetwork(int inputSize, int outputSize, int numHiddenLayers, int hiddenLayerSize)
    : inputSize(inputSize), outputSize(outputSize), numHiddenLayers(numHiddenLayers), hiddenLayerSize(hiddenLayerSize)
{
    InitializeWeights();
}

void NeuralNetwork::InitializeWeights()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution&lt;&gt; dis(-1.0, 1.0);

    // Initialisiere die Gewichte für die Eingabe zur ersten versteckten Schicht
    weights.push_back(std::vector&lt;double&gt;(inputSize * hiddenLayerSize));
    std::generate(weights.back().begin(), weights.back().end(), [&amp;]() { return dis(gen); });

    // Initialisiere die Gewichte für die versteckten Schichten
    for (int i = 0; i &lt; numHiddenLayers - 1; ++i)
    {
        weights.push_back(std::vector&lt;double&gt;(hiddenLayerSize * hiddenLayerSize));
        std::generate(weights.back().begin(), weights.back().end(), [&amp;]() { return dis(gen); });
    }

    // Initialisiere die Gewichte für die letzte versteckte Schicht zur Ausgabeschicht
    weights.push_back(std::vector&lt;double&gt;(hiddenLayerSize * outputSize));
    std::generate(weights.back().begin(), weights.back().end(), [&amp;]() { return dis(gen); });
}

std::vector&lt;double&gt; NeuralNetwork::FeedForward(const std::vector&lt;double&gt;&amp; inputs)
{
    assert(inputs.size() == inputSize);

    std::vector&lt;double&gt; outputs(hiddenLayerSize, 0.0);
    std::vector&lt;double&gt; currentInputs = inputs;

    // Berechnung der versteckten Schichten
    for (int l = 0; l &lt; numHiddenLayers; ++l)
    {
        outputs.assign(hiddenLayerSize, 0.0);
        for (int j = 0; j &lt; hiddenLayerSize; ++j)
        {
            for (int i = 0; i &lt; currentInputs.size(); ++i)
            {
                outputs[j] += currentInputs[i] * weights[l][j * currentInputs.size() + i];
            }
            
            if (RELU_FOR_HIDDEN)
            {
                outputs[j] = ReLU(outputs[j]);  // ReLU Aktivierungsfunktion 
            }
            
        }
        currentInputs = outputs;
    }

    // Berechnung der Ausgabeschicht
    outputs.assign(outputSize, 0.0);
    for (int j = 0; j &lt; outputSize; ++j)
    {
        for (int i = 0; i &lt; currentInputs.size(); ++i)
        {
            outputs[j] += currentInputs[i] * weights.back()[j * currentInputs.size() + i];
            std::ostringstream oss;
            oss &lt;&lt; &quot;\noutput[j]: &quot; &lt;&lt; outputs[j];
            DebugOutput(oss.str());
        }

        if (SIGMOID_FOR_OUTPUT)
        {
            outputs[j] = Sigmoid(outputs[j]) * 600 - 300;  // Skalieren, um den Bereich [-300, 300] zu haben --&gt; Käfer bewegen sich seltsam!
        }
    }

    return outputs;
}

std::vector&lt;double&gt; NeuralNetwork::GetWeights() const
{
    // Alle Gewichtsmatrizen in einen einzelnen Vektor zusammenführen
    std::vector&lt;double&gt; allWeights;
    for (const auto&amp; layerWeights : weights)
    {
        allWeights.insert(allWeights.end(), layerWeights.begin(), layerWeights.end());
    }
    return allWeights;
}

void NeuralNetwork::SetWeights(const std::vector&lt;double&gt;&amp; newWeights)
{
    size_t offset = 0;
    for (auto&amp; layerWeights : weights)
    {
        std::copy(newWeights.begin() + offset, newWeights.begin() + offset + layerWeights.size(), layerWeights.begin());
        offset += layerWeights.size();
    }
}

double NeuralNetwork::Sigmoid(double x)
{
    return 1.0 / (1.0 + exp(-x));
}

double NeuralNetwork::ReLU(double x)
{
    return std::max(0.0, x);
}



]]></description><link>https://www.c-plusplus.net/forum/topic/354412/neuronal-network-mit-genetic-algorithmus</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354412/neuronal-network-mit-genetic-algorithmus</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Tue, 11 Jun 2024 17:57:29 GMT</pubDate></item><item><title><![CDATA[TCN_SELCHANGING]]></title><description><![CDATA[@Th69 https://de.wiktionary.org/wiki/der_Geist_ist_willig,_aber_das_Fleisch_ist_schwach 
]]></description><link>https://www.c-plusplus.net/forum/topic/354641/tcn_selchanging</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354641/tcn_selchanging</guid><dc:creator><![CDATA[omggg]]></dc:creator><pubDate>Wed, 15 May 2024 18:27:10 GMT</pubDate></item><item><title><![CDATA[PostQuitMessage(0) Ok ?]]></title><description><![CDATA[Danke Dir !
]]></description><link>https://www.c-plusplus.net/forum/topic/354545/postquitmessage-0-ok</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354545/postquitmessage-0-ok</guid><dc:creator><![CDATA[biter]]></dc:creator><pubDate>Sat, 04 May 2024 13:20:34 GMT</pubDate></item><item><title><![CDATA[Frage zu CToolTipCtrl (bzw. CreateWindowEx) für ListBox]]></title><description><![CDATA[Noch eine kurze Zusammenfassung:
Bei mir laufen bereits &quot;ToolTips&quot; und zwar über die &quot;PretranslateMessage()&quot; in Views.
Dies mit der obigen &quot;CreateWindowEx(..)&quot; Methode.
Nun benötige ich sowas innerhalb eines Dialogs für eine &quot;ListBox&quot;.
Leider habe ich da die &quot;PretranslateMessage()&quot; nicht zum Laufen gebracht!
Ich weiss leider nicht warum.
So habe ich versucht, dies über eine Message-Schleife, in der &quot;DoModal()&quot; meiner
Dialog-Basisklasse zu  lösen und die an den &quot;OnCommand()&quot; meiner Dialogklasse weitergeleitet.
Dort kommt die Message auch an.
Der &quot;ToolTip&quot; wird aber, mit der Methode, die sonst funktioniert, nicht angezeigt.
]]></description><link>https://www.c-plusplus.net/forum/topic/354536/frage-zu-ctooltipctrl-bzw-createwindowex-für-listbox</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354536/frage-zu-ctooltipctrl-bzw-createwindowex-für-listbox</guid><dc:creator><![CDATA[elmut19]]></dc:creator><pubDate>Thu, 15 Feb 2024 10:35:12 GMT</pubDate></item><item><title><![CDATA[Child-Fenster minimieren]]></title><description><![CDATA[Hallo zusammen, folgende Frage, wenn ich unter VS 2010 ( zugegeben alt ) eine MFC MDI Anwendung mit CEditView als Child-Fenster-Klasse einrichte, dann sehe ich nach dem Starten der Anwendung, keine Möglichkeit die Child-Fenster zu minimieren, bei VS 2008 hatte jedes Child-Fenster rechts oben die üblichen drei Schaltflächen . Habe ich die Möglichkeit, diese Flächen anzeigen zu lassen ?
]]></description><link>https://www.c-plusplus.net/forum/topic/354538/child-fenster-minimieren</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354538/child-fenster-minimieren</guid><dc:creator><![CDATA[biter]]></dc:creator><pubDate>Tue, 13 Feb 2024 13:27:52 GMT</pubDate></item><item><title><![CDATA[WinRT originate error - 0x80040155]]></title><description><![CDATA[@Quiche-Lorraine  lol  tut mir leid, viel spaß damit ^^
]]></description><link>https://www.c-plusplus.net/forum/topic/354519/winrt-originate-error-0x80040155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354519/winrt-originate-error-0x80040155</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 02 Feb 2024 14:05:42 GMT</pubDate></item><item><title><![CDATA[Windows MFC Programmierung (Anfängerfrage)]]></title><description><![CDATA[Vielleicht helfen dir u.a. meine alten Tutorials beim Einstieg in MFC:
https://www.henkessoft.de/C++/MFC/MFC Tutorials.htm
Zum Thema Schwierigkeit:
Sowohl bei MFC als auch bei WinAPI hilft chatGPT-4o super weiter mit den richtigen Funktionen und Parametern sowie den passenden Header/Libraries.
Für wxWidgets habe ich hier etwas geschrieben:
https://www.henkessoft.de/wxWidgets/wxWidgets_001.html
]]></description><link>https://www.c-plusplus.net/forum/topic/350452/windows-mfc-programmierung-anfängerfrage</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/350452/windows-mfc-programmierung-anfängerfrage</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sat, 25 Nov 2023 11:23:05 GMT</pubDate></item><item><title><![CDATA[Anfänger, Hallo und ein paar Fragen.. ;-)]]></title><description><![CDATA[Kann man das Committen nicht direkt aus VS bewerkstelligen?
]]></description><link>https://www.c-plusplus.net/forum/topic/354295/anfänger-hallo-und-ein-paar-fragen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354295/anfänger-hallo-und-ein-paar-fragen</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sat, 25 Nov 2023 11:18:57 GMT</pubDate></item><item><title><![CDATA[HTML JQuery NoTimer ?]]></title><description><![CDATA[Hallo zusammen,
ich habe leider ein html problem, da nutze ich essenziell  jquery-latest.js
als lokale developer Version (Klartext)
Nun lädt meine Seite und in OnReady() wird ein Timer ausgelöst.
Leider nicht immer, manchmal wird der OnTimer gar nicht initialisiert.
Inzwischen konnte ich feststellen, das wenn ich im Head das Cashen der Seite
unterdrücke überhaupt kein Timer mehr ausgelöst wird.
(Die Seite wird im iframe geladen)
Der Timer erneuert ständig ein Kamerabild im mjpg tag
&lt;html&gt;

&lt;head&gt;
    &lt;!--
    &lt;meta http-equiv=&quot;cache-control&quot; content=&quot;max-age=0&quot; /&gt;
    &lt;meta http-equiv=&quot;cache-control&quot; content=&quot;no-cache&quot; /&gt;
    &lt;meta http-equiv=&quot;expires&quot; content=&quot;0&quot; /&gt;
    &lt;meta http-equiv=&quot;expires&quot; content=&quot;Tue, 01 Jan 1980 1:00:00 GMT&quot; /&gt;
    &lt;meta http-equiv=&quot;pragma&quot; content=&quot;no-cache&quot; /&gt;

    &lt;script src=&quot;https://code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;\home\pi\projects\RpiCamSvr\subtil\jquery-latest.js&quot;&gt;&lt;/script&gt;
    See  https://jquery.com/download/
    --&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;styles.css&quot;&gt;

    &lt;script src=&quot;jquery-latest.js&quot;&gt;&lt;/script&gt;

&lt;/head&gt;

&lt;body style=&quot;background-color:#000f;&quot; text=&quot;#ffffff&quot;&gt;
    &lt;div id=&quot;cloud_main_page&quot; class=&quot;disable-select&quot;&gt;
        &lt;div class=&quot;cloud_mouse_selection&quot;&gt;&lt;/div&gt;

        &lt;span id=&quot;rcMovTxt&quot;&gt;&lt;/span&gt;
        &lt;span id=&quot;rcDwnTxt&quot;&gt;&lt;/span&gt;

        &lt;table&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;/td&gt;
                &lt;td&gt;&lt;img id=&quot;JpgCam&quot; src = &quot;startcap.jpg&quot; width=&quot;640&quot; height=&quot;480&quot; /&gt;&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;

        &lt;table&gt;
            &lt;tr&gt;
                &lt;form id=&quot;rcForm&quot;&gt;
                &lt;td&gt;&lt;input type=&quot;hidden&quot; id=&quot;A0&quot; name=&quot;rcLeft&quot; value=&quot;268&quot; size=&quot;1&quot; /&gt; &lt;/td&gt;
                &lt;td&gt;&lt;input type=&quot;hidden&quot; id=&quot;A1&quot; name=&quot;rcTop&quot; value=&quot;248&quot; size=&quot;1&quot; /&gt; &lt;/td&gt;
                &lt;td&gt;&lt;input type=&quot;hidden&quot; id=&quot;A2&quot; name=&quot;rcWidth&quot; value=&quot;140&quot; size=&quot;1&quot; /&gt; &lt;/td&gt;
                &lt;td&gt;&lt;input type=&quot;hidden&quot; id=&quot;A3&quot; name=&quot;rcHeight&quot; value=&quot;95&quot; size=&quot;1&quot; /&gt; &lt;/td&gt;
                &lt;!--&lt;td&gt; &lt;input type=&quot;button&quot; value=&quot;Save&quot; /&gt;&lt;/td&gt; --&gt;
                &lt;/form&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
    &lt;/div&gt;
&lt;/body&gt;

&lt;script&gt;

    //https://www.javascript-kurs.de/jquery-tutorial.htm
    //https://code.jquery.com/jquery-latest.js
    //https://www.w3schools.com/jquery/jquery_selectors.asp
    //https://stackoverflow.com/questions/50572939/create-a-mouse-selection-box

    var ajax     = new XMLHttpRequest();
    var timer    = new Date().getTime();
    var TimerId  = 0
    var FrameRdy = true;
    var Lbutton  = false;
    var MouseX   = 0;
    var MouseY   = 0;
    var rcTop    = 0;
    var rcLeft   = 0;
    var rcWidth  = 0;
    var rcHeight = 0;
    var rcInside = false;
    var rcOffset = 0;
    var lsttime  = timer;
    var frmcnt   = 0;
    var PtInRc   = 0;
    var A0InObj  = document.getElementById('A0');
    var A1InObj  = document.getElementById('A1');
    var A2InObj  = document.getElementById('A2');
    var A3InObj  = document.getElementById('A3');
    var ImgObj   = document.getElementById('JpgCam');
    var DoTxObj  = document.getElementById(&quot;rcDwnTxt&quot;);//store this
    var MvTxObj  = document.getElementById(&quot;rcMovTxt&quot;);//store this
    var MvTxAjx  = $(&quot;#rcMovTxt&quot;);
    var DoTxAjx  = $(&quot;#rcDwnTxt&quot;);
    var SelAjx   = $(&quot;#cloud_main_page .cloud_mouse_selection&quot;);
    var fname    = window.location.pathname.split(&quot;/&quot;).pop();
    var imgurl   = document.location;//this server url

    function IsPtInRc(x, y, decr) { return (x &gt;= (rcLeft + decr) &amp;&amp; x &lt;= (rcLeft - decr) + rcWidth &amp;&amp; y &gt;= (rcTop + decr) &amp;&amp; y &lt;= (rcTop - decr) + rcHeight) }

    function InitTimer()
    {
        ImgObj.ondragstart = function () { return false; }

        MvTxObj.style.color   = &quot;#abdbe3&quot;;
        MvTxObj.style.opacity = &quot;0.75&quot;;

        DoTxObj.style.color   = &quot;#abdbe3&quot;;
        DoTxObj.style.opacity = &quot;0.75&quot;;

        DoTxAjx.offset({ left: 20, top: 470 });

        rcLeft   = Number(A0InObj.value);
        rcTop    = Number(A1InObj.value);
        rcWidth  = Number(A2InObj.value);
        rcHeight = Number(A3InObj.value);

        MvTxAjx.offset({ left: (rcLeft + 15), top: (rcTop + 11) });
        SelAjx.css({ &quot;top&quot;: rcTop, &quot;left&quot;: rcLeft, &quot;width&quot;: rcWidth, &quot;height&quot;: rcHeight });

        window.setInterval(&quot;OnTimer()&quot;, 66);
    }

    function OnTimer()
    {
        var ti   = new Date().getTime();
        var diff = (ti - lsttime);

        if (diff &gt;= 1000)
        {
            DoTxObj.innerHTML = &quot;Fps(&quot; + Math.round(1000 / Math.round(diff / (1+frmcnt))) + &quot;)&quot;;

            lsttime = ti;
            frmcnt  = 0;
        }

        frmcnt++;
        ImgObj.src = imgurl + &quot;/MJPEG-A&quot; + ti.toString();
    }

    $(document).ready(function () { InitTimer() });

    $(document).on(&quot;mousedown mouseup&quot;, &quot;#cloud_main_page&quot;, function (e)
    {
        if (e.type == &quot;mousedown&quot;)
        {
            MouseX  = e.clientX;
            MouseY  = e.clientY;
            Lbutton = true;
            //SelAjx.removeAttr(&quot;style&quot;);
        }else if (e.type == &quot;mouseup&quot;)
        {
            A0InObj.value = rcLeft;
            A1InObj.value = rcTop;
            A2InObj.value = rcWidth;
            A3InObj.value = rcHeight;

            if (rcInside)   
            {
                var formstr = imgurl + &quot;?&quot;;
                $.each($('form').serializeArray(), function () { formstr += this.name + &quot;=&quot; + this.value + &quot;&amp;&quot;; });
                ajax.open(&quot;POST&quot;, formstr + &quot; &quot;);
                ajax.send(null);
            }

            Lbutton  = false;
            rcInside = false;
        }
    })

    $(document).on(&quot;mousemove&quot;, &quot;#cloud_main_page&quot;, function (e)
    {
        var irc  = IsPtInRc(e.clientX, e.clientY, 8);
        rcOffset = SelAjx.offset();

        if (Lbutton &amp;&amp; (MouseX != 0 &amp;&amp; MouseY != 0))
        {
            if (rcInside == false)
                rcInside = irc;

            if (rcInside)
            {
                rcTop  = e.clientY - (rcHeight &gt;&gt; 1);
                rcLeft = e.clientX - (rcWidth &gt;&gt; 1);
            }
            else
            {
                rcTop    = e.clientY - MouseY;
                rcLeft   = e.clientX - MouseX;
                rcWidth  = Math.abs(rcLeft);
                rcHeight = Math.abs(rcTop);

                if (rcTop &lt; 0) rcTop = e.clientY;
                else rcTop  = MouseY;

                if (rcLeft &lt; 0) rcLeft = e.clientX;
                else rcLeft = MouseX;
            }

            MvTxAjx.offset({ left: (rcLeft + 15), top: (rcTop + 11) });
            SelAjx.css({ &quot;top&quot;: rcTop, &quot;left&quot;: rcLeft, &quot;width&quot;: rcWidth, &quot;height&quot;: rcHeight });
        }

        MvTxObj.innerHTML = rcLeft + &quot;:&quot; + rcTop;
    })

    $(document).on(&quot;mouseover&quot;, &quot;#cloud_main_page .cloud_mouse_selection&quot;, function (e){PtInRc = 1;})
    $(document).on(&quot;mouseleave&quot;, &quot;#cloud_main_page .cloud_mouse_selection&quot;, function (e){PtInRc = 0;})

&lt;/script&gt;
&lt;/html&gt;

Die Frage also warum sporadisch OnTimer nicht ausgelöst wird, bzw überhaupt nicht ausgelöst wird wenn die no cashing tags aktiviert werden .
Das geht teilweise so weit, das jedes dritte Browser -reload keinen Timer auszulösen scheint..
Der Webserver läuft auf einem Raspberry unter Linux mit VisualStudio -Code remote debugger , der Server ist selber geschrieben, und der Fehler liegt eigentlich nicht in dem Server selber, es muss ein dummer Fehler in dem Web doc sein.
Vielen Dank für Hinweise
Karsten aus Berlin
]]></description><link>https://www.c-plusplus.net/forum/topic/354400/html-jquery-notimer</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354400/html-jquery-notimer</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 19 Nov 2023 09:22:17 GMT</pubDate></item><item><title><![CDATA[Remote Debug Mashine]]></title><description><![CDATA[@Finnegan Ja das ist auch so, aber gerade wenn man einen esp32 als Umsetzer verwendet, ist da kein DNS Service am Start, es ist etwas verwirrend das in den Einstellungen die DNS des Klienten editierbar steht, wird aber nicht übernommen, man muss den Connection Manager öffnen . Wenn man mehrere Netzwerk -Connections hat eine mit google dns und Internet 8.8.8.8 oder über W-lan mit Router oder einem ESP als Server usw.  Der Pi3  liefert über seinen Hardware jpeg De/Encoder 16 fps in die Ajax Webseite, das geht alles gut ab, auch das deploying läuft super , ist halt oft auch fummelig vor allem wenn man da pausen hat von einem Jahr oder mehr, man vergisst welche Optionen wo wirken. Hat sich ja einiges angesammelt in den letzten 50 Jahren ^^
]]></description><link>https://www.c-plusplus.net/forum/topic/354380/remote-debug-mashine</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354380/remote-debug-mashine</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 09 Nov 2023 17:13:24 GMT</pubDate></item><item><title><![CDATA[CEdit SetSel()]]></title><description><![CDATA[@Uwe-Heyer
Naja zu 2.)

Du kannst ja die Mausnachricht (LButtonDown) komplett selber behandeln.
Capture setzen
Mausklick Position und EM_GETCHARFROMPOS benutzen.
Selber EM_SETSEL auslösen.

Und nichts weitergeben...
Gleiches mit WM_KEYDOWN...
Dürfte eigentlich nicht schwer sein.
]]></description><link>https://www.c-plusplus.net/forum/topic/354358/cedit-setsel</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354358/cedit-setsel</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 27 Oct 2023 11:28:46 GMT</pubDate></item><item><title><![CDATA[Ab zweitem Drucken unter Win11 friert Anwendung ein]]></title><description><![CDATA[@Martin-Richter
So, jetzt habe ich endlich mal ein Win11.
Wir haben es auch unter zwei verschiedenen Builds (xx.2361 und xx.2428) getestet.
Bei beiden konnten wir das Fehlerverhalten, sowie die Korrektur feststellen.
Scheint also grundsätzlich bei Win11 so zu sein.
Ich habe das &quot;OleInizialize(NULL)&quot;  anm Anfang der &quot;InitInstance()&quot; reingesetzt.
Weiterhin verhält es sich im Fehlerfall auch so, dass man in einer Schleife problemlos
viele einzelne Dokumente drucken kann.
Das hat auch nur den einmaligen Aufruf des Druckdialogs erfordert.
Erst wenn der Druckdialog ein weiteres Mal aufgerufen wurde, hing das Programm.
Also das &quot;OleInitialize(NULL)&quot; hat geholfen!
Danke nochmals an Alle.
]]></description><link>https://www.c-plusplus.net/forum/topic/354294/ab-zweitem-drucken-unter-win11-friert-anwendung-ein</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354294/ab-zweitem-drucken-unter-win11-friert-anwendung-ein</guid><dc:creator><![CDATA[elmut19]]></dc:creator><pubDate>Fri, 20 Oct 2023 07:50:24 GMT</pubDate></item><item><title><![CDATA[Microsoft dynamics AX Service-Aufruf in externer MFC Anwendung VC++ 6]]></title><description><![CDATA[Ich denke das wird mit einem AX Web-Service genau so gehen wie mit jedem anderen Web-Service: mit VC6 vermutlich sehr mühsam. Dass das Web-Service von AX gehostet wird sollte da keine Rolle spielen.
]]></description><link>https://www.c-plusplus.net/forum/topic/354049/microsoft-dynamics-ax-service-aufruf-in-externer-mfc-anwendung-vc-6</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354049/microsoft-dynamics-ax-service-aufruf-in-externer-mfc-anwendung-vc-6</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 19 Oct 2023 20:20:25 GMT</pubDate></item><item><title><![CDATA[C++ MFC-APP hängt sich nach drücken des Button auf. Öffnet txt Datei nicht]]></title><description><![CDATA[Hallo Liebe Leute
Bin ganz neu hier und das Thema ist schon alt aber der Text scheint wohl
aus dem Buch &quot;C++ Programmieren für Einsteiger&quot; zu sein.
Habe mir das Buch selber gerade gekauft und arbeite das gerade als blutiger Anfänger durch..
Bis zu dem Code von oben (letzter Artikel) bin ich noch nicht gekommen aber der Text ist mir bekannt vorgekommen 
l.G. Robert
]]></description><link>https://www.c-plusplus.net/forum/topic/353770/c-mfc-app-hängt-sich-nach-drücken-des-button-auf-öffnet-txt-datei-nicht</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/353770/c-mfc-app-hängt-sich-nach-drücken-des-button-auf-öffnet-txt-datei-nicht</guid><dc:creator><![CDATA[Robertop]]></dc:creator><pubDate>Wed, 13 Sep 2023 21:42:10 GMT</pubDate></item><item><title><![CDATA[Brauche Version-Info zum Visual Studio]]></title><description><![CDATA[So, ich bin dem Problem auf die schliche gekommen, es ist ja so das man keine wirkliche Ruhe findet egal was man macht, das Gehirn rattert den ganzen Tag lang und unterbewusst sucht man ständig nach der Problemursache, und dann fällt es einem auf einmal ein an was es liegen könnte. Und ja genau so war es dann auch.
Die Probleme mit dem Shellexecute blieben weiterhin bestehen, ich behaupte auch das es SHGetFileInfo in ähnlicher Weise betrifft.
Mit dem Shellexecute Befehl starte ich unter anderem meine eigenen kompilierten Programme die ich so in laufe meines Lebens geschrieben habe über eine kleine ToolBox so nenn ich mal mein letztes größeres Projekt an dem ich immer wieder mal arbeite.
Alle meine Programme packe ich mit dem &quot;UPX 3.91w&quot; und genau diese Programme verursachen dann beim Start über Shellexecute den Absturz des Projektes im Compiler.   Außerhalb vom Compiler passiert das nicht und alles läuft scheinbar normal.
Also vermeide ich ab jetzt einfach nur &quot;UPX 3.91w&quot; gepackte Programme als Test-Objekte wenn ich mit RadStudio arbeite.
EDIT: Über RamDisk Laufwerke treten diese Probleme über den Compiler nicht auf,
HDs und SSD Laufwerke führen über den Compiler zur Freeze oder Absturz mit &quot;UPX 3.91w&quot; gepackten Programmen die per Shellexecute gestartet werden. Auch das Packen mit UPX 4.1.0 ändert nichts an dem bestehenden Problem.
]]></description><link>https://www.c-plusplus.net/forum/topic/354238/brauche-version-info-zum-visual-studio</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354238/brauche-version-info-zum-visual-studio</guid><dc:creator><![CDATA[Gestalt]]></dc:creator><pubDate>Wed, 09 Aug 2023 13:25:15 GMT</pubDate></item></channel></rss>