Board00 Geschrieben 10. März 2007 Geschrieben 10. März 2007 Hallo ich habe eine frage wie programiert mman so einen Auswahlrahmen siehe Bild, weiß net wie man so etwas nennt. http://s6.bilder-hosting.de/img/1E7YS.png Zitieren
Chris86 Geschrieben 10. März 2007 Geschrieben 10. März 2007 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 Zitieren
Board00 Geschrieben 11. März 2007 Autor Geschrieben 11. März 2007 ich möchte es mit c++ 6.0 realisieren. Zitieren
Klotzkopp Geschrieben 11. März 2007 Geschrieben 11. März 2007 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? Zitieren
Board00 Geschrieben 11. März 2007 Autor Geschrieben 11. März 2007 ich möchte mit der "Maske" etwas markieren und alles was sich in der "Maske verbirgt möchte ich dann kopieren. Zitieren
Klotzkopp Geschrieben 11. März 2007 Geschrieben 11. März 2007 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. Zitieren
Board00 Geschrieben 11. März 2007 Autor Geschrieben 11. März 2007 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 Zitieren
Board00 Geschrieben 12. März 2007 Autor Geschrieben 12. März 2007 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. Zitieren
Klotzkopp Geschrieben 12. März 2007 Geschrieben 12. März 2007 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. Zitieren
Board00 Geschrieben 12. März 2007 Autor Geschrieben 12. März 2007 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: Zitieren
Klotzkopp Geschrieben 12. März 2007 Geschrieben 12. März 2007 Geht das nur bei WM_PAINT? :oldJa. 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. Zitieren
Board00 Geschrieben 12. März 2007 Autor Geschrieben 12. März 2007 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. Zitieren
Klotzkopp Geschrieben 12. März 2007 Geschrieben 12. März 2007 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 Zitieren
Guybrush Threepwood Geschrieben 12. März 2007 Geschrieben 12. März 2007 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 Zitieren
Board00 Geschrieben 14. März 2007 Autor Geschrieben 14. März 2007 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 . Zitieren
Schnitzelfritz Geschrieben 16. März 2007 Geschrieben 16. März 2007 Wenn du MFC verwendest kannst du auch mal die CRectTracker Klasse probieren. Zitieren
Empfohlene Beiträge
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.