'Zeichnen' mit C++

Moin.

Kurz nach dem Krieg hatte ich in Info ein Progrämmchen gebaut, dass mit Zahlen jongliert hat und mit deren Hilfe dann eine Grafik ausgegeben hat.
Etwas ähnliches möchte ich nun wieder tun: Es werden ca 50 X-Koordinaten und zu jeder X-Koordinate wiederum 100 Y- bzw Z-Koordinaten eingelesen.
Mit den Y- und Z- Koordinaten ergibt sich für jedes X eine „Kurve“ (eher ein spline) die alle sozusagen „übereinander“ gezeichnet werden sollen.
-Soviel zum Plan :smile:

Die Koordinaten werden in Pixelkoordinaten transformiert, so dass es eigentlich funktionieren sollte - tut es aber nicht :wink:

Offensichtlich kann Visual C++ Express 2005 die Verknüpfung zwischen diesen beiden Quelltexten nicht herstellen:

Dieses:

#include
#include
#include

void zeichenprogramm (HWND hWnd)
{
HDC dc;
RECT rect;

FILE * datzeiger;
double x[58], Aspt[58], y[58][101], z[58][101], hilf, disVol, max=16.1;
char datname[40]=„E:\Uni\Schiff c++\stations.txt“, temptext[11];
int i, j, iy[58][101], iz[58][101], pixqu, zaktuell, yaktuell, rahmen, hilfint;

HPEN strich; strich=CreatePen(PS_SOLID,1,RGB(0,0,0));
HPEN Rahmen; Rahmen=CreatePen(PS_SOLID,3,RGB(0,0,0));

dc = GetDC(hWnd);
GetClientRect(hWnd,&rect);
.
.
. usw

und dieses:

// WinMain - Quelltext zeichnehaupt.cpp
#include
#include „stdafx.h“

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void zeichenprogramm(HWND);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
MSG msg; WNDCLASS wc; HWND hwndMain;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = „MainWndClass“;
wc.lpszMenuName = NULL;
RegisterClass(&wc);
hwndMain = CreateWindow(„MainWndClass“, „Zeichenprogramm“,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, (HWND) NULL,
(HMENU) NULL, hInstance, (LPVOID) NULL);
ShowWindow(hwndMain, nCmdShow);
UpdateWindow(hwndMain);
while (GetMessage(&msg, (HWND) NULL, 0, 0))
{TranslateMessage(&msg); DispatchMessage(&msg);}
return msg.wParam;
}

/**********************************************************************/
LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{case WM_PAINT: zeichenprogramm(hwnd); break;
case WM_DESTROY: PostQuitMessage(0);
}
return (DefWindowProc(hwnd, uMsg, wParam, lParam));
}

Da kommen dann zahlreiche Fehlermeldungen:

1>------ Erstellen gestartet: Projekt: Linienriss, Konfiguration: Debug Win32 ------
1>Kompilieren…
1>Linienriss.cpp
error C2065: ‚HWND‘: nichtdeklarierter Bezeichner
error C2146: Syntaxfehler: Fehlendes ‚)‘ vor Bezeichner ‚hWnd‘
error C2182: ‚zeichenprogramm‘: Unzulässige Verwendung des Typs ‚void‘
error C2059: Syntaxfehler: ‚)‘
error C2143: Syntaxfehler: Es fehlt ‚;‘ vor ‚{‘
error C2447: ‚{‘: Funktionskopf fehlt - Parameterliste im alten Stil?
1>zeichnehaupt.cpp
error C2146: Syntaxfehler: Fehlendes ‚;‘ vor Bezeichner ‚CALLBACK‘
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: „default-int“ wird von C++ nicht unterstützt.
error C2146: Syntaxfehler: Fehlendes ‚;‘ vor Bezeichner ‚WndProc‘
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: „default-int“ wird von C++ nicht unterstützt.
error C2065: ‚HWND‘: nichtdeklarierter Bezeichner
error C2065: ‚UINT‘: nichtdeklarierter Bezeichner
error C2065: ‚WPARAM‘: nichtdeklarierter Bezeichner
error C2065: ‚LPARAM‘: nichtdeklarierter Bezeichner
error C4430: Fehlender Typspezifizierer - int wird angenommen.

Und viele Fehler mehr…

Soweit ich mich erinnere war der 2. Quelltext irgendwie für die Grafik an sich zuständig - wie genau, weiß ich nicht, da ich bestenfalls ein Grundwissen zu C/C++ habe…

Ich hoffe, jemand kann mir einige Ansätze liefen.

MfG
Pogotorte

Hallo Pogotorte,

#include
#include
#include

Hier einmal fehlt die

#include 

für den FILE-Zeiger.

void zeichenprogramm (HWND hWnd)
. usw

Hier hast Du unter „usw“ sicher das

SelectObject()

drin (jetzt im MSDN nachsehen), um den HPEN in den DC zu selektieren?

error C2065: ‚HWND‘: nichtdeklarierter Bezeichner

Da würde ich eines deklarieren, ganz oben, global.

error C2146: Syntaxfehler: Fehlendes ‚)‘ vor Bezeichner
‚hWnd‘

Die ‚)‘ eben hinschreiben.

