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.

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

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 .

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...