GDI Problem



  • also ich habe mir ein buch gekauft über gdi. und ich bin schon im 2ten kapietel...seit 2 wochen... naja egal! und das is ein code beispiel das ich meinse wissens genau abgeschreieben hab!

    #include <windows.h>
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	WNDCLASS WndClass;
    	WndClass.style = 0;
    	WndClass.cbClsExtra = 0;
    	WndClass.cbWndExtra = 0;
    	WndClass.lpfnWndProc = WndProc;
    	WndClass.hInstance = hInstance;
    	WndClass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
    	WndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
    	WndClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    	WndClass.lpszMenuName = 0;
    	WndClass.lpszClassName = "WinProc";
    
    	RegisterClass(&WndClass);
    
    	HWND hWindow;
    
    	hWindow = CreateWindow("WinProc", "FensterGDI", WS_OVERLAPPEDWINDOW, 0, 0, 600, 460, NULL, NULL, hInstance, NULL);
    
    	ShowWindow (hWindow, nCmdShow);
    
    	UpdateWindow (hWindow);
    
    	MSG Message;
    	while (GetMessage(&Message, NULL, 0, 0))
    	{
    		DispatchMessage(&Message);
    	}
    	return (Message.wParam);
    }
    
    LRESULT CALLBACK WndProc (HWND hWnd, UINT uiMessage, WPARAM wParam,LPARAM lParam)
    {
    	switch(uiMessage)
    	{
    	case WM_PAINT:
    		HPEN hPen;
    		HPEN hPenalt;
    		HBRUSH hBrush;
    		HBRUSH hBrushalt;
    		hBrush = CreateSolidBrush (RGB(255,100,0));
    		hPen = CreatePen (PS_SOLID,2,RGB(0,255,255));
    		HDC hdc;
    		PAINTSTRUCT ps;
    		hdc = BeginPaint (hWnd, &ps);
    		//hBrushalt = SelectObject (hdc, hBrush); ///Hier fehler
    		//hPenalt = SelectObject (hdc, hPen);     ///Und hier fehler
    		MoveToEx (hdc, 20, 20, NULL);
    		LineTo (hdc, 100, 100);
    		Rectangle (hdc, 120, 20 ,240, 140);
    		RoundRect (hdc, 260, 20, 240, 140, 20, 20);
    		RECT rect;
    		SetRect (&rect, 20, 260, 240, 420);
    		FrameRect (hdc, &rect, hBrush);
    		SetRect (&rect, 260, 260, 420, 420);
    		FillRect (hdc, &rect, hBrush);
    		Ellipse (hdc, 440, 260, 480, 420);
    		SelectObject (hdc, hBrushalt);
    		SelectObject (hdc, hPenalt);
    		DeleteObject (hPen);
    		DeleteObject (hBrush);
    		EndPaint (hWnd, &ps);
    		return 0;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	default:
    		return DefWindowProc (hWnd, uiMessage, wParam, lParam);
    	}
    }
    

    warum sind das fehler???
    in beiden fällen kommt diese fehler meldeung

    F:\Programmierung\c++\visual cpp\gdi\source.cpp(51) : error C2440: '=' : 'void *' kann nicht in 'struct HBRUSH__ *' konvertiert werden
            Konvertierung von 'void*' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung
    

    plz help!
    mfg



  • Versuchs mal mit:

    hBrushalt = (HBRUSH)SelectObject (hdc, hBrush);
    hPenalt = (HPEN)SelectObject (hdc, hPen);
    

    SelectObject gibt kein HBRUSH zurück sondern einen allgemeinen Zeiger (void),
    so dass man dem Compiler sagen muss, ob man diese uminterpretation wirklich
    möchte.



  • jo geht! thx 😃

    EDIT: im nächsten kapitel kommt ein linker fehler

    --------------------Konfiguration: source - Win32 Debug--------------------
    Linker-Vorgang läuft...
    LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
    Debug/source.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    
    source.exe - 2 Fehler, 0 Warnung(en)
    

    was heißt die meldung?



  • D.h. so ungefähr, das Symbol main konnte nicht aufgelöst werden.

    Bye, TGGC (Zu viele Primitive hier.)



  • Mach keine Konsolenanwendung sondern eine Win32-Anwendung (falls du MSVC benützt: Neu -> Projekt -> (hier jetzt Win32 auswählen)).

    MfG SideWinder



  • das muss doch auch so gehn! bei der win32 anwendung blick ich ned durch was jetzt wo hin kommt! aber trozdem danke


Anmelden zum Antworten