<?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[Unerklärliches Problem!]]></title><description><![CDATA[<p>Sorry, dass der Titel nicht sehr aussagekräftig ist, aber ich habe ein Prob was ich mir wirklich nicht erklären kann und ich weiss nicht woran es liegt!</p>
<p>Ich beschreibe am Besten erst einmal das Programm im Groben.<br />
Ich habe eine Klasse main.cpp mit dem int WINAPI WinMain Eintritt. In dieser Funktion erstelle ich mir ein Hauptfenster mit Menüs!</p>
<pre><code class="language-cpp">wc.style         = 0;   // CS = &quot;class style&quot;
	wc.lpfnWndProc   = WndProc; //IMPORTANT: the Event handle function
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hInstance     = hI;
	wc.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
	wc.hCursor       = LoadCursor (NULL, IDC_ARROW);
	wc.hbrBackground = BackgroundColor;
	wc.lpszMenuName  = NULL;
	wc.lpszClassName = szName;
	RegisterClass (&amp;wc);

	definitions.saveLanguageTemp();
	StartSplash startSplash;
	startSplash.showSplash(wc, cx, cy, hI);

	// creates the window
	hwnd = CreateWindow (szName, 
						&quot;Power Watch 0.2&quot;, 
						WS_SYSMENU | WS_OVERLAPPEDWINDOW,
                        xOld, 
						yOld, 
						width, 
						heigth, 
						NULL, 
						NULL, 
						hI, 
						NULL);

	ShowWindow   (hwnd, iCmdShow);
	UpdateWindow (hwnd);

	// message-loop
	while (GetMessage (&amp;msg, NULL, 0, 0))
    {
        TranslateMessage (&amp;msg);
        DispatchMessage (&amp;msg);
	}
</code></pre>
<p>Im Menü erstelle ich diverse Einträge.<br />
Auszug:</p>
<pre><code class="language-cpp">hSubMenu = CreatePopupMenu(); // defines PopUp
			AppendMenu(hSubMenu, MF_STRING, ID_FILE_NEW, &quot;New&quot;); //name and ID
			AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, &quot;Exit&quot;);
			AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, &quot;File&quot;);/*appends the
			SubMenu to the Menu */
</code></pre>
<p>Bei Klick auf &quot;New&quot; erzeuge ich in einer separaten Klasse ein Dialogfenster und übergebe das Handle des Hauptfensters, um es dort als parent zu verwenden!</p>
<pre><code class="language-cpp">hNew = CreateWindow          (szNew,
                                 &quot;New&quot;,
                                 WS_CAPTION | WS_VISIBLE | WS_OVERLAPPED | WS_SYSMENU,
                                 (cx/2)-250,
                                 (cy/2)-200,
                                 stNew.DialogWidth(),
                                 stNew.DialogHeigth(),
                                 hwnd, // Handle of the parent
                                 NULL,
                                 NULL,
                                 NULL);
</code></pre>
<p>In diesem Dialogfenster befindet sich eine Listbox mit Einträgen ganzzahlig von 1 bis 15. Man wählt eine Zahl und klickt auf OK. Dann wird die Zahl in einer Datei gespeichert und ein weiteres Fenster in einer anderen Klasse erzeugt!<br />
Das Handle übergebe ich auch dieses mal!</p>
<pre><code class="language-cpp">UMF.createDocument(wc_Docu, hwnd_Docu, x, y);
</code></pre>
<p>Dann wird das Fenster erstellt:</p>
<pre><code class="language-cpp">hDocument = CreateWindow( szDocument,
                          &quot;Units&quot;,
                          WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_POPUP,
                          xOld,
                          yOld,
                          width,
                          heigth,
                          hDocu,
                          NULL,
                          NULL,
                          NULL);
</code></pre>
<p>In diesem Fenster werden Grafiken angezeigt. Die Fensterhöhe ist abhängig von der ausgewählten Zahl im &quot;New&quot; Dialog!<br />
Da nicht alles in das Fenster passt, wird gescrollt (hori und verti)!<br />
Das funktioniert auch wunderbar! Allerdings nicht lange!<br />
Und zwar wird nach einigen mal Scrollen, Text zwar weiterhin angezeigt (und auch gescrollt), aber keine Grafiken mehr!<br />
Text:</p>
<pre><code class="language-cpp">TextOut (hdc, 
			globalRect.left + 30, 
			globalRect.top + stdUnitMatrix.DrawHeigth() * i + 20, 
			&quot;Box&quot;, 
			lstrlen(&quot;Box&quot;));
