CreateWindow-Konvertierung unmöglich, nur warum???



  • Hallo, ich habe ein kleines Problem mit CreateWindow:

    ich schreibe gerade ne kleine konsolenanwendung, die ein zweites Fenster nerzeugen soll. Die Fensterklasse habe ich bereits erstellt.
    nur leider gibt mein Compiler bei folgenden Code:

    HWND hwnd = CreateWindow          // Fenster 1 
    ( 
        szName, 
        "Dies ist unser erstes kleines Fenster", 
        WS_OVERLAPPEDWINDOW, 
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
        NULL, // Handle des Elternfensters nicht vorhanden 
        NULL, 
        hI, 
        NULL 
    );
    

    folgenden Fehler aus:

    MS Visula C++ 2008 Express Edition schrieb:

    error: CreateWindowEx: Konvertierung des parameter 2 von char[14] in LPCWSTR nicht möglich.

    nur irgendwie kann ich diesen Fehler nicht wirklich beheben.
    ich habe es schon mit allem möglichen versuht:

    TEXT("Dies ist unser erstes kleines Fenster")
    

    oder mit einem c-style-cast:

    (LPCWSTR) "Dies ist unser erstes kleines Fenster"
    

    allerdings konnte ich das problem bislang nicht lösen 😞

    was ist denn am code falsch?

    im Übrigen stammt dieser Code aus folgendem Tutorial: http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api3.htm

    danke schonmal,
    andi01.



  • L"Dies ist unser erstes kleines Fenster"
    

    ?

    Wenn UNICODE definiert ist, müsste aber auch TEXT("Dies ist unser erstes kleines Fenster") bzw. _T("Dies ist unser erstes kleines Fenster") funktionieren. 😕



  • bei deinem code kommt nach includen von wchar.h dieselbe meldung 😮

    unterdessen habe ich es sogar beim konvertieren schon erfolglos mit allen sinnvollen cast-operatoren versucht:

    reinterpret_cast, static_cast, C-Style-Cast,... .

    leider blieben alle Versuche erfolglos 😞

    ist es denn überhaupt empfehlenswert unicode einzustellen und wenn ja wie mache ich das bei MS Visual C++ 2008 Express Edition?

    mfg,
    andi01.



  • Hallo,

    schau mal unter

    Projekt-Eigenschaften->Konfigurationseigenschaften->Allgemein

    und dann auf der rechten Seite bei

    Projektstandards->Zeichensatz



  • da is aber schon eingestellt

    Unicode-Zeichensatz-verwenden

    😕

    wieso geht dann das nicht?!

    übrigens habe ich es auch schon als windows-forms mit gleiem ergebnis getestet 😞 😞

    solangsam gehen mir echt die ideen aus was da falsch sein könnte...

    was ist denn am code falsch??? 😕

    danke schonmal,
    andi01.



  • Stell mal von Unicode auf "Nicht festgelegt"...



  • k mach ich ich sag dann gleiuch bescheid obs geklappt hat

    mfg,
    andi01.



  • 6.edit xDD :

    so da ich jetzt 4 probleme zwischenzeitlich selbst gelöst habe taucht schoon wieder ein neues auf =((( :

    ist das jetzt nur ein fenster oder ein echter prozess der nebenbei auch was arbeiten kann?wenn ja wie sagt man diesem was er tun soll?

    danke schonmal,
    andi01.



  • Läuft denn der Original-Code ohne Fehlermeldung, wenn Du ein frisches neues Win32-Projekt erzeugst und den Code da reinkopierst? Also mit Copy und Paste und nichts verändern...

    Igendwie macht mich dieser Satz von Dir nachdenklich:

    ich schreibe gerade ne kleine konsolenanwendung, die ein zweites Fenster nerzeugen soll.



  • jopp, jetzt gehts, habs auch oben schon editiert. aber was soll an dem satz denn komisch sein? die anwendung erzeugt eifach ein fenster. funktioniert prima.

    nur ist das fenster jetzt ein richtiger prozess der auch befehle/funktionen ausführen kann und wenn ja wie übergibt man sie dem fenster?

    danke schonmal,
    andi01.



  • Über die Window Procedure die du im WNDCLASSE Struct angegeben hast kannst du das Fenster arbeiten lassen

    MfG Tim



  • wie denn? so kann ich dem fenbster eine nachricht senden, ja. aber das fenster weis doch gar nicht wie es darauf reagieren soll!
    kann man dem nicht irgendwie sowas wie ne funktion bei multithreading schicken dass es weiß eas es machen soll?

    am besten wäre natürlich ein kleines codebeispiel 🙂 , ein link würde aber auch reichen.

    danke schonmal,
    andi01.



  • Hört sich so an als hättest du bisher nur Konsolenanwendungen programmiert, les dir halt mal ein Tutorial zur Windows Fensterprogrammierung durch, Stichwort: Eventhandler.
    Und klar weis das Fenster nicht wie es reagieren soll, dann must du eben die Fensterklasse "Kristallkugel" impelmentieren, dann macht dein Fenster all das was du willst ohne daß du eine zusätzliche Codezeile schreiben musst, OH MANN!



  • du hastrecht, bis jetzt habe ich fast ausschließlich konsolenanwendungen gemacht. ich werde mir mal das tut durchlesen.

    mfg,
    andi01.





  • ok, hab das tut gelesen, verstanden und nachprogrammiert. kann man den fenster auch selbst definierte messages senden? also nicht nur wm_close und so. wenn ja wie definiert man diese?

    mal angenommen ich will zB dass das fenster 2 zahlen addiert und diese ausgiebt. das ist ja mit standard-messages nicht möglich. wie definiere ich nun ein neue? die verarbneitung ist kein problem, nur die muss ja erstmal definiert werden.

    danke,
    andi01.



  • Mit SendMessage und PostMessage

    Naja nehmen wir mal dein Beispiel, du hast da 3 Editfelder und einen Button (mit z.B. #define MY_BUTTON1 123). Naja in 2 der Felder trägst du also Zahlen ein um diese zu addieren, dann drückst du den Button. Der Button löst jetzt das Ereignis WM_COMMAND und als LOWORD(wParam) = MY_BUTTON1 aus, tja das fängst du in deinem EventHandler ab und verarbeitest es z.B. so:

    switch(message){
    		case WM_COMMAND:{
    			switch(LOWORD(wParam)){
    				case MY_BUTTON1:{
    					CalcEdit1und2();
    					break;
    				}
    			}
    			break;
    		}
    	}
    

Log in to reply