Fenster erstellen
-
ich hoffe ich hab mit obiger Themenbeschreibung das richtige Unterforum gewählt..
Ich versuche mit folgendem Code ein Fenster zu erstellen:
#include <stdio.h> #include "stdafx.h" #include <stdlib.h> #include <Windows.h> int main() { HWND WINAPI CreateWindowEx( _In_ DWORD dwExStyle, _In_opt_ LPCTSTR lpClassName, _In_opt_ LPCTSTR lpWindowName, _In_ DWORD dwStyle, _In_ int x, _In_ int y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam ); ATOM WINAPI RegisterClassEx( _In_ const WNDCLASSEX *lpwcx ); BOOL WINAPI ShowWindow( _In_ HWND Fenster, _In_ int nCmdShow ); HWND Fenster = CreateWindowEx(WS_EX_ACCEPTFILES,(LPCWSTR)L"Hallo",(LPCWSTR)L"Hallo!",WS_CAPTION,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,NULL,NULL); ShowWindow(Fenster,SW_SHOW); UpdateWindow(Fenster); system("PAUSE"); }
Ergebnis:
Das Programm debugt und compiliert fehlerfrei. Aber es erscheint nur die CMD-Konsole, wo auf eine Eingabe gewartet (system(Pause)) wird. Dann hört das Programm auf, ohne dass ein Fenster erscheint.
Muss ich das noch registrieren ? Sind die NULLen bei den Parametern hinten falsch?Ich habe alles, bis auf die Zeile mit HWND Fenster = CreateWindowsEx(.....) aus der msdn.microsoft.com-Seite reinkopiert. Die _In_'s sind überflüssig, so wie es scheint. Hab sie aus Faulheit drin gelassen.
Dann stieß ich unter anderem noch auf :
http://win-api.de/tutorials.php?tutid=3Eine sehr gute Seite eigentlich...
Aber wenn ich die Sachen (bis auf ein paar Abweichungen von den Variablen natürlich) übernehme, kennt der Compiler plötzlich gar nichts. Ihm fehlt angeblich überall immer ein Semikilon usw. ....und das "hInstance" mag er auch nie, irgendwie. (Außer im Code oben).Ich arbeite mit dem Buch "Spieleprogrammierung mit C und Direct 9x in 21 Tagen" und die Codes, die da drin stehen mag mein komischer Compiler ( Visual Studio 2010
lol ) auch nicht. Also da ist - einfach und kurz erklärt - JEDE Zeile für ihn falsch.^^
Besipielsweise setzten (eigentlich alle XD) beim Parameter "LPCTSTR lpClassName," einfach "...." ein. Aber bei mir MUSS das (LPCWSTR)L"..." sein...
Kann mir jemand sagen, was da noch fehlt ? (mir egal ob englisch oder deutsch)
-
int main() ist die Einstiegsfunktion für Konsolenanwendungen, Für Windows-Anwendungen ist int WinApi WinMain(....) vorgesehen. Am besten ein lauffähiges Beispiel für Hello World für Windows suchen oder den Petzold lesen!
-
LOL danke für den Tipp !!!
Ich hab grad einfach ein neues Projekt geöffnet und diesmal gesagt :
"Win 32 Form" (oder so ...)statt
"Konsolenprogramm"
Und jetzt zeigt er das Fenster an !
Danke
-
Prof. Anfänger schrieb:
Ergebnis:
Das Programm debugt und compiliert fehlerfrei. Aber es erscheint nur die CMD-Konsole, wo auf eine Eingabe gewartet (system(Pause)) wird. Dann hört das Programm auf, ohne dass ein Fenster erscheint.Wird denn überhaupt ein Fenster erzeugt? Ich würde mal vermuten dass CreateWindowEx() bereits fehlschlägt...
Wo hast du deine Fensterklasse definiert (WndProc)? Wo hast du sie registriert? Wo ist deine Nachrichtenschleife?
Prof. Anfänger schrieb:
Aber bei mir MUSS das (LPCWSTR)L"..." sein...
Nope, der Cast ist überflüssig.
-
der zeigt irgendwie sonst fehler an wenn ich das mit LPCWSTR anders mache..
aber ich hab meinen obigen Beitrag editiert. Trotzdem danke ^^
Der zeigt jetzt ein Fenster an. (allerdings nur, weil er den code schon selbst hingeschrieben hat.) XD
-
Prof. Anfänger schrieb:
der zeigt irgendwie sonst fehler an wenn ich das mit LPCWSTR anders mache..
Guck mal hier: http://www.c-plusplus.net/forum/304613#2221826