</code></pre>
<p>ein horizontaler Strich:</p>
<pre><code class="language-cpp">penBorder = CreatePen(PS_SOLID, 2, RGB (255,255,0) );
	SelectObject(hdc, penBorder);
	MoveToEx( hdc, 
			globalRect.left, 
			globalRect.top + stdUnitMatrix.DrawHeigth() * i + stdUnitMatrix.DrawHeigth(), 
			NULL );
    LineTo	(hdc, 
			globalRect.left + stdUnitMatrix.DrawWidth(), 
			globalRect.top + stdUnitMatrix.DrawHeigth() * i + stdUnitMatrix.DrawHeigth());
</code></pre>
<p>eine Grafik:</p>
<pre><code class="language-cpp">hdcmem=CreateCompatibleDC(hdc);
	SelectObject(hdcmem, V_L1);
	BitBlt	(hdc, 
			globalRect.left + 520,
			50 + globalRect.top + stdUnitMatrix.DrawHeigth() * i, 
			bitmap.bmWidth, bitmap.bmHeight, hdcmem,0,0,SRCCOPY);
	DeleteDC(hdcmem);
</code></pre>
<p>i ist die Variable mit dem vorher ausgewählten Wert!<br />
Als unangenehmer Nebeneffekt sind nach Programmende die Kontextmenüs in Windows schwarz. Die Taskleiste auch. Bewege ich die Maus darüber tauchen die Symbole und Grafiken langsam wieder auf!<br />
Starte ich mein Programm neu und erstelle wieder ein neues Fenster, funktioniert das Scrollen wieder rum eine Zeit lang, bis oben beschriebener Effekt wieder auftritt!<br />
Ich habe mir mal eine Zählvariable erstellt, die jedesmal wenn WM_VSCROLL auf gerufen wird, um eins erhöht wird und dann in eine Datei gespeichert wird!<br />
Diese Zahl ist umgekehrt proportional zur der ausgewählten im Newdialog!<br />
Wähle ich 14 aus, tritt das Problem nach ca. 600 WM_VSCROLL Aufrufen auf, wähle ich 7 nach ca. 1200 Aufrufen! <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 />
Ich vermute mal, dass das irgendein Problem mit den Handles von 2 Fenstern ist (bzw. Nachrichtenschleife). Ich weiss aber nicht, wo ich da ansetzen könnte um das Problem zu erkennen bzw. ein zugrenzen!<br />
Ein Problem mit den Scrollbars schliesse ich zu 99% aus, da Text ja weiterhin gescrollt und angezeigt wird!<br />
Ich weiss da einfach nicht weiter. Wahrscheinlich ist es irgend etwas ganz banales! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Falls jemand eine Idee hat, wäre das schön! <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="🙂"
    /><br />
