Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

dann erzähl mal in welcher Programmiersprache du das realisieren willst. Denn so ungenau wie deine Beschreibung ist wird dir keiner helfen können.

Wenn du das in Java machst dann kannst du das sogar im Buch Java ist auch eine Insel nachlesen.

Bei C++ ist das API Spezifisch würde ich sagen ;)

Mfg Chris

Geschrieben
ich möchte es mit c++ 6.0 realisieren.
Ich will hier keine Haare spalten, aber es gibt kein "C++ 6.0", genausowenig wie es ein "Deutsch 3.5" gibt. Im Gegensatz zu Java oder PHP trägt C++ als Sprache selbst keine Versionsnummer, da es - zumindest bisher - nur einen offiziellen Standard gibt.

Du meinst vermutlich die Entwicklungsumgebung Microsoft Visual C++ 6.0.

Was dein Problem angeht: Ich glaube nicht, dass es da eine fertige Funktion gibt. Warum zeichnest du nicht einfach 4 gestrichelte Linien und 8 kleine Quadrate?

Geschrieben
ich möchte mit der "Maske" etwas markieren und alles was sich in der "Maske verbirgt möchte ich dann kopieren.

Es ist zwar schön, dass du beschreibst, was das Programm tun soll. Damit klärst du aber nicht, wobei genau du jetzt Hilfe benötigst. Es gibt für so etwas keine fertigen Funktionen. Das wirst du schon selbst ausprogrammieren müssen.

Mach dir selbst klar, wie der Vorgang des "Ziehens" eines solchen Rahmens von der Benutzerseite her abläuft, und was genau dabei passieren soll, dann kannst du das recht einfach zu Code machen.

Geschrieben
Es ist zwar schön, dass du beschreibst, was das Programm tun soll. Damit klärst du aber nicht, wobei genau du jetzt Hilfe benötigst. Es gibt für so etwas keine fertigen Funktionen. Das wirst du schon selbst ausprogrammieren müssen.

Mach dir selbst klar, wie der Vorgang des "Ziehens" eines solchen Rahmens von der Benutzerseite her abläuft, und was genau dabei passieren soll, dann kannst du das recht einfach zu Code machen.

Hallo danke für die Antwort. Ich versuche den Rat zu befolgen. Bei ersten Erkenntnissen meiner Seits melde ich mich nocheinmal

Geschrieben

Bisher habe ich folgendes probiert:


        case WM_LBUTTONDOWN:

			// aktuelle Mausposition ermitteln

        		x = LOWORD(lParam);

			y = HIWORD(lParam);


			x_Start = x;

			y_Start = y;


			isDrawing = true;


	 break;

damit merke ich mir den Startpunkt. So, dann behandel ich die WM_MOUSEMOVE Message:

case WM_MOUSEMOVE :

if (isDrawing) // Rechteck wird gewäht und wird gezeichnet

{				


    SelectObject(hDC, Brush);

    SelectObject(hDC, Pen);	


    x = LOWORD(lParam);

    y = HIWORD(lParam);


    Rectangle(hDC, x_Start, y_Start, x * Programminfo.Raster, y * Programminfo.Raster / 2);

}

break;


case WM_LBUTTONUP :

    isDrawing = false;

    break;

Meine Pen habe ich mit
Pen = CreatePen(PS_DASH,1,RGB(255,255,255));

erstellt, damit der unterbrochene Stricheffekt erzeugt wird. Nur wird nirgends das Rechteck gezeichnet. Als Noob in Win32-API Programmierung stehe ich grad völlig auf dem Schlauch :upps :hells:

Hat jemand von Euch einen Tipp oder kann mir sagen wie dieses Auswahl-Dinges überhaupt richtig heißt, damit ich bei google was dazu finde?

Danke.

Geschrieben

Wo kommt denn hDC her? Malen kannst du nur als Reaktion auf WM_PAINT-Nachrichten.

P.S.: Dass dein Pen weiß ist, ist dir bewusst? Ich hoffe, du malst nicht auf weißem Hintergrund.