error C2143: Syntaxfehler: Es fehlt ‚;‘ vor ‚{‘

Dito.

error C2447: ‚{‘: Funktionskopf fehlt - Parameterliste im
alten Stil?

Beim Prototyp muss ein ‚;‘ sein, bei der Implementation mußt du ihn weglassen.

1>zeichnehaupt.cpp
error C2146: Syntaxfehler: Fehlendes ‚;‘ vor Bezeichner
‚CALLBACK‘

Das ‚;‘ eben hinschreiben.

error C2146: Syntaxfehler: Fehlendes ‚;‘ vor Bezeichner
‚WndProc‘

Dito.

Soweit ich mich erinnere war der 2. Quelltext irgendwie für
die Grafik an sich zuständig - wie genau, weiß ich nicht, da
ich bestenfalls ein Grundwissen zu C/C++ habe…

Ich würde nicht gleich den LKW-Führerschein machen, solange ich mit dem Fahrrad noch Probleme habe. Lerne einmal C/C++ so richtig, nur mit der Konsole. Wenn du das beherrscht, besorge dir von Petzold „Windows-Programmierung“.

lg
Martin B

#include
#include
#include

Hier einmal fehlt die #include für
den FILE-Zeiger.

Ist stdio.h nicht in stdafx.h inbegriffen?

void zeichenprogramm (HWND hWnd)
. usw

Hier hast Du unter „usw“ sicher das SelectObject()
drin (jetzt im MSDN nachsehen), um den HPEN in den DC zu
selektieren?

Soetwas zB? „SelectObject(dc,Rahmen);“

error C2065: ‚HWND‘: nichtdeklarierter Bezeichner

Da würde ich eines deklarieren, ganz oben, global.

error C2146: Syntaxfehler: Fehlendes ‚)‘ vor Bezeichner
‚hWnd‘

Die ‚)‘ eben hinschreiben.