Bei Bedarf kommt auch noch weiterer Quelltext, wollte bloß nicht zuviel posten jetzt (ist vermutlich schon lang genug der Beitrag)!<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/114028/unerklärliches-problem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 00:41:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/114028.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Jun 2005 12:53:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unerklärliches Problem! on Wed, 29 Jun 2005 12:53:38 GMT]]></title><description><![CDATA[<p>Sorry, dass der Titel nicht sehr aussagekräftig ist, aber ich habe ein Prob was ich mir wirklich nicht erklären kann und ich weiss nicht woran es liegt!</p>
<p>Ich beschreibe am Besten erst einmal das Programm im Groben.<br />
Ich habe eine Klasse main.cpp mit dem int WINAPI WinMain Eintritt. In dieser Funktion erstelle ich mir ein Hauptfenster mit Menüs!</p>
<pre><code class="language-cpp">wc.style         = 0;   // CS = &quot;class style&quot;
	wc.lpfnWndProc   = WndProc; //IMPORTANT: the Event handle function
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hInstance     = hI;
	wc.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
	wc.hCursor       = LoadCursor (NULL, IDC_ARROW);
	wc.hbrBackground = BackgroundColor;
	wc.lpszMenuName  = NULL;
	wc.lpszClassName = szName;
	RegisterClass (&amp;wc);

	definitions.saveLanguageTemp();
	StartSplash startSplash;
	startSplash.showSplash(wc, cx, cy, hI);

	// creates the window
	hwnd = CreateWindow (szName, 
						&quot;Power Watch 0.2&quot;, 
						WS_SYSMENU | WS_OVERLAPPEDWINDOW,
                        xOld, 
						yOld, 
						width, 
						heigth, 
						NULL, 
						NULL, 
						hI, 
						NULL);

	ShowWindow   (hwnd, iCmdShow);
	UpdateWindow (hwnd);

	// message-loop
	while (GetMessage (&amp;msg, NULL, 0, 0))
    {
        TranslateMessage (&amp;msg);
        DispatchMessage (&amp;msg);
	}
</code></pre>
<p>Im Menü erstelle ich diverse Einträge.<br />
Auszug:</p>
<pre><code class="language-cpp">hSubMenu = CreatePopupMenu(); // defines PopUp
			AppendMenu(hSubMenu, MF_STRING, ID_FILE_NEW, &quot;New&quot;); //name and ID
			AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, &quot;Exit&quot;);
			AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, &quot;File&quot;);/*appends the
			SubMenu to the Menu */
</code></pre>
<p>Bei Klick auf &quot;New&quot; erzeuge ich in einer separaten Klasse ein Dialogfenster und übergebe das Handle des Hauptfensters, um es dort als parent zu verwenden!</p>
<pre><code class="language-cpp">hNew = CreateWindow          (szNew,
                                 &quot;New&quot;,
                                 WS_CAPTION | WS_VISIBLE | WS_OVERLAPPED | WS_SYSMENU,
                                 (cx/2)-250,
                                 (cy/2)-200,
                                 stNew.DialogWidth(),
                                 stNew.DialogHeigth(),
                                 hwnd, // Handle of the parent
                                 NULL,
                                 NULL,
                                 NULL);
</code></pre>
<p>In diesem Dialogfenster befindet sich eine Listbox mit Einträgen ganzzahlig von 1 bis 15. Man wählt eine Zahl und klickt auf OK. Dann wird die Zahl in einer Datei gespeichert und ein weiteres Fenster in einer anderen Klasse erzeugt!<br />
Das Handle übergebe ich auch dieses mal!</p>
<pre><code class="language-cpp">UMF.createDocument(wc_Docu, hwnd_Docu, x, y);
</code></pre>
<p>Dann wird das Fenster erstellt:</p>
<pre><code class="language-cpp">hDocument = CreateWindow( szDocument,
                          &quot;Units&quot;,
                          WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_POPUP,
                          xOld,
                          yOld,
                          width,
                          heigth,
                          hDocu,
                          NULL,
                          NULL,
                          NULL);
</code></pre>
<p>In diesem Fenster werden Grafiken angezeigt. Die Fensterhöhe ist abhängig von der ausgewählten Zahl im &quot;New&quot; Dialog!<br />
Da nicht alles in das Fenster passt, wird gescrollt (hori und verti)!<br />
Das funktioniert auch wunderbar! Allerdings nicht lange!<br />
Und zwar wird nach einigen mal Scrollen, Text zwar weiterhin angezeigt (und auch gescrollt), aber keine Grafiken mehr!<br />
Text:</p>
<pre><code class="language-cpp">TextOut (hdc, 
			globalRect.left + 30, 
			globalRect.top + stdUnitMatrix.DrawHeigth() * i + 20, 
			&quot;Box&quot;, 
			lstrlen(&quot;Box&quot;));
</code></pre>
<p>ein horizontaler Strich:</p>
<pre><code class="language-cpp">penBorder = CreatePen(PS_SOLID, 2, RGB (255,255,0) );
	SelectObject(hdc, penBorder);
	MoveToEx( hdc, 
			globalRect.left, 
			globalRect.top + stdUnitMatrix.DrawHeigth() * i + stdUnitMatrix.DrawHeigth(), 
			NULL );
    LineTo	(hdc, 
			globalRect.left + stdUnitMatrix.DrawWidth(), 
			globalRect.top + stdUnitMatrix.DrawHeigth() * i + stdUnitMatrix.DrawHeigth());