Geschrieben
Wo kommt denn hDC her? Malen kannst du nur als Reaktion auf WM_PAINT-Nachrichten.

hDC = GetDC(Programminfo.handles.Zeichnenfenster);

Geht das nur bei WM_PAINT? :old Wie sag ich Windows, dass er das RechtEck bei Paint mit den Werte malen soll?

P.S.: Dass dein Pen weiß ist, ist dir bewusst? Ich hoffe, du malst nicht auf weißem Hintergrund.

:upps :upps hmm, dachte 255,255,255 ist schwarz :upps :upps Macht aber nix, denn es passiert eh nix :hells:

Geschrieben
Geht das nur bei WM_PAINT? :old
Ja.

Wie sag ich Windows, dass er das RechtEck bei Paint mit den Werte malen soll?
Genauso, wie du es jetzt bei WM_MOUSEMOVE machst, aber mit dem DC, den du von BeginPaint bekommst.

Dazu müsstest du dir natürlich nicht nur die Anfangs-, sondern auch die Endkoordinaten merken.

Geschrieben

Genauso, wie du es jetzt bei WM_MOUSEMOVE machst, aber mit dem DC, den du von BeginPaint bekommst.

Dazu müsstest du dir natürlich nicht nur die Anfangs-, sondern auch die Endkoordinaten merken.

hab ich jetzt gemacht.


case WM_LBUTTONUP :

			isDrawing = false;


			x_Stop = LOWORD(lParam);

			y_Stop = HIWORD(lParam);

			break;

und nun bei WM_PAINT eingefügt:

case WM_PAINT:			

   hDC = BeginPaint(hwnd, &ps);        // Gerätekontext


   if (isDrawing) // Rechteck wird gewählt und wird gezeichnet

   {


        SelectObject(hDC, Brush);

	SelectObject(hDC, Pen);	


	Rectangle(hDC, x_Start, y_Start, x_Stop * Programminfo.Raster, y_Stop * Programminfo.Raster / 2);

    }


    EndPaint (hwnd, &ps);

    return 0;         

ich seh trotzdem nichts :old

wie kann man dieses Problem gescheit debuggen? :floet: Die Paint-Message wird ja dauernd gesendet.

Geschrieben
wie kann man dieses Problem gescheit debuggen? :floet: Die Paint-Message wird ja dauernd gesendet.
Mit einem zweiten Bildschirm oder per Remote-Debugger. Ansonsten gib halt Traces aus ;)
Geschrieben

Eine ganz einfach Möglichkeit überhaupt erstmal einen Rahmen im Fenster zu ziehen ist diese:


LRESULT CALLBACK MainProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_CLOSE:
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
case WM_LBUTTONDOWN:
{
Last.x = LOWORD(lParam);
Last.y = HIWORD(lParam);
return 0;
}
case WM_LBUTTONUP:
{
Last.x = Last.y = 0;
UpdateWindow(hWnd);
return 0;
}
case WM_MOUSEMOVE:
{
if (Last.x != 0 && Last.y != 0 && wParam == MK_LBUTTON)
{
HDC hDC = GetDC(hWnd);
int i= Rectangle(hDC,Last.x,Last.y,LOWORD(lParam),HIWORD(lParam));
ReleaseDC(hWnd,hDC);
}
return 0;
}
default:
return 0;
}
}
[/PHP]

Muss natürlich noch an vielen Stellen angepasst werden ;)

Geschrieben

Hi Guybrush,

danke für den Denkanstoß. Nach ein wenig Anpassungsarbeit funktioniert der Rahmen fast so wie gewünscht. In der großen Anwendung geht es noch nicht. Hab erstmal ein Testprojekt erstellt und da geht es :) Ich werde mal schauen woran es liegt.

@Klotzkopp

Danke für den Tipp mit dem Remotedebugger. Ich habe auf Codeproject einen guten Artikel gefunden, der das gut erklärt hat, so konte ich das einfach einrichten :uli .

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...