Probleme mit eigener Klasse zum Zeichnen
-
Hi Leute,
ich bin noch etwas neu in der Programmierung von win32 Anwendungen, ich übe fleißig
Ich will momentan ein Malprogramm selbermachen, wo man auf einen Punkt klickt, daraufhin eine neue Variable einer selbstgeschriebenen Klasse erstellt wird und beim nächsten Mausklick der Variable etwas hinzugefügt wird. Seht selbst:
//In der Resource.h // class DRAWLINE { //Variablen HPEN hPenOld; int startXpos; int startYpos; int endXpos; int endYpos; HDC hdc; public: //Konstruktor DRAWLINE(HPEN hPeninto, LPARAM lParam) { hPenOld = hPeninto; startXpos = LOWORD(lParam); startYpos = HIWORD(lParam); } ~DRAWLINE() {}; //Methoden int inputend(LPARAM lParam) { endXpos = LOWORD(lParam); endYpos = HIWORD(lParam); return true; } int nowdraw(HDC hdcin) { hdc = hdcin; MoveToEx(hdc, 100, 100, NULL); LineTo(hdc, 500, 250); SelectObject(hdc, hPenOld); return true; } };
Dann gibt es noch eine Funktion draw und etwas in der WndProc
//In der WndProc() // case WM_LBUTTONDOWN: draw(hWnd, lParam); break; //Funktion draw // int draw(HWND hWnd, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); HPEN hLinePen; HPEN hPenOld; COLORREF qLineColor; qLineColor = RGB(255, 0, 0); hLinePen = CreatePen(PS_SOLID, 7, qLineColor); hPenOld = (HPEN)SelectObject(hdc, hLinePen); //Beim ersten Mausklick if( iATMDraw[1] == 1){ DRAWLINE line(hPenOld, lParam); iATMDraw[1]++; } //Beim 2. else if(iATMDraw[1] == 2){ line.inputend(lParam); iATMDraw[1]=1; InvalidateRect(hWnd, 0, FALSE); } return true; }
Momentan gibt VisualC++ aber das hier aus:
error C2065: 'line': nichtdeklarierter Bezeichner
error C2228: Links von ".inputend" muss sich eine Klasse/Struktur/Union befinden.Aber das ist doch eigentlich eine ganz normale Deklaration oder?
Achja noch 2 Fragen:
Er findet "Choosecolor()" und die Struktur "CHOOSECOLOR" nicht, obwohl ich
hiernach:
http://msdn.microsoft.com/en-us/library/ms646830(VS.85).aspx
Die windows.h und auch mal die Commdlg.h eingebunden habe.Und gibt es Arrays von meiner Klasse DRAWLINE? Dann könnte ich diese nämlich durchnummerieren... Wenn ja wie deklariere ich diese ? Hat bisher nicht geklappt...
Vielen Dank für eure Hilfe!
mfG TheCrip
-
1. Falsches Forum poste doch unter WIN32
2. DRAWLINE hast du als Klasse erstellt also wenn du line im els-zweig benutzen wilklst mußt du das schon VOR if definieren donnst ist das im else-zweig nicht bekannt
3. inputend ist ein folgefehler von 2.int nowdraw(HDC hdcin) { hdc = hdcin; MoveToEx(hdc, 100, 100, NULL); LineTo(hdc, 500, 250); SelectObject(hdc, hPenOld);// sinnlos denn du hast keinen neuen pen selektiert oder die klasseist in sich nicht schlüssig denn der select erfolt außerhalb der klasse
-
Ok ich hab das jetzt so:
//In der Resource.h // class DRAWLINE { //Variablen HPEN hPenOld; int startXpos; int startYpos; int endXpos; int endYpos; HDC hdc; public: //Konstruktor DRAWLINE() {}; ~DRAWLINE() {}; //Methoden int inputstart(HPEN hPeninto, LPARAM lParam) { hPenOld = hPeninto; startXpos = LOWORD(lParam); startYpos = HIWORD(lParam); } int inputend(LPARAM lParam) { endXpos = LOWORD(lParam); endYpos = HIWORD(lParam); return true; } int nowdraw(HDC hdcin) { hdc = hdcin; MoveToEx(hdc, 100, 100, NULL); LineTo(hdc, 500, 250); //SelectObject(hdc, hPenOld); return true; } }; // Als globale Variable oben drüber // DRAWLINE line(); //In Funktion draw() // if( iATMDraw[1] == 1){ line.inputstart(hPenOld, lParam); iATMDraw[1]++; } else if(iATMDraw[1] == 2){ line.inputend(lParam); iATMDraw[1]=1; } return true; }
Klappt trotzdem nicht:
error C2228: Links von ".inputstart" muss sich eine Klasse/Struktur/Union befinden.
error C2228: Links von ".inputend" muss sich eine Klasse/Struktur/Union befinden.Wieso erkennt der die Klasse denn nicht?
Achja noch 2 Fragen:
Er findet "Choosecolor()" und die Struktur "CHOOSECOLOR" nicht, obwohl ich
hiernach:
http://msdn.microsoft.com/en-us/library/ms646830(VS.85).aspx
Die windows.h und auch mal die Commdlg.h eingebunden habe.Und gibt es Arrays von meiner Klasse DRAWLINE? Dann könnte ich diese nämlich durchnummerieren... Wenn ja wie deklariere ich diese ? Hat bisher nicht geklappt...
mfG TheCrip
-
1. hast du die Resource.h mit eingebunden wo du DRAWLINE definiert hast?
2. Warum hat die Klasse DRAWLINE kein eigenes cpp und .h File.
3. Warum definierst du DRAWLINE global und nicht als Member deiner Klasse die zu draw gehört?
4. deiner Funktionsdefinitionen von inputstart und inputend sind auch sehr komisch, warum benutzt du nicht als übergabevariablen, wo du in einem halben jahr auch noch weisst für was die gedacht waren, lParam ist nicht wirklich aussagekräftig
5. warum weisst du hPenOld = hPeninto; bei inputstart zu wenn das eh keiner benutzt?So viele Fragen und so wenig Antworten
-
1. Ja ist bei VisualC++ automatisch eingebunden.
2. Weiß nicht fand sie etwas klein
3. Ich hab keine Klasse die zu draw gehört? draw() ist die Funktion, die das zuordnen soll, wenn ich das gecheckt habe kommen noch andere Klassen für z.B. Ellipsen. Außerdem müssen andere Funktionen darauf zugreifen
4. lParam bekommt man von Windows, bei einem Mauklick sind dort die Koordinaten, das werd ich schon noch behalten können, ist ne Grundlage
5. Wieso nicht?^^ Kann ich ja ändern...Tut mir Leid, ich bin ein Anfänger in Sachen Klassen