Veröffentlicht 10. März 200718 j 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
10. März 200718 j 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
11. März 200718 j 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?
11. März 200718 j ich möchte mit der "Maske" etwas markieren und alles was sich in der "Maske verbirgt möchte ich dann kopieren.
11. März 200718 j 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.
11. März 200718 j 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
12. März 200718 j 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.
12. März 200718 j 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.
12. März 200718 j 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:
12. März 200718 j 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.
12. März 200718 j 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.
12. März 200718 j 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
12. März 200718 j 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
14. März 200718 j 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 Konto oder melde dich an, um einen Kommentar zu schreiben.