</code></pre>
<p>eine Grafik:</p>
<pre><code class="language-cpp">hdcmem=CreateCompatibleDC(hdc);
	SelectObject(hdcmem, V_L1);
	BitBlt	(hdc, 
			globalRect.left + 520,
			50 + globalRect.top + stdUnitMatrix.DrawHeigth() * i, 
			bitmap.bmWidth, bitmap.bmHeight, hdcmem,0,0,SRCCOPY);
	DeleteDC(hdcmem);
</code></pre>
<p>i ist die Variable mit dem vorher ausgewählten Wert!<br />
Als unangenehmer Nebeneffekt sind nach Programmende die Kontextmenüs in Windows schwarz. Die Taskleiste auch. Bewege ich die Maus darüber tauchen die Symbole und Grafiken langsam wieder auf!<br />
Starte ich mein Programm neu und erstelle wieder ein neues Fenster, funktioniert das Scrollen wieder rum eine Zeit lang, bis oben beschriebener Effekt wieder auftritt!<br />
Ich habe mir mal eine Zählvariable erstellt, die jedesmal wenn WM_VSCROLL auf gerufen wird, um eins erhöht wird und dann in eine Datei gespeichert wird!<br />
Diese Zahl ist umgekehrt proportional zur der ausgewählten im Newdialog!<br />
Wähle ich 14 aus, tritt das Problem nach ca. 600 WM_VSCROLL Aufrufen auf, wähle ich 7 nach ca. 1200 Aufrufen! <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 />
Ich vermute mal, dass das irgendein Problem mit den Handles von 2 Fenstern ist (bzw. Nachrichtenschleife). Ich weiss aber nicht, wo ich da ansetzen könnte um das Problem zu erkennen bzw. ein zugrenzen!<br />
Ein Problem mit den Scrollbars schliesse ich zu 99% aus, da Text ja weiterhin gescrollt und angezeigt wird!<br />
Ich weiss da einfach nicht weiter. Wahrscheinlich ist es irgend etwas ganz banales! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Falls jemand eine Idee hat, wäre das schön! <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="🙂"
    /><br />
Bei Bedarf kommt auch noch weiterer Quelltext, wollte bloß nicht zuviel posten jetzt (ist vermutlich schon lang genug der Beitrag)!<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/819775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/819775</guid><dc:creator><![CDATA[ProximaX]]></dc:creator><pubDate>Wed, 29 Jun 2005 12:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Problem! on Wed, 29 Jun 2005 13:00:05 GMT]]></title><description><![CDATA[<p>Hört sich nach GDI Leak an. Lies dir mal durch wie man bei GDI die Sachen richtig freigibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/819780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/819780</guid><dc:creator><![CDATA[msdn.]]></dc:creator><pubDate>Wed, 29 Jun 2005 13:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Problem! on Wed, 29 Jun 2005 13:16:24 GMT]]></title><description><![CDATA[<p>Ja geil! Funktioniert! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Danke! <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="🙂"
    /><br />
Hatte vergessen den Pen zu löschen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
DeleteObject(penBorder);<br />
Juhu, war mir fast klar, dass das was banales ist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/819792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/819792</guid><dc:creator><![CDATA[ProximaX]]></dc:creator><pubDate>Wed, 29 Jun 2005 13:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Problem! on Wed, 29 Jun 2005 13:20:31 GMT]]></title><description><![CDATA[<p>Bei SelectObject muß man auch noch was beachten, was du wahrscheinlich nicht gemacht hast. Immer das Original wider reinselektieren bevor man den DC freigibt. Windows XP stört sich nicht daran, wenn du es nicht machst, aber ich glaub ältere Windows schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/819799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/819799</guid><dc:creator><![CDATA[Halbwissen²]]></dc:creator><pubDate>Wed, 29 Jun 2005 13:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to Unerklärliches Problem! on Wed, 29 Jun 2005 13:22:58 GMT]]></title><description><![CDATA[<p>Du meinst so:<br />
pDC-&gt;SelectObject(bla);<br />
Ja, das werde ich noch ändern.<br />
Danke für den Tipp!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/819804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/819804</guid><dc:creator><![CDATA[ProximaX]]></dc:creator><pubDate>Wed, 29 Jun 2005 13:22:58 GMT</pubDate></item></channel></rss>