<?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[Neu in WinApi]]></title><description><![CDATA[<p>Holla.<br />
Ich habe mich entschlossen, mir die Windows Api anzueignen,<br />
da ich mich von Visual Basic komplett verabschieden will.<br />
Die grundlagen von C++ kenne ich ja schon.</p>
<p>Bin schon mit dieser Seite dieses Tutorials durch:<br />
<a href="http://pronix.linuxdelta.de/C/win32/win32_4.shtml" rel="nofollow">http://pronix.linuxdelta.de/C/win32/win32_4.shtml</a></p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;resource.h&quot;

LPCSTR MainClassName = &quot;Texteditor&quot;;

// Zum Empfangen und Auswerten der messages
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	// Fensterstruktur setzen
	WNDCLASSEX wc;
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = 0;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_ICON));
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
	wc.lpszClassName = MainClassName;
	wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_ICON), IMAGE_ICON, 16, 16, 0);

	// Fenster registrieren
	if(!RegisterClassEx(&amp;wc))
	{
		MessageBox(NULL, &quot;Windows Registrations Fehler&quot;, &quot;Error!&quot;, MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

	// Fenster erstellen
	HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, MainClassName, &quot;Texteditor&quot;, WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 150, NULL, NULL, hInstance, NULL);
	if(hWnd == NULL)
	{
		MessageBox(NULL, &quot;Fehler beim Erstellen des Fensters!&quot;, &quot;Error!&quot;, MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

	// Fenster anzeigen
	ShowWindow(hWnd, iCmdShow);

	// Auf Messages reagieren
	MSG wmsg;
	while( GetMessage(&amp;wmsg, hWnd, 0, 0) )
	{
		TranslateMessage(&amp;wmsg);
		DispatchMessage(&amp;wmsg);
	}

	return wmsg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
	char string[255];

	switch (iMsg)
	{
		case WM_CLOSE:
			DestroyWindow(hWnd);
		break;
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
				case ID_FILE_OPEN:
					LoadString(GetModuleHandle(NULL), ID_STRING_OPEN, string, sizeof(string));
					MessageBox(hWnd, string, &quot;Öffnen&quot;, MB_ICONINFORMATION);
				break;
				case ID_FILE_SAVE:
					LoadString(GetModuleHandle(NULL), ID_STRING_SAVE, string, sizeof(string));
					MessageBox(hWnd, string, &quot;Speichern&quot;, MB_ICONINFORMATION);
				break;
				case ID_OPTIONS_OPTIONS_OPTION1:
					LoadString(GetModuleHandle(NULL), ID_STRING_OPTION1, string, sizeof(string));
					MessageBox(hWnd,string, &quot;Option 1&quot;, MB_ICONINFORMATION);
				break;
				case ID_OPTIONS_OPTIONS_OPTION2:
						LoadString(GetModuleHandle(NULL), ID_STRING_OPTION2, string, sizeof(string));
						MessageBox(hWnd,string, &quot;Option 2&quot;, MB_ICONINFORMATION);
				break;
				case ID_\1:
					LoadString(GetModuleHandle(NULL), ID_STRING_ABOUT, string, sizeof(string));
					MessageBox(hWnd,string, &quot;Über&quot;, MB_ICONINFORMATION);
				break;
				case ID_FILE_EXIT:
					DestroyWindow(hWnd);
				break;
			}
		break;
	}

	return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
</code></pre>
<p>Ein Haufen Sachen sind für mich nicht nachvollziehbar.<br />
Das meißte habe ich in diesem Turorial nur<br />
heuristisch zum reinpasten gelernt <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="🙄"
    /></p>
<p>Zum Beispiel verstehe ich nicht, wieso man ein Fenster<br />
bei Windows registriert mit einem struct, dass man<br />
al Argument zum Registrieren übergibt und dann noch<br />
das Fenster erstellt!?</p>
<p>Jede 2e Zeile in diesem Tutorial heißt es &quot;dafür schauen sie<br />
bitte in der msdn nach&quot;, &quot;dazu genauer unter der msdn&quot; ich<br />
meine, wenn man diese Andeutungen weglässt, hat man bloß noch<br />
code zum pasten, jetzt mal im Ernst!</p>
<p>Aus einem msdn Artikel wurde ich in meinem ganzen Leben noch nicht schlau!<br />
Ich schaffe es nicht einmal, per Google eine Erklärung<br />
zum typedef LRESULT zu finden, wozu er a ist bzw. was er bringt.<br />
Wieso LRESULT CALLBACK? Ist doch nur eine simple Funktion,<br />
die durch wc ausgelöst wird.<br />
Was bringt der MainClassName? Was bringt Translate Message?</p>
<p>Ich will zuerst mal einen simplen Texteditor coden.<br />
Verdammt, ich weiß nichtmal, wie ich das Problem schildern soll!!!</p>
<p>// edit<br />
Hab jetzt ne Runde recharchiert und kann das meißte jetzt nachvollziehen.<br />
Ein Problem fällt mir jetzt aber auf. Wenn ich das Fenster schliesse,<br />
läuft das Programm noch weiter im Taskmanager.</p>
<pre><code class="language-cpp">MessageBox(NULL, &quot;test&quot;, &quot;test&quot;, MB_OK);
	return wmsg.wParam;
}
</code></pre>
<p>Habe vor return wmsg.wParam zur Fehleranalyse ne messagebox eingefügt.<br />
Sie wird nicht ausgegeben. Die Fensterklasse wird korrekt zerstört<br />
nach dem Schließen des Fensters aber die Schlefife geht noch weiter.<br />
Ich kann nichts über die Rückgabe dieser Funktion reecharchieren bzw<br />
wann sie mal false zurückgibt.</p>
<p>Die PostQuitMessage sendet dem Fenster die Nachricht WS_QUIT, dass<br />
die Unendlich-Schleife beendet wird. Aber wozu ist der Parameter?<br />
PostQuitMessage(<strong>0</strong>);</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197486/neu-in-winapi</link><generator>RSS for Node</generator><lastBuildDate>Sat, 02 May 2026 03:16:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197486.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Nov 2007 03:49:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Neu in WinApi on Thu, 19 Feb 2009 09:55:19 GMT]]></title><description><![CDATA[<p>Holla.<br />
Ich habe mich entschlossen, mir die Windows Api anzueignen,<br />
da ich mich von Visual Basic komplett verabschieden will.<br />
Die grundlagen von C++ kenne ich ja schon.</p>
<p>Bin schon mit dieser Seite dieses Tutorials durch:<br />
<a href="http://pronix.linuxdelta.de/C/win32/win32_4.shtml" rel="nofollow">http://pronix.linuxdelta.de/C/win32/win32_4.shtml</a></p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;resource.h&quot;

LPCSTR MainClassName = &quot;Texteditor&quot;;

// Zum Empfangen und Auswerten der messages
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	// Fensterstruktur setzen
	WNDCLASSEX wc;
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = 0;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_ICON));
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
	wc.lpszClassName = MainClassName;
	wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_ICON), IMAGE_ICON, 16, 16, 0);

	// Fenster registrieren
	if(!RegisterClassEx(&amp;wc))
	{
		MessageBox(NULL, &quot;Windows Registrations Fehler&quot;, &quot;Error!&quot;, MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

	// Fenster erstellen
	HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, MainClassName, &quot;Texteditor&quot;, WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 150, NULL, NULL, hInstance, NULL);
	if(hWnd == NULL)
	{
		MessageBox(NULL, &quot;Fehler beim Erstellen des Fensters!&quot;, &quot;Error!&quot;, MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

	// Fenster anzeigen
	ShowWindow(hWnd, iCmdShow);

	// Auf Messages reagieren
	MSG wmsg;
	while( GetMessage(&amp;wmsg, hWnd, 0, 0) )
	{
		TranslateMessage(&amp;wmsg);
		DispatchMessage(&amp;wmsg);
	}

	return wmsg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
	char string[255];

	switch (iMsg)
	{
		case WM_CLOSE:
			DestroyWindow(hWnd);
		break;
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
				case ID_FILE_OPEN:
					LoadString(GetModuleHandle(NULL), ID_STRING_OPEN, string, sizeof(string));
					MessageBox(hWnd, string, &quot;Öffnen&quot;, MB_ICONINFORMATION);
				break;
				case ID_FILE_SAVE:
					LoadString(GetModuleHandle(NULL), ID_STRING_SAVE, string, sizeof(string));
					MessageBox(hWnd, string, &quot;Speichern&quot;, MB_ICONINFORMATION);
				break;
				case ID_OPTIONS_OPTIONS_OPTION1:
					LoadString(GetModuleHandle(NULL), ID_STRING_OPTION1, string, sizeof(string));
					MessageBox(hWnd,string, &quot;Option 1&quot;, MB_ICONINFORMATION);
				break;
				case ID_OPTIONS_OPTIONS_OPTION2:
						LoadString(GetModuleHandle(NULL), ID_STRING_OPTION2, string, sizeof(string));
						MessageBox(hWnd,string, &quot;Option 2&quot;, MB_ICONINFORMATION);
				break;
				case ID_\1:
					LoadString(GetModuleHandle(NULL), ID_STRING_ABOUT, string, sizeof(string));
					MessageBox(hWnd,string, &quot;Über&quot;, MB_ICONINFORMATION);
				break;
				case ID_FILE_EXIT:
					DestroyWindow(hWnd);
				break;
			}
		break;
	}

	return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
</code></pre>
<p>Ein Haufen Sachen sind für mich nicht nachvollziehbar.<br />
Das meißte habe ich in diesem Turorial nur<br />
heuristisch zum reinpasten gelernt <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="🙄"
    /></p>
<p>Zum Beispiel verstehe ich nicht, wieso man ein Fenster<br />
bei Windows registriert mit einem struct, dass man<br />
al Argument zum Registrieren übergibt und dann noch<br />
das Fenster erstellt!?</p>
<p>Jede 2e Zeile in diesem Tutorial heißt es &quot;dafür schauen sie<br />
bitte in der msdn nach&quot;, &quot;dazu genauer unter der msdn&quot; ich<br />
meine, wenn man diese Andeutungen weglässt, hat man bloß noch<br />
code zum pasten, jetzt mal im Ernst!</p>
<p>Aus einem msdn Artikel wurde ich in meinem ganzen Leben noch nicht schlau!<br />
Ich schaffe es nicht einmal, per Google eine Erklärung<br />
zum typedef LRESULT zu finden, wozu er a ist bzw. was er bringt.<br />
Wieso LRESULT CALLBACK? Ist doch nur eine simple Funktion,<br />
die durch wc ausgelöst wird.<br />
Was bringt der MainClassName? Was bringt Translate Message?</p>
<p>Ich will zuerst mal einen simplen Texteditor coden.<br />
Verdammt, ich weiß nichtmal, wie ich das Problem schildern soll!!!</p>
<p>// edit<br />
Hab jetzt ne Runde recharchiert und kann das meißte jetzt nachvollziehen.<br />
Ein Problem fällt mir jetzt aber auf. Wenn ich das Fenster schliesse,<br />
läuft das Programm noch weiter im Taskmanager.</p>
<pre><code class="language-cpp">MessageBox(NULL, &quot;test&quot;, &quot;test&quot;, MB_OK);
	return wmsg.wParam;
}
</code></pre>
<p>Habe vor return wmsg.wParam zur Fehleranalyse ne messagebox eingefügt.<br />
Sie wird nicht ausgegeben. Die Fensterklasse wird korrekt zerstört<br />
nach dem Schließen des Fensters aber die Schlefife geht noch weiter.<br />
Ich kann nichts über die Rückgabe dieser Funktion reecharchieren bzw<br />
wann sie mal false zurückgibt.</p>
<p>Die PostQuitMessage sendet dem Fenster die Nachricht WS_QUIT, dass<br />
die Unendlich-Schleife beendet wird. Aber wozu ist der Parameter?<br />
PostQuitMessage(<strong>0</strong>);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401205</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Thu, 19 Feb 2009 09:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Sun, 11 Nov 2007 12:20:42 GMT]]></title><description><![CDATA[<p>sjBlack schrieb:</p>
<blockquote>
<p>Ein Problem fällt mir jetzt aber auf. Wenn ich das Fenster schliesse, läuft das Programm noch weiter im Taskmanager.</p>
</blockquote>
<p>Sobald das Hauptfenster WM_DESTROY verarbeitet hat, ist &quot;hWnd&quot; ungültig.<br />
GetMessage () probiert dann die ganze Zeit, Botschaften für ein ungültiges Fensterhandle zu holen.<br />
Das geht aber nicht, deshalb liefert GetMessage () ständig -1 zurück (schwerer fehler), was aber nirgendwo abgefragt wird.</p>
<pre><code class="language-cpp">MSG wmsg;
// while( GetMessage(&amp;wmsg, hWnd, 0, 0) )
 while( GetMessage(&amp;wmsg, 0, 0, 0) )      // &lt;- besser so hier
 {
  ...
 }
</code></pre>
<p>sjBlack schrieb:</p>
<blockquote>
<p>Die PostQuitMessage sendet dem Fenster die Nachricht WS_QUIT, dass die Unendlich-Schleife beendet wird.<br />
Aber wozu ist der Parameter? PostQuitMessage(<strong>0</strong>);</p>
</blockquote>
<p>PostQuitMessage () sorgt nur dafür, daß GetMessage () als Botschaft WM_QUIT holt woraufhin GetMessage () 0 (also FALSE) zurückgibt und die While-Schleife verlassen werden kann.<br />
Der Parameter ist dann der Wert von &quot;wmsg.wParam&quot; den die Anwendung an das Betriebssystem zurückgibt.<br />
Dieser Rückgabewert kann dann z.B. von einem anderen Programm via GetExitCodeProcess () abgefragt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401289</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Nov 2007 12:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Sun, 11 Nov 2007 19:07:52 GMT]]></title><description><![CDATA[<p>ah! und wozu ist die funktion CALLBACK LRESULT?<br />
wofür steht überhaupt jetzt CALLBACK LRESULT?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401566</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Sun, 11 Nov 2007 19:07:52 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Sun, 11 Nov 2007 22:56:41 GMT]]></title><description><![CDATA[<p>sjBlack schrieb:</p>
<blockquote>
<p>ah! und wozu ist die funktion CALLBACK LRESULT?<br />
wofür steht überhaupt jetzt CALLBACK LRESULT?</p>
</blockquote>
<p>Callback bezeichnet eine Rückruffunktion in der Informatik. Leicht verständliche Beispiele hier:</p>
<p><a href="http://de.wikipedia.org/wiki/R%C3%BCckruffunktion" rel="nofollow">http://de.wikipedia.org/wiki/Rückruffunktion</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401662</guid><dc:creator><![CDATA[schmidt-webdesign.net]]></dc:creator><pubDate>Sun, 11 Nov 2007 22:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 00:52:10 GMT]]></title><description><![CDATA[<p>Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier</p>
<pre><code>wc.lpfnWndProc = WndProc;
</code></pre>
<p>Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,<br />
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?</p>
<p>Dass der Compiler keien Fehelermeldung wirft, die Aktualparameterliste würde<br />
fehlen, sondern die Kopie der Funktion zugewiesen wird und ohne<br />
dieses Attribut ist es nicht möglich.</p>
<p>Spiele damit rum, damit ich aus dem Fensterprogramm auch wirklich alles verstehe:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

// Zum Empfangen und Auswerten der messages
LRESULT CALLBACK WndProc();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	struct test
	{
		LRESULT funktion;
		int aufrufe;
	} bla;

	bla.funktion = WndProc;

	while (int i = 0; i &lt;= 4; i++)
	{
		bla.funktion();
		bla.aufrufe++;
	}

	return 0;
}

//
LRESULT CALLBACK WndProc()
{
	MessageBox(NULL, &quot;Hallo&quot;, &quot;hi&quot;, MB_OK);
}
</code></pre>
<p>Bekomme hier aber die Fehlermeldung</p>
<pre><code>14 C:\Dokumente und Einstellungen\sjBlack\Desktop\Neuer Ordner (2)\main.cpp invalid conversion from `LRESULT (*)()' to `LRESULT'
</code></pre>
<p>Kennt jemand eine WinApi Datenbank, wo man Funktionen, structs und<br />
Klassen von windows.h nachschlagen kann? Bräuchte ich mal dringend.<br />
Das Recharchieren bei Google nach einzelnen Funktionen wird immer<br />
aufwändiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401672</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Mon, 12 Nov 2007 00:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 01:16:39 GMT]]></title><description><![CDATA[<p>Was du suchst, nennt sich <strong>MSDN</strong> (<strong>M</strong>icro<strong>s</strong>oft <strong>D</strong>eveloper <strong>N</strong>etwork) Library.</p>
<p>Das deutsche Nachschlagewerk für Entwickler findet sich hier: <a href="http://msdn2.microsoft.com/de-de/library/default.aspx" rel="nofollow">http://msdn2.microsoft.com/de-de/library/default.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401675</guid><dc:creator><![CDATA[schmidt-webdesign.net]]></dc:creator><pubDate>Mon, 12 Nov 2007 01:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 03:29:26 GMT]]></title><description><![CDATA[<p>Was ich suche ist das Gegenteil der MSDN <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="😡"
    /><br />
Auf dieser ver******* 5ch3!55-53!73 finde ich nie was brauche!<br />
Und wenn, wird nicht mehr erklärt als ich schon weiß!</p>
<p>Frage noch offen:</p>
<p>sjBlack schrieb:</p>
<blockquote>
<p>Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier</p>
<pre><code>wc.lpfnWndProc = WndProc;
</code></pre>
<p>Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,<br />
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?</p>
<p>Dass der Compiler keien Fehelermeldung wirft, die Aktualparameterliste würde<br />
fehlen, sondern die Kopie der Funktion zugewiesen wird und ohne<br />
dieses Attribut ist es nicht möglich.</p>
<p>Spiele damit rum, damit ich aus dem Fensterprogramm auch wirklich alles verstehe:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

// Zum Empfangen und Auswerten der messages
LRESULT CALLBACK WndProc();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	struct test
	{
		LRESULT funktion;
		int aufrufe;
	} bla;

	bla.funktion = WndProc;

	while (int i = 0; i &lt;= 4; i++)
	{
		bla.funktion();
		bla.aufrufe++;
	}

	return 0;
}

//
LRESULT CALLBACK WndProc()
{
	MessageBox(NULL, &quot;Hallo&quot;, &quot;hi&quot;, MB_OK);
}
</code></pre>
<p>Bekomme hier aber die Fehlermeldung</p>
<pre><code>14 C:\Dokumente und Einstellungen\sjBlack\Desktop\Neuer Ordner (2)\main.cpp invalid conversion from `LRESULT (*)()' to `LRESULT'
</code></pre>
</blockquote>
<p>please</p>
<p>// edit<br />
Und noch eine Frage</p>
<pre><code>case WM_CLOSE:
			DestroyWindow(hWnd);
		break;
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
</code></pre>
<p>Kann man sich das nicht sparen mit:</p>
<pre><code>case WM_CLOSE:
			DestroyWindow(hWnd);
			PostQuitMessage(0);
			return 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1401677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401677</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Mon, 12 Nov 2007 03:29:26 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 10:32:26 GMT]]></title><description><![CDATA[<blockquote>
<p>Kann man sich das nicht sparen mit:</p>
<pre><code>case WM_CLOSE: 
            DestroyWindow(hWnd); 
            PostQuitMessage(0); 
            return 0;
</code></pre>
</blockquote>
<p>Könnte man...<br />
Aber ich sage mal: Nein. Das kann man nicht. Wenn Dein Fenster direkt durch DestroyWindow zerstört werden würde, dann wird kein PostQuitMessage ausgelöst.<br />
Weil in diesem Moment WM_CLOSE nicht gesendet wird.</p>
<p>Besser und protabel (best practice) ist es einfach erst auf WM_DESTROY hin erst PostQuitMessage zu senden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401767</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 12 Nov 2007 10:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 10:46:36 GMT]]></title><description><![CDATA[<p>sjBlack schrieb:</p>
<blockquote>
<p>Holla.<br />
Ich habe mich entschlossen, mir die Windows Api anzueignen,<br />
da ich mich von Visual Basic komplett verabschieden will.<br />
Die grundlagen von C++ kenne ich ja schon.</p>
<p>Bin schon mit dieser Seite dieses Tutorials durch:<br />
<a href="http://pronix.linuxdelta.de/C/win32/win32_4.shtml" rel="nofollow">http://pronix.linuxdelta.de/C/win32/win32_4.shtml</a></p>
<p>Ein Haufen Sachen sind für mich nicht nachvollziehbar.<br />
Das meißte habe ich in diesem Turorial nur<br />
heuristisch zum reinpasten gelernt <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="🙄"
    /></p>
</blockquote>
<p>Das ist zum Lernen aber nicht unbedingt sinnvoll... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<blockquote>
<p>Zum Beispiel verstehe ich nicht, wieso man ein Fenster<br />
bei Windows registriert mit einem struct, dass man<br />
al Argument zum Registrieren übergibt und dann noch<br />
das Fenster erstellt!?</p>
</blockquote>
<p>Da gibt es nichts zu verstehen, es ist eben so. Ein Sinn liegt darin, daß der Fenstermanager überprüft, ob die Daten des registrierten Fensters gültig sind. Falls nicht, kann das Fenster nicht erstellt werden und er gibt &quot;RegisterClassEx()&quot; einen Fehlerwert zurück, den man analysieren kann. Ohne diese Prodzedur würde CreateWindowEx wohl Datensalat produzieren.</p>
<blockquote>
<p>Jede 2e Zeile in diesem Tutorial heißt es &quot;dafür schauen sie<br />
bitte in der msdn nach&quot;, &quot;dazu genauer unter der msdn&quot; ich<br />
meine, wenn man diese Andeutungen weglässt, hat man bloß noch<br />
code zum pasten, jetzt mal im Ernst!</p>
</blockquote>
<p>Internettutorials sind ein gutes Hilfsmittel zum Einstieg, reichen aber nicht aus, um sich eingehender damit zu befassen. Zum einen kannst Du Dir mehrere Tuts reinziehen, zum anderen gibt es dafür auch Bücher (Charles Petzold). Aber die meisten und umfangreichsten Infos gibt eben die MSDN. Man muß nur mit ihr umgehen können.</p>
<blockquote>
<p>Aus einem msdn Artikel wurde ich in meinem ganzen Leben noch nicht schlau!<br />
Ich schaffe es nicht einmal, per Google eine Erklärung<br />
zum typedef LRESULT zu finden, wozu er a ist bzw. was er bringt.<br />
Wieso LRESULT CALLBACK? Ist doch nur eine simple Funktion,<br />
die durch wc ausgelöst wird.<br />
Was bringt der MainClassName? Was bringt Translate Message?</p>
</blockquote>
<p>LRESULT CALLBACK ist der Funktionstyp. Der ist in Windows.h definiert. Sowas steht im Petzold.<br />
MainClassName ist nur der Name der Fensterklasse, der dem Strukturelement wc.lpszClassName zugewiesen wird. Wenn Du die C++-Grundlagen kannst, müßtest Du das eigentlich wissen.</p>
<p>Zu TranslateMessage:</p>
<p>Borland-Hilfe schrieb:</p>
<blockquote>
<p>The TranslateMessage function translates virtual-key messages into character messages. The character messages are posted to the calling thread's message queue, to be read the next time the thread calls the GetMessage or PeekMessage function.</p>
<p>BOOL TranslateMessage(</p>
<p>CONST MSG *lpMsg // address of structure with message<br />
);</p>
<p>Parameters</p>
<p>lpMsg</p>
<p>Points to an MSG structure that contains message information retrieved from the calling thread's message queue by using the GetMessage or PeekMessage function.</p>
<p>Return Values</p>
<p>If the message is translated (that is, a character message is posted to the thread's message queue), the return value is nonzero.<br />
If the message is not translated (that is, a character message is not posted to the thread's message queue), the return value is zero.<br />
Windows NT: The TranslateMessage function returns a nonzero value for function and arrow keys as well as for character and digit keys.</p>
<p>Remarks</p>
<p>The TranslateMessage function does not modify the message pointed to by the lpMsg parameter.<br />
WM_KEYDOWN and WM_KEYUP combinations produce a WM_CHAR or WM_DEADCHAR message. WM_SYSKEYDOWN and WM_SYSKEYUP combinations produce a WM_SYSCHAR or WM_SYSDEADCHAR message.<br />
TranslateMessage produces WM_CHAR messages only for keys that are mapped to ASCII characters by the keyboard driver.</p>
<p>If applications process virtual-key messages for some other purpose, they should not call TranslateMessage. For instance, an application should not call TranslateMessage if the TranslateAccelerator function returns TRUE.</p>
</blockquote>
<p>Die Fensterklasse ist eine Kathegorisierung, um bestimmte Attribute für alle Fenster dieser Klasse zu setzen (mit wc.cbClassExtra). Das nähert sich der OOP an.</p>
<blockquote>
<p>Ich will zuerst mal einen simplen Texteditor coden.<br />
Verdammt, ich weiß nichtmal, wie ich das Problem schildern soll!!!</p>
<p>// edit<br />
Hab jetzt ne Runde recharchiert und kann das meißte jetzt nachvollziehen.<br />
Ein Problem fällt mir jetzt aber auf. Wenn ich das Fenster schliesse,<br />
läuft das Programm noch weiter im Taskmanager.</p>
<pre><code class="language-cpp">MessageBox(NULL, &quot;test&quot;, &quot;test&quot;, MB_OK);
	return wmsg.wParam;
}
</code></pre>
<p>Habe vor return wmsg.wParam zur Fehleranalyse ne messagebox eingefügt.<br />
Sie wird nicht ausgegeben. Die Fensterklasse wird korrekt zerstört<br />
nach dem Schließen des Fensters aber die Schlefife geht noch weiter.<br />
Ich kann nichts über die Rückgabe dieser Funktion reecharchieren bzw<br />
wann sie mal false zurückgibt.</p>
<p>Die PostQuitMessage sendet dem Fenster die Nachricht WS_QUIT, dass<br />
die Unendlich-Schleife beendet wird. Aber wozu ist der Parameter?<br />
PostQuitMessage(<strong>0</strong>);</p>
</blockquote>
<p>PostQuitMessage teilt dem Fenster (und dem OS) mit, daß das Programm beendet wird und der dafür reservierte Speicher freigegeben werden kann. Auch das steht im Petzold.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401772</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Mon, 12 Nov 2007 10:46:36 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 12:40:08 GMT]]></title><description><![CDATA[<p>sjBlack schrieb:</p>
<blockquote>
<p>Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier</p>
<pre><code>wc.lpfnWndProc = WndProc;
</code></pre>
<p>Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,<br />
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?</p>
</blockquote>
<p>Einfach gesagt ist eine Callback-Funktion eine Funktion, die zwar im Quellcode vorhanden ist, aber <em>nirgendwo</em> aufgerufen wird.<br />
Das mag ja verwirrend sein, daß man bei der WinAPI Funktionen schreiben muß, die man sowieso nicht aufruft. <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 />
Aber wenn Du via RegisterClassEx () eine selbstdefinierte Fensterklasse registrierst, dann <em>braucht das Betriebssystem</em> u.a. noch die Adresse einer bestimmten Funktion.<br />
Diese Funktion wird immer dann aufgerufen wenn das Fenster eine Botschaft verarbeiten soll/muß.<br />
Aufgerufen wird sie aber <em>vom Betriebssystem</em>. Deshalb Callback.<br />
Als Callback-Funktion darf man allerdings keine x-beliebige Funktion schreiben.<br />
Das Betriebssystem erwartet als Callback eine Funktion die folgende &quot;Signatur&quot; hat :</p>
<pre><code class="language-cpp">1       2                3          4          5              6
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam);

1   Rückgabetyp
2   Aufrufkonvention
2-6 Parameter (Argumente)
</code></pre>
<p>Mit &quot;wc.lpfnWndProc = WndProc;&quot; übergibt man dem Betriebssystem nur die Adresse der (selbstgeschriebenen) Callback-Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401815</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Nov 2007 12:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 14:07:07 GMT]]></title><description><![CDATA[<p>merker schrieb:</p>
<blockquote>
<p>sjBlack schrieb:</p>
<blockquote>
<p>Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier</p>
<pre><code>wc.lpfnWndProc = WndProc;
</code></pre>
<p>Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,<br />
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?</p>
</blockquote>
<p>Einfach gesagt ist eine Callback-Funktion eine Funktion, die zwar im Quellcode vorhanden ist, aber <em>nirgendwo</em> aufgerufen wird.</p>
</blockquote>
<p>Interessant. Wie soll ein Programm funktionieren, wenn LRESULT CALLBACK WndProc NIE aufgerufen wird?</p>
<blockquote>
<p>Das mag ja verwirrend sein, daß man bei der WinAPI Funktionen schreiben muß, die man sowieso nicht aufruft. <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 />
Aber wenn Du via RegisterClassEx () eine selbstdefinierte Fensterklasse registrierst, dann <em>braucht das Betriebssystem</em> u.a. noch die Adresse einer bestimmten Funktion.<br />
Diese Funktion wird immer dann aufgerufen wenn das Fenster eine Botschaft verarbeiten soll/muß.</p>
</blockquote>
<p>ALLE Fensterklassen haben eine Funktion. Bei den vorregistrierten Fensterklassen (MessageBox, Button, Editfelder o.ä.) ist die Funktion schon von der API vorgegeben, bei selbsterstellten Klassen oder Dialogen muß man sie eben selbst schreiben.</p>
<blockquote>
<p>Aufgerufen wird sie aber <em>vom Betriebssystem</em>.</p>
</blockquote>
<p>Also doch..?</p>
<blockquote>
<p>Deshalb Callback.<br />
Als Callback-Funktion darf man allerdings keine x-beliebige Funktion schreiben.<br />
Das Betriebssystem erwartet als Callback eine Funktion die folgende &quot;Signatur&quot; hat :</p>
<pre><code class="language-cpp">1       2                3          4          5              6
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam);

1   Rückgabetyp
2   Aufrufkonvention
2-6 Parameter (Argumente)
</code></pre>
<p>Mit &quot;wc.lpfnWndProc = WndProc;&quot; übergibt man dem Betriebssystem nur die Adresse der (selbstgeschriebenen) Callback-Funktion.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1401874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401874</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Mon, 12 Nov 2007 14:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 15:14:40 GMT]]></title><description><![CDATA[<p>thx, elektronix. Ich habe mir schon den Kopf zerbrochen beim<br />
Versuch zu Verstehen, was er mir sagen wollte.</p>
<p>Ja, aber ist Callback jetzt ein Attribut?<br />
Oder ist es ein typedef für einen pointer auf eine LRESULT Funktion?<br />
Die Fensterstruktur verlangt ja doch eine Funktion als Referenz zw.<br />
einen Pointer zu der Funktion, die als dessen Fensterprozedur<br />
verwendet werden soll. Also nehme ich an, CALLBACK ist ein typedef<br />
für einen pointer auf eine Funktion.</p>
<p>Ich möchte alles detailgenau wie möglich wissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401908</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Mon, 12 Nov 2007 15:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 16:03:53 GMT]]></title><description><![CDATA[<p>Derartige Details kannst du im Petzold nachlesen, wenn es für Dich wichtig ist (ich habs im Moment nicht auf Lager). Klar ist, daß Fensterfunktionen immer CALLBACK sein müssen, aber nicht unbedingt LRESULT. BOOL o.ä. geht auch (bei vielen Dialogfunktionen wird BOOL CALLBACK gesetzt). CALLBACK ist demnach ein Attribut für den Rückgabetyp. Der Zeiger auf die Funktion heißt lpfn (long pointer to Function), z. B. bei wc.lpfnWndProc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401936</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Mon, 12 Nov 2007 16:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 17:01:12 GMT]]></title><description><![CDATA[<p>Kannst du mir die URL zu Petzold pasten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401995</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Mon, 12 Nov 2007 17:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 17:36:13 GMT]]></title><description><![CDATA[<p>Ein gutgemeinter Rat:<br />
Die WINAPI ist mMn sehr umständlich und alles andere als produktiv. Bevor Du dich hier ewig lang mit dem Zeug rumschlägst, würde ich dir eher empfehlen eine GUI-API wie wxWidgets, QT oder WinGTK zu verwenden. Wobei ich zu wxWidgets tendieren würde. Das Programmieren damit geht verdammt schnell von der Hand und ist saueinfach, wenn man den Einstieg mal geschafft hat. Ausserdem hat wx eine sehr gute Dokumentation.<br />
Einfache Programme sind damit recht fix geschrieben und komplexe Programme sind auch kein Problem. Vor allem wenns dann mal ans Enwtickeln eigener Widgets (Buttons etc) geht, ist diese API Gold wert.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402022</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 12 Nov 2007 17:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Mon, 12 Nov 2007 17:49:02 GMT]]></title><description><![CDATA[<p>Ich will aber erst das meißte der WinApi beherrschen,<br />
dann die MFC lernen und danach GUI.<br />
Frage: Wie bekomme ich jetzt ein TextBox Control in<br />
das Hauptfenster?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402030</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Mon, 12 Nov 2007 17:49:02 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Tue, 13 Nov 2007 08:13:48 GMT]]></title><description><![CDATA[<p>sjBlack schrieb:</p>
<blockquote>
<p>Kannst du mir die URL zu Petzold pasten?</p>
</blockquote>
<p>Ist keine URL, sondern eine ISBN:</p>
<p><a href="http://www.amazon.de/Windows-Programmierung-m-CD-ROM-Charles-Petzold/dp/3860634879" rel="nofollow">http://www.amazon.de/Windows-Programmierung-m-CD-ROM-Charles-Petzold/dp/3860634879</a></p>
<p><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="😮"
    /> Das Buch ist ja um ein Drittel billiger als vor 2 Jahren...</p>
<blockquote>
<p>Ich will aber erst das meißte der WinApi beherrschen,<br />
dann die MFC lernen und danach GUI.</p>
</blockquote>
<p>Sehr vernünftig <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="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> . Aber nur zur Klärung: GUI ist der Oberbegriff für &quot;Graphical User Interface&quot;. Also ist die WinAPI ein GUI. wxWidgets, GTK, MFC u. a. sind objektorientierte Kapselungen der WinAPI, enthalten aber nicht die gesamte API, sondern nur die wichtigsten Funktionen. Oft genung muß man trotz MFC auf das &quot;Rohprodukt&quot; zurückgreifen. Also nicht irre machen lassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402253</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Tue, 13 Nov 2007 08:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Tue, 13 Nov 2007 20:34:00 GMT]]></title><description><![CDATA[<p>mfc kann ich mit dev-c++ vergessen.<br />
Ich weiß jetzt aber immer noch nicht, wie ich eine TextBox ins Fenster krieg!!!<br />
Für visual basic find ich bei Google jeden Scheiß, aber für die WinApi<br />
kann ich tagelang googlen und weiß noch immer nicht, wie ich eine<br />
simple TextBox ins Fenster bekomme!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402782</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Tue, 13 Nov 2007 20:34:00 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Tue, 13 Nov 2007 20:53:51 GMT]]></title><description><![CDATA[<p>&quot;CALLBACK&quot; hat nichts großartig zu sagen, dahinter steckt (in der &quot;windef.h&quot;):</p>
<pre><code class="language-cpp">#define CALLBACK    __stdcall
</code></pre>
<p>...und das gibt lediglich die <a href="http://de.wikipedia.org/wiki/Aufrufkonvention" rel="nofollow">Aufrufkonvention</a> an.</p>
<p>In der winuser.h findet man noch:</p>
<pre><code class="language-cpp">typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
</code></pre>
<p>WNDPROC (zu finden als Member von WNDCLASS oder WNDCLASSEX) ist demnach nichts anderes als ein Zeiger auf eine Funktion vom Typ</p>
<pre><code class="language-cpp">LRESULT CALLBACK LustigerFunktionsname(HWND blupp, UINT bla, WPARAM bli, LPARAM blo)
</code></pre>
<p>Textfeld erzeugen:</p>
<pre><code class="language-cpp">HWND textWnd=CreateWindow(&quot;EDIT&quot;,&quot;blupp&quot;,WS_CHILD|WS_VISIBLE,10,10,200,20,HauptFensterHandle,NULL,hInstance,NULL);
</code></pre>
<p>...was die einzelnen Parameter einer WinAPI-Funktion sollen oder die Member einer Struktur kann man relativ gut in der msdn nachlesen.<br />
Sehr zu empfehlen ist auch die Doku im &quot;Platform SDK&quot; oder &quot;Windows SDK&quot; - Und zwar deshalb weil man da über den Index sehr schnell Funktionen etc. nachschlagen kann und weil die msdn-online wie ich finde kacken lahm ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402788</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Tue, 13 Nov 2007 20:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Tue, 13 Nov 2007 21:17:44 GMT]]></title><description><![CDATA[<p><a href="http://msdn2.microsoft.com/de-de/default.aspx" rel="nofollow">http://msdn2.microsoft.com/de-de/default.aspx</a><br />
Wo? Sagt mir doch einer, wo????<br />
Wieso schmeißt mir imemr jeder die msdn an den Kopf?<br />
Sagt mir einer, wo ich auf dieser Seite<br />
nach Funktionen, structs und so weiter nachschlagen kann!!</p>
<p><a href="http://www.microsoft.com/germany/msdn/library/windows/default.mspx?mfr=true" rel="nofollow">http://www.microsoft.com/germany/msdn/library/windows/default.mspx?mfr=true</a><br />
oder wenn ich hier nen Funktionsnamen eingebe, krieg ich<br />
ein paar Links zu Artikeln anderer Seiten, die nichts<br />
mit dem zutun haben, wonach ich suchte. <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="😡"
    /></p>
<p>P.S.: Danke für die TextBox / EDIT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402792</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Tue, 13 Nov 2007 21:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Tue, 13 Nov 2007 21:40:05 GMT]]></title><description><![CDATA[<p>Tipp: google nach: &quot;msdn2 Funktionsname&quot;<br />
z.B. &quot;msdn2 CreateWindow&quot; ergibt als ersten Treffer:<br />
<a href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms632679.aspx</a></p>
<p>Windows Controls:<br />
<a href="http://msdn2.microsoft.com/en-us/library/bb773173.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/bb773173.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402793</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Tue, 13 Nov 2007 21:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to Neu in WinApi on Tue, 13 Nov 2007 21:47:11 GMT]]></title><description><![CDATA[<p>JAWOLL!!! Endlich! Dankesehr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402797</guid><dc:creator><![CDATA[sjBlack]]></dc:creator><pubDate>Tue, 13 Nov 2007 21:47:11 GMT</pubDate></item></channel></rss>