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=3

    Eine 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.



  • @dot

    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 😉


Anmelden zum Antworten