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 meldeungF:\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