Windows Fenster GUI
-
Guten Tag Community,
Ich bin jetzt neu hier im Forum und das ist mein erster Beitrag.
Ich bin gerade dabei C++ näher kennen zu lernen. Da es für eine Windows Application mit einer GUI ja nicht so einfach ist wie bei den .Net Sprachen bzw. Windows Forms, habe ich ein paar Fragen und Probleme bzgl. einer Win32 GUI in C++.
Ich habe folgendes Tutorial gelesen und versucht nachzubauen.
http://www.winprog.org/tutorial/simple_window.htmlJedoch treten bei mir komischerweiße Fehler auf.
Ich habe zunächst eine Quelldatei namens main.cpp erstellt.
Und darin den Code eingefügt. Jedoch kommen auch Errors wenn ich den ganzen Code von der Seite einfüge sprich C&P.
Was genau kommen für Fehler?
z.B bei dieser Line einer MessageBox:
MessageBox(NULL, "Window Registration Failed!", "Error!",MB_ICONEXCLAMATION | MB_OK);
IntelliSense: Das Argument vom Typ ""const char *"" ist mit dem Parameter vom Typ ""LPCWSTR"" inkompatibel.
Oder hier bei der Fenster Konfiguration:
IntelliSense: Ein Wert vom Typ ""const char *"" kann keiner Entität vom Typ ""LPCWSTR"" zugewiesen werden.
wc.lpszClassName = g_szClassName;
Und hier bei dem "Step 2"
IntelliSense: Das Argument vom Typ ""const char *"" ist mit dem Parameter vom Typ ""LPCWSTR"" inkompatibel.
hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName,//Die Zeile "The title of my window", //Und die Zeile
Ich hoffe ihr könnt mir weiterhelfen.
MFG
-
Warscheinlich fehlen dir die Header Dateien füge mal
#include <windows.h>
vor deine Code ein. Je nach aufgerufener Funktion musst du weitere Headerdateien includieren.
-
Nein, es fehlt daran, dass Standardmäßig bei einem neuen Projekt UNICODE definiert ist. Dies kann man in den Projekt-Einstellungen jedoch auf ANSI ändern.
Ich finde ja dass es ein gewaltiger Schmerz ist in UNICODE mit der WinAPI zu arbeiten. Falls du es jedoch trotzdem mal versuchen willst: Setze vor jedes " ein L davor, also so:
MessageBox(NULL, L"Window Registration Failed!", L"Error!",MB_ICONEXCLAMATION | MB_OK);
Du solltest dir auf jedenfall einmal die Datentypen durchschauen.
Außerdem ist (fast) jede WinAPI-Funktion in 2 Varianten da. Einmal in UNICODE und einmal in ANSI. Das hast du wahrscheinlich auch schon gemerkt, da zB.MessageBox
nur eindefine
ist.
Es gibtMessageBoxA
für ANSI und es gibtMessageBoxW
für UNICODE (wchar_t oder LPCWSTR).
-
Oder generell das _T (oder TEXT) Makro benutzen:
MessageBox(NULL, _T("Window Registration Failed!"), _T("Error!"), MB_ICONEXCLAMATION | MB_OK);
-
Danke funktioniert soweit, jetzt ist nur noch das Problem, das mit dem da :
hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName,//Die Zeile L"The title of my window",
Da erkennt er folgenden Fehler:
IntelliSense: Das Argument vom Typ ""const char *"" ist mit dem Parameter vom Typ ""LPCWSTR"" inkompatibel.Definiert:
const char g_szClassName[] = ""LAUNCHERTITLE" "lVERSION"";
-
const wchar_t ...
Aber wenn du auf die Idee selber nicht kamst, solltest du das mit WinAPI vielleicht noch einmal überdenken.