<?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[Window-Code aufteilen]]></title><description><![CDATA[<p>Ich will sicherlich keinen ganzen Wrapper fuer die Win-Api schreiben, aber ich bin gerade dabei den Code grob in Klassen einzuteilen. Hierzu wollte ich mir eine Klasse schreiben, die sich um das erzeugen eines (bestimmten) Fensters kuemmert, in etwa so:</p>
<pre><code class="language-cpp">// definition (header)
class UserWnd
{
private:
	UserWnd(void);	
	LRESULT CALLBACK UserWndProc(HWND, UINT, WPARAM, LPARAM);
public:
	static UserWnd&amp; instance(void); // returns singleton
	void init(void); // initializes the window
private:
	HWND hwnd;
	HWND hChild;
};
</code></pre>
<p>Tja, der erste Problem ist die Window-Prozedur: Wenn die Funktion eine statische Membermethode der Klasse UserWnd ist, kann ich sie nicht so einfach verwenden</p>
<pre><code class="language-cpp">void UserWnd::init()
{	
    WNDCLASS wndclass ;	
    wndclass.lpfnWndProc = &amp;UserWnd::UserWndProc; // Compilerfehler
//...
</code></pre>
<p>der Compilerfehler lautet</p>
<pre><code>cannot convert from 'LRESULT (__stdcall UserWnd::* )(HWND,UINT,WPARAM,LPARAM)' to 'WNDPROC'
</code></pre>
<p>Offensichtlich entspricht die Methode also nicht mehr dem Prototyp. Wenn ich stattdessen einfach eine Funktion im globalen Namespace benutze, kann ich innerhalb dieser natuerlich nicht auf die Membervariablen der Klasse zugreifen, was ja eigentlich der ganze Vorteil dieser Kapselung sein sollte..</p>
<p>Geh ich da vielleicht einen grundliegend falschen Ansatz? Ich koennte den Code ja auch einfach auf mehrere Dateien aufteilen, ohne dabei Klassen zu verwenden.</p>
<p>Nochmal, nur im sicher zu sein: Das ganze soll <em>keine</em> Window-Klasse werden die man benutzen koennte um beliebige Fenster zu erstellen, es soll ein ganz bestimmtes Fenster sein, dass einmal erzeugt wird. Ich will den Code nur irgendwie auslagern.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165263/window-code-aufteilen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 06:58:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165263.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Nov 2006 14:27:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Window-Code aufteilen on Fri, 17 Nov 2006 14:28:55 GMT]]></title><description><![CDATA[<p>Ich will sicherlich keinen ganzen Wrapper fuer die Win-Api schreiben, aber ich bin gerade dabei den Code grob in Klassen einzuteilen. Hierzu wollte ich mir eine Klasse schreiben, die sich um das erzeugen eines (bestimmten) Fensters kuemmert, in etwa so:</p>
<pre><code class="language-cpp">// definition (header)
class UserWnd
{
private:
	UserWnd(void);	
	LRESULT CALLBACK UserWndProc(HWND, UINT, WPARAM, LPARAM);
public:
	static UserWnd&amp; instance(void); // returns singleton
	void init(void); // initializes the window
private:
	HWND hwnd;
	HWND hChild;
};
</code></pre>
<p>Tja, der erste Problem ist die Window-Prozedur: Wenn die Funktion eine statische Membermethode der Klasse UserWnd ist, kann ich sie nicht so einfach verwenden</p>
<pre><code class="language-cpp">void UserWnd::init()
{	
    WNDCLASS wndclass ;	
    wndclass.lpfnWndProc = &amp;UserWnd::UserWndProc; // Compilerfehler
//...
</code></pre>
<p>der Compilerfehler lautet</p>
<pre><code>cannot convert from 'LRESULT (__stdcall UserWnd::* )(HWND,UINT,WPARAM,LPARAM)' to 'WNDPROC'
</code></pre>
<p>Offensichtlich entspricht die Methode also nicht mehr dem Prototyp. Wenn ich stattdessen einfach eine Funktion im globalen Namespace benutze, kann ich innerhalb dieser natuerlich nicht auf die Membervariablen der Klasse zugreifen, was ja eigentlich der ganze Vorteil dieser Kapselung sein sollte..</p>
<p>Geh ich da vielleicht einen grundliegend falschen Ansatz? Ich koennte den Code ja auch einfach auf mehrere Dateien aufteilen, ohne dabei Klassen zu verwenden.</p>
<p>Nochmal, nur im sicher zu sein: Das ganze soll <em>keine</em> Window-Klasse werden die man benutzen koennte um beliebige Fenster zu erstellen, es soll ein ganz bestimmtes Fenster sein, dass einmal erzeugt wird. Ich will den Code nur irgendwie auslagern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176393</guid><dc:creator><![CDATA[Chase]]></dc:creator><pubDate>Fri, 17 Nov 2006 14:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to Window-Code aufteilen on Fri, 17 Nov 2006 22:35:01 GMT]]></title><description><![CDATA[<p>Dazu hatten wir schon Millionen Beträge <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> . Warum guckt eigentlich keiner in die FAQ ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176408</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 17 Nov 2006 22:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to Window-Code aufteilen on Sat, 18 Nov 2006 13:15:10 GMT]]></title><description><![CDATA[<p>Oh ja, sorry!</p>
<p>Noch eine ganz andere Frage, hoffentlich ist die nicht auch schon in den FAQs <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=":\"
      alt="😕"
    /><br />
Gibt es eine Moeglichkeit, Nachrichten an Steuerelemente (also Child-Fenster) innerhalb der WndProc des Parents &quot;abzufangen&quot; ? Ich hab bereits von mehrere Methoden gelesen bei der die ChildProc einfach ersetzt wird, aber gibt es eine Alternative ?</p>
<p>Eigentlich brauch ich bloss eine Nachricht wenn in einem Editfield RETURN gedrueckt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176587</guid><dc:creator><![CDATA[Chase]]></dc:creator><pubDate>Sat, 18 Nov 2006 13:15:10 GMT</pubDate></item><item><title><![CDATA[Reply to Window-Code aufteilen on Sat, 18 Nov 2006 14:45:52 GMT]]></title><description><![CDATA[<p>Chase schrieb:</p>
<blockquote>
<p>Ich hab bereits von mehrere Methoden gelesen bei der die ChildProc einfach ersetzt wird, aber gibt es eine Alternative ?</p>
<p>Eigentlich brauch ich bloss eine Nachricht wenn in einem Editfield RETURN gedrueckt wird.</p>
</blockquote>
<p>Nein es gibt keine Alternative... . Außerdem kann man eigentlich nur bedingt von einem 'Ersetzen' sprechen, da man lediglich die Nachrichten-Handler ersetzt, auf die man selbst reagieren will, lies: die man modifizieren will.</p>
<p>Hier gibts eine Anleitung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <a href="http://winapi.net/index.php?inhalt=s27" rel="nofollow">Subclassing</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176636</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sat, 18 Nov 2006 14:45:52 GMT</pubDate></item><item><title><![CDATA[Reply to Window-Code aufteilen on Sat, 18 Nov 2006 15:49:25 GMT]]></title><description><![CDATA[<p>Jo, so hab ichs bisher auch gehandhabt, es kam mir nur wie ein viel zu grosser Aufwand vor, nur um mal auf ein RETURN zu reagieren <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="🙂"
    /></p>
<p>Und noch was <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="🙂"
    /> (sorry das das alles so durcheinander kommt)<br />
Ich habe ein statisches Textfeld, in das nur das Programm schreibt. Eigentlich hab ich erwartet, dass Windows das scrollen fuer mich uebernimmt wenn<br />
<em>WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE</em> gesetzt sind. Das klappt aber nicht so ganz. Ich hab bereits ein (schlechtes) Workaround gefunden, ich muss das Editfield bei jeder Veraenderung des Textes manuell scrollen</p>
<pre><code class="language-cpp">SendMessage(hEdit,EM_SCROLL,SB_BOTTOM,TRUE); // scroll to bottom
</code></pre>
<p>Das ist aber nicht so das Wahre, da die Message andauernd gesendet werden muss und das Textfeld bei jeder Gelegenheit hochscrollen &quot;will&quot;. Ich vermute mal, dass es sowas wie eine Caretposition gibt, auf die automatisch gescrollt wird. Kann ich diese nicht irgendwie setzen? MSDN-Suche war erfolglos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176662</guid><dc:creator><![CDATA[Chase]]></dc:creator><pubDate>Sat, 18 Nov 2006 15:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to Window-Code aufteilen on Sun, 19 Nov 2006 17:07:38 GMT]]></title><description><![CDATA[<p><a href="http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolmessages/em_scrollcaret.asp" rel="nofollow">http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolmessages/em_scrollcaret.asp</a> ?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177303</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Sun, 19 Nov 2006 17:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to Window-Code aufteilen on Sun, 19 Nov 2006 20:20:04 GMT]]></title><description><![CDATA[<p>flenders schrieb:</p>
<blockquote>
<p><a href="http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolmessages/em_scrollcaret.asp" rel="nofollow">http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolmessages/em_scrollcaret.asp</a> ?!</p>
</blockquote>
<p>Die Message hab ich auch gefunden, aber irgendwie war das nicht was ich brauchte. Ueberhaupt versteh ich diesen Satz nicht:</p>
<blockquote>
<p>The EM_SCROLLCARET message scrolls the caret into view</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1177401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177401</guid><dc:creator><![CDATA[Chase]]></dc:creator><pubDate>Sun, 19 Nov 2006 20:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to Window-Code aufteilen on Sun, 19 Nov 2006 22:34:35 GMT]]></title><description><![CDATA[<p>Du musst eben vorher die Markierung bzw. das Caret entsprechend setzen (wie das geht siehst du bei dem Link zu deinem anderen Post) und dann sollter diese Nachricht dafür sorgen, dass der gewählte Bereich durch entsprechendes scrollen des Inhalts sichtbar wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177481</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Sun, 19 Nov 2006 22:34:35 GMT</pubDate></item></channel></rss>