error C2143: Syntaxfehler: Es fehlt ‚;‘ vor ‚{‘

Dito.

error C2447: ‚{‘: Funktionskopf fehlt - Parameterliste im
alten Stil?

Beim Prototyp muss ein ‚;‘ sein, bei der Implementation mußt
du ihn weglassen.

1>zeichnehaupt.cpp
error C2146: Syntaxfehler: Fehlendes ‚;‘ vor Bezeichner
‚CALLBACK‘

Das ‚;‘ eben hinschreiben.

error C2146: Syntaxfehler: Fehlendes ‚;‘ vor Bezeichner
‚WndProc‘

Dito.

Werde ich alles mal probieren, was mich aber so schockiert, ist die Tatsache, dass ich vor ca 3 Jahren diese Quelltexte so wie sie sind (sinngemäß) genutzt habe, und es wunderbar lief. (andere Werte und Variablen natürlich)

Ich würde nicht gleich den LKW-Führerschein machen, solange
ich mit dem Fahrrad noch Probleme habe. Lerne einmal C/C++ so
richtig, nur mit der Konsole. Wenn du das beherrscht,
besorge dir von Petzold „Windows-Programmierung“.

Gut gesprochen :smiley:
Ich will nicht unbedingt tiefer hineingehen, da ich C/C++ nur nutze, um mir lästige Handrechnereien zu sparen :wink: - es muss auch nicht elegant sein, solange das richtige herauskommt - jaja, ist etwas ignorant, aber ich bin auch kein Informatiker :wink:
Wie ich oben schon sagte, meine Kenntnisse reichen aus, um simple Programme so umzumodeln, dass sie meinen Ansprüchen genügen.
Ich wundere mich nur, dass es nicht mehr funktioniert, weil ich nicht weiß, was ich jetzt anders mache, als vor 3 Jahren (außer Vista als BS )

An einem anderem Ort, wo sich Leute mit Fachwissen tummeln, wurde mir geraten, die MS plattform SDK zu installieren. Mal schauen, ob das etwas bringt…

lg
Martin B

thx schonmal, für die Hinweise :smile:

*gibt es hier keine edit-funktion?*

Lerne einmal C/C++ so
richtig, nur mit der Konsole. Wenn du das beherrscht,
besorge dir von Petzold „Windows-Programmierung“.

„Beherrschen“ tue ich es sicher nicht, aber es reicht für den Hausgebrauch…
Aber in diesem konkreten Fall, brauche ich diese grafische Ausgabe, allein um mit den Werten und Ergebnissen etwas anfangen zukönnen - ich bin ein visueller Mensch :wink:

MfG

An einem anderem Ort, wo sich Leute mit Fachwissen tummeln,
wurde mir geraten, die MS plattform SDK zu installieren. Mal
schauen, ob das etwas bringt…

So, das habe ich nun installiert und auch schon etwas rumprobiert:
Es sind nun deutlich weniger Fehler:

1>------ Erstellen gestartet: Projekt: Spantenriss, Konfiguration: Debug Win32 ------
1>Kompilieren…
1>zeichnehaupt.cpp
1>e:\uni\schiff c++\zeichnehaupt.cpp(20) : error C2440: ‚=‘: ‚const char [13]‘ kann nicht in ‚LPCWSTR‘ konvertiert werden
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>e:\uni\schiff c++\zeichnehaupt.cpp(26) : error C2664: ‚CreateWindowExW‘: Konvertierung des Parameters 2 von ‚const char [13]‘ in ‚LPCWSTR‘ nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>e:\uni\schiff c++\zeichnehaupt.cpp(31) : warning C4244: ‚return‘: Konvertierung von ‚WPARAM‘ in ‚int‘, möglicher Datenverlust
1>Das Buildprotokoll wurde unter „file://e:\Uni\Schiff c++\Spantenriss\Spantenriss\Debug\BuildLog.htm“ gespeichert.
1>Spantenriss - 2 Fehler, 1 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Irgendwie drängt sich mir der Verdacht auf, dass diese Fehler von meiner veralteten Syntax hervorgerufen werden…
Ich habe allerdings keine Idde, wie das zu beheben wäre, weil ich nicht wirklich verstehe, dieser 2. Quelltext aus dem 1. Post (da treten diese Fehler auf) macht…

MfG

PS: Wenn jemand theoretisch helfen könnte, aber nicht genügend Infos zur Analyse hat - bitte melden, reiche ich dann sehr gerne nach :wink:

Hallo

Offensichtlich kann Visual C++ Express 2005 die Verknüpfung
zwischen diesen beiden Quelltexten nicht herstellen:

Visual C++ Express 2005 kann *keine* Win32-Programme
erstellen sondern lediglich Konsolen- und .NET-Programme.
Für Dein Vorhaben brauchst Du entweder eine Art „Vollversion“
(Standard- oder Students Edition reicht) oder Du musst das
SDK von Hand „einbasteln“. Das kann klappen, muss aber nicht.
Siehe:
http://msdn2.microsoft.com/en-us/library/ms235626(VS…

CMБ

Hallo

Für Dein Vorhaben brauchst Du entweder eine Art „Vollversion“
(Standard- oder Students Edition reicht) oder Du musst das
SDK von Hand „einbasteln“. Das kann klappen, muss aber nicht.

CMБ

Ja, mit dem SDk ging es :smile: - Danke.

MfG