WIndows-Grundgerüst



  • Mir wird in Visual c++ 2010 express ein Fehler angeziegt bei dieser Stelle:
    (szClassName und "Das erste Fenster"

    hWnd = CreateWindowEx (	NULL,
    							szClassName,
    							"Das erste Fenster!",
    							WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    							100, 100,
    							300, 250,
    							NULL,
    							NULL,
    							hInst,
    							NULL);
    
    #include <Windows.h>
    #include "stdafx.h"
    
    LRESULT CALLBACK WindowProc (HWND hWnd, UINT messagem, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow)
    {
    	WNDCLASSEX	windowclass;
    	HWND		hWnd;
    	MSG			message;
    
    	//FENSTERNAME//
    	const char szClassName[] = "Erstes Fenster";
    
    	windowclass.cbSize = sizeof (WNDCLASSEX);
    	windowclass.style = CS_HREDRAW | CS_VREDRAW;
    	windowclass.lpfnWndProc = WindowProc;
    	windowclass.cbClsExtra = 0;
    	windowclass.cbWndExtra = 0;
    	windowclass.hInstance = hInst;
    	windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    	windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    	windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);
    
    	//Hintergrundfarbe festlegen
    	windowclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND +1;
    
    	//Kein Menü
    	windowclass.lpszMenuName = NULL;
    	windowclass.lpszClassName = szClassName;
    	if (!RegisterClassEx (&windowclass) )
    		return (0);
    
    	hWnd = CreateWindowEx (	NULL,
    							szClassName,
    							"Das erste Fenster!",
    							WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    							100, 100,
    							300, 250,
    							NULL,
    							NULL,
    							hInst,
    							NULL);
    	if(hWnd == NULL)
    		return (0);
    	while(GetMessage (&message, NULL, 0, 0) )
    	{
    	TranslateMessage(&message);
    	DispatchMessage (&message);
    	}
    		return (int) (message.wParam);
    
    }
    
    LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message)
    	{
    	case WM_DESTROY:
    		{
    			PostQuitMessage (0);
    			return (0);
    		}
    
    	case WM_KEYDOWN:
    		{
    			switch(wParam)
    			{
    				case VK_ESCAPE:
    				{
    				PostQuitMessage (0);
    				return (0);
    				}
    			}
    		}break;
    	}
    		return (DefWindowProc (hWnd, message, wParam, lParam) );
    }
    


  • Schau dir am besten die Punkte 3, 6 und 8 hiervon an.



  • Achso ok... Naja, ich frage mich nur, was an diesen Zeilen falsch seinen soll.

    Fehlermeldung ist, dass er const char nicht in LP konvertieren kann.

    Also hier weiß niemand eine Lösung, bevor ich noch ein Thema "drüben" aufmache?

    LG



  • #include "stdafx.h" sollte an erster Stelle in der Datei stehen. Code davor wird ignoriert.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Deine "Beschreibung" ist einfach absolut nichts sagend. Es fehlt die genaue Fehlermeldung und die darin enthaltene Zeilenangabe, etc.

    Eine mögliche Fehlerursache könnte sein, das du in deinem Projekt den Zeichensatz auf Unicode stehen hast. Den solltest du auf Multibyte umstellen oder dich im Internet umsehen, wie man mit Unicode arbeitet.

    Aber dazu passt deine "Fehlermeldung" nicht. Die würde dann nämlich etwas mit LPCWSTR enthalten. Aber vielleicht benutzt du ja auch gar kein Visual Studio, sondern was anderes...

    Wie du siehst fehlen zu viele Angaben, um dir helfen zu können.



  • also bei MIR funktioniert genau der code mit nur einer änderung
    hab den stdafx.h rausgenommen
    hatte keine lust das projekt auf precompiled header umzuschalten



  • Skym0sh0 schrieb:

    also bei MIR funktioniert genau der code mit nur einer änderung
    hab den stdafx.h rausgenommen
    hatte keine lust das projekt auf precompiled header umzuschalten

    dto, sogar ohne Warnung...



  • Das Problem hat ja offenbar auch nix mit PCH zu tun. Visual C++ definiert per default UNICODE. Am Besten TCHAR und das TEXT() Makro verwenden dann gehts problemlos mit UNICODE und ANSI. Alternativ explizit UNICODE oder ANSI verwenden...



  • sagst du uns das?

    wenn man ein paar mal so ein windows gerüst geschreiben hat sollte man das wissen mit dem unicode...

    wo ist eigentlichd er unterschied zwischend en beiden hier:

    const char * unicode = L"Test1";
    

    und

    const char * edocinu = TEXT("Test2");
    


  • Skym0sh0 schrieb:

    wo ist eigentlichd er unterschied zwischend en beiden hier

    Das Erste ist immer falsch und das Zweite nur wenn UNICODE definiert ist 😉

    Entweder so:

    const char* bla = "Test";
    

    oder so:

    const wchar_t* bla  = L"Test";
    

    und am Besten so:

    const TCHAR* bla = TEXT("Test");
    


  • const TCHAR* einText = TEXT("Test1");
    // entspricht bei aktiviertem Unicode:
    const wchar_t* einText=L"Test1";
    // und ohne Unicode:
    const char* einText="Test1";
    
    // L"Test1" ergibt völlig unabhängig von Unicode-Einstellungen immer eine wchar_t-Zeichenkette.
    

    Mein Tipp: Statt char immer TCHAR verwenden, und statt "bla" immer TEXT("bla"). Dann kann einem egal sein ob Unicode an oder aus ist (es sei denn man benutzt Drittanbieter-Komponenten, die kein Unicode können oder nur Unicode können ;D)

    (Edit: Meine Güte war ich spät dran ^^)



  • ach scheisse

    in meinem aktuellen projekt hab ich mir genau diese funktionen selbst geschrieben (ok, ist nicht schwer oder viel, aber trotzdem) und jetzt erfahre ich dass es die schon gibt?!?!?!!!!!



  • Ich seh da zwar keine Funktionen aber ja, das gibt es natürlich^^



  • funktion oder makro...
    ja nee ist klar


Log in to reply