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
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
Board00 Geschrieben 11. März 2007 Autor Geschrieben 11. März 2007 ich möchte es mit c++ 6.0 realisieren.
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?
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.
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.
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
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.
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.
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:
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.
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.
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
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
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 .
Schnitzelfritz Geschrieben 16. März 2007 Geschrieben 16. März 2007 Wenn du MFC verwendest kannst du auch mal die CRectTracker Klasse probieren.
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden