
Direkt auf Window zeichnen?
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Such im board nach #WM_LBUTTONDOWN- / UP und GetAsyncKeyState_()
Windows 10 Pro, 64-Bit / Outtakes | Derek
Das find ich eine Ausrede. Erklärt ihm doch, wie das funktioniert. Solche Aussagen nerfen mich schon seit beginn des Programmierens. Mein 1. großes Projekt wahr z.B. ne Windows-Ersatz-Oberfläche, die ich aber nie verwendet habe, da diese total unoptimiert war (wobei mir auch jeder abgeraten hat). Wenn aus diesem Projekt ja nichts werden sollte, hat PureBasic4.0 wenigstens in sachen API etwas gelernt. Bei mir kommen auch immer ganz lustige Projekt-Vorschläge, und ich würde Wetten, das 75% der Leute mich wegen dieser Projekte für verückt haten würde. Das beste an diesen Projekte ist, das man sich frei entfalten kann, und ihr solltet im Forum nicht jeden hier zurecheweisen, was er kann, und was er nicht kann (könnte). Jeder sollte mal selbst die grenzen der Programmierung für sich finden. Solche Bemerkungen kann man als "p.s." schreiben, also nur als hinweis.pogi02 hat geschrieben:Also so ein Projekt ist schon ein bisschen zu gross für nen Anfänger ...
Solche aussagen kommen halt weil die erfahrenen Programmierer generft sind von fragen wie: "Wie Programmiere ich Doom3 / World of Warcraft / Photoshop?" ... hauptsächlich weil es offensichtlich ist, wenn die person dafür noch nicht weit genug ist und dann die ratschläge und erklärungen sowieso nicht versteht.
@Programmie:
wenn die linke moustaste gedrückt wird gibt es als windowmessage #WM_LBUTTONDOWN... also musst du die messages so interpretieren...
auszug aus einem programm von mir:
Wie du darin auch unzweifelhaft erkennst gibt es keinen Windowsstatus für "Taste ist immer noch gedrückt", was bedeutet dass du dir das selbst merken musst, am besten wie in meinem Beispiel innerhalb einer struktur, dass ist dann ein bisschen handlicher und auch ein wenig besser strukturiert.
Also Windowmessage WM_LBUTTONDOWN erwarten, eine eigene variable setzen in der du dir merkst das sie unten ist und solange nicht die nachricht WM_LBUTTONUP kommt, solange ist sie halt gedrückt.
Aber Achtung: Wenn die Maustaste losgelassen wird, während sie nicht mehr über dem fenster ist, geht das WM_LBUTTONUP nicht ans Fenster! Darauf musst du bei deiner Programmlogik achten (oder auch nicht, aber das kann komische auswirkungen haben).
PS: Wenn du diese informationen nicht auf MSDN.com auffinden kannst, dann glaube ich auch dass das ganze noch zu groß für dich ist, wünsche dir aber trotzdem viel glück, denn auch an zu großen projekten kann man wachsen
@Programmie:
wenn die linke moustaste gedrückt wird gibt es als windowmessage #WM_LBUTTONDOWN... also musst du die messages so interpretieren...
auszug aus einem programm von mir:
Code: Alles auswählen
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
Select Event
Case #WM_MOUSEMOVE
Screen\MouseX=WindowMouseX(#Window_Main)-Screen\ScrX
Screen\MouseY=WindowMouseY(#Window_Main)-Screen\ScrY
Screen\MouseOnScreen = #False
If Screen\MouseX >=0 And Screen\MouseY>=0
If Screen\MouseX <= Screen\ScrW
If Screen\MouseY <= Screen\ScrH
Screen\MouseOnScreen = #True
NeedsRedraw = #True
EndIf
EndIf
EndIf
Case #WM_LBUTTONDOWN
If Screen\MouseOnScreen = #True
WndMain\LMB = #True
EndIf
Case #WM_LBUTTONUP
WndMain\LMB = #False
If Editor\ActualTool = #Button_Line
If Editor\FirstSelected
Also Windowmessage WM_LBUTTONDOWN erwarten, eine eigene variable setzen in der du dir merkst das sie unten ist und solange nicht die nachricht WM_LBUTTONUP kommt, solange ist sie halt gedrückt.
Aber Achtung: Wenn die Maustaste losgelassen wird, während sie nicht mehr über dem fenster ist, geht das WM_LBUTTONUP nicht ans Fenster! Darauf musst du bei deiner Programmlogik achten (oder auch nicht, aber das kann komische auswirkungen haben).
PS: Wenn du diese informationen nicht auf MSDN.com auffinden kannst, dann glaube ich auch dass das ganze noch zu groß für dich ist, wünsche dir aber trotzdem viel glück, denn auch an zu großen projekten kann man wachsen

Für Doom und Warcraft braucht man ein 3Dimensionales Array, bei Photoshop reicht ein 2Dimensionales, oder?Zaphod hat geschrieben:Solche aussagen kommen halt weil die erfahrenen Programmierer generft sind von fragen wie: "Wie Programmiere ich Doom3 / World of Warcraft / Photoshop?"
PB 5.x & Win 7 64Bit
- Deluxe0321
- Beiträge: 336
- Registriert: 19.05.2006 00:31
- Kontaktdaten:
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@Topic
GetAsyncKeystate_(#VK_LBUTTON) liefert unterschiedliche ergebnisse, je nachdem,
ob es die erste abfrage ist, wo man clickt, oder ob die taste gedrückt gehalten wird.
das release muss man selber verfolgen.
außerdem muss man selber abgleichen, ob das eigene fenster den focus hat,
da GetAsyncKeystate immer ergebnisse liefert, egal wo der user grad arbeitet.
@SubTopic
>> Solche Aussagen nerfen mich schon seit beginn des Programmierens.
> Solche aussagen kommen halt weil die erfahrenen Programmierer generft sind von fragen wie
es ist immer auch eine frage der herangehensweise.
niemand verbietet dir, dich mit themen zu befassen, bei denen du
selber merken darfst, ob und wieviel sie zu hoch für dich sind.
aber es ist ein unterschied, ob man damit fortlaufen das forum nervt,
oder ob man das im stillen kämmerlein durchzieht.
> Wenn du diese informationen nicht auf MSDN.com auffinden kannst,
> dann glaube ich auch dass das ganze noch zu groß für dich ist
wenn man nicht in der lage ist, sich selbständig die hintergrund-informationen
zu beschaffen die man für das projekt braucht, dann ist es durchaus
wahrscheinlich, dass das ganze projekt zu hoch gegriffen ist.
GetAsyncKeystate_(#VK_LBUTTON) liefert unterschiedliche ergebnisse, je nachdem,
ob es die erste abfrage ist, wo man clickt, oder ob die taste gedrückt gehalten wird.
das release muss man selber verfolgen.
außerdem muss man selber abgleichen, ob das eigene fenster den focus hat,
da GetAsyncKeystate immer ergebnisse liefert, egal wo der user grad arbeitet.
@SubTopic
>> Solche Aussagen nerfen mich schon seit beginn des Programmierens.
> Solche aussagen kommen halt weil die erfahrenen Programmierer generft sind von fragen wie
es ist immer auch eine frage der herangehensweise.
niemand verbietet dir, dich mit themen zu befassen, bei denen du
selber merken darfst, ob und wieviel sie zu hoch für dich sind.
aber es ist ein unterschied, ob man damit fortlaufen das forum nervt,
oder ob man das im stillen kämmerlein durchzieht.
> Wenn du diese informationen nicht auf MSDN.com auffinden kannst,
> dann glaube ich auch dass das ganze noch zu groß für dich ist
wenn man nicht in der lage ist, sich selbständig die hintergrund-informationen
zu beschaffen die man für das projekt braucht, dann ist es durchaus
wahrscheinlich, dass das ganze projekt zu hoch gegriffen ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
@PureBasic4.0: Eventuell hilft dir folgender Code etwas weiter, es werden aber WinAPI-Funktionen verwendet:
Code: Alles auswählen
;************************************************************
;* WinAPI: Fenster erstellen und darin mit GDI zeichnen *
;* ======================================================== *
;* - mit der Maus einen rechteckigen Rahmen ziehen *
;************************************************************
;- Grundlage ist Beispiel aus WinAPI-Einführung von "www.red-inferno.de" und "www.willemer.de"
;- zeichnen im Zweig "WM_MOUSEMOVE"
Global hwnd, rc.RECT, startpt.POINT, endpt.POINT, *dc, returncode.l ;"hwnd" muss global definiert werden
Declare my_Drawframe()
Procedure WndProc(wnd,Message,wParam,lParam)
returncode=0
Select Message
Case #WM_LBUTTONDOWN
; invalidaterect_(hwnd, #null, #true); loescht vorheriges rechteck
startpt\x = lparam & $FFFF
startpt\y = lparam >> 16 & $FFFF
endpt\x = lparam & $FFFF
endpt\y = lparam >> 16 & $FFFF
; Debug Str(startpt\x) + " " +Str(startpt\y)
Case #WM_MOUSEMOVE
; Debug Str(endpt\x) + " " +Str(endpt\y)
If wparam & #MK_LBUTTON ;linke maustaste gedrueckt ?
*DC=GetDC_(hwnd)
my_drawframe()
endpt\x = lparam & $FFFF
endpt\y = lparam >> 16 & $FFFF
my_drawframe()
ReleaseDC_(hwnd,*DC)
EndIf
Case #WM_CLOSE
Debug "WM_CLOSE"
DestroyWindow_(hWnd);
Case #WM_DESTROY
Debug "WM_DESTROY"
; UnregisterClass_(appname,hInstance)
PostQuitMessage_(0)
Default
Returncode = DefWindowProc_(wnd, Message, wParam, lParam)
EndSelect
ProcedureReturn Returncode
EndProcedure
t$="MZ" ;classname
wc.WNDCLASS
wc\cbClsExtra = 0
wc\cbWndExtra = 0
wc\hbrBackground = #COLOR_BACKGROUND
wc\hInstance = hInstance
wc\hIcon = LoadIcon_(0,#IDI_APPLICATION)
wc\hCursor = LoadCursor_(0, #IDC_CROSS)
wc\lpszMenuName = 0
wc\lpszClassName = @t$
wc\lpfnWndProc = @WndProc()
wc\style = #CS_HREDRAW | #CS_VREDRAW
RegisterClass_(@wc)
hwnd = CreateWindowEx_(0,t$,"Zeichnen mit dem GDI",#WS_OVERLAPPEDWINDOW,150,350,600,350,0,0,hInstance,0)
ShowWindow_(hwnd, #SW_SHOWNORMAL)
UpdateWindow_(hwnd)
While GetMessage_(msg.MSG, #Null, 0, 0 )
TranslateMessage_(msg)
DispatchMessage_(msg)
Wend
End
Procedure my_Drawframe()
SetROP2_(*DC,#R2_NOT)
MoveToEx_(*DC,startpt\x,startpt\y,#Null)
LineTo_(*DC,endpt\x,startpt\y)
LineTo_(*DC,endpt\x,endpt\y)
LineTo_(*DC,startpt\x,endpt\y)
LineTo_(*DC,startpt\x,startpt\y)
ProcedureReturn 0
EndProcedure
; IDE Options = PureBasic v4.02 (Windows - x86)
; CursorPosition = 39
; FirstLine = 6
; Folding = -
AMD A64 3000+, ASUS A8V deluxe, 1 GB RAM, MSI FX5900XT, WindowsXP Home SP2, Purebasic 4.02
Cool bleiben
Hallo Leute,
zunächst möchte ich mal feststellen, dass dieses Forum hier sehr aktiv ist. Das finde ich bemerkenswert und ist auch etwas Besonderes in den Weiten des Internets.
Die Ungeduld von einigen Helfern hier im Forum zeigt doch, wie engagiert sie sind, auch wenn das mal in markigen Sprüchen rüber kommt und das eigene Ego etwas aufmöbeln soll. Trotzdem, niemand ist hier gezwungen auf vermeintlich dumme Fragen zu antworten, aber viele tun es trotzdem mit Geduld und Sachverstand. Das finde ich klasse! Also Dank an alle, die hier so engagiert antworten, denn sie helfen die PB-Gemeinde zu vergrößern und erhalten Einsteigern die Lust und Motivation an der Sprache PureBasic.
Viele benutzen das Forum, weil es ein bequemer Weg ist. Das muss man einfach sehen. Gerade Anfänger haben das Problem, dass sie gar nicht wissen, wonach sie suchen müssen bzw. die Quellen nicht kennen. Da ist es besser mal ein paar Links zu posten als gleich die "Du bist zu dumm"-Keule zu schwingen. Das hilft keinem. Hilfe zur Selbsthilfe ist ein guter Weg und passende Hinweise auch. Denkt auch daran, dass es unterschiedliche Lerntypen gibt. Die einen lernen aus Büchern und lesen im Internet, die anderen müssen sich in Foren an die Probleme heranfragen. Das hat nichts mit "nerven" zu tun, das hängt vom Lerntyp ab.
Also werte Poster, als Hilfesuchende denkt daran, dass das hier ein excellentes aktives Forum ist, als Helfer denkt daran, Geduld zu bewahren und auch auf vermeintlich dumme Fragen sachgerecht zu antworten. Ihr macht aus diesem Forum das, was es ist.
Zum Abschluss noch eine persönliche Erfahrung mit der Microsoft-Hotline, die durchaus einen Einzelfall darstellen mag. (äh - die Erfahrung natürlich)
Dort bekam ich als Antwort auf ein Problem. "Tut mir leid, das Problem haben wir nicht in unserer Datenbank." Nun, die Hotline war zu der Zeit kostenpflichtig. Hier im PB-Forum habe ich bisher IMMER eine hilfreiche Antwort bekommen und das kostenlos.
Also macht Euch klar, was Ihr hier Feines habt.

zunächst möchte ich mal feststellen, dass dieses Forum hier sehr aktiv ist. Das finde ich bemerkenswert und ist auch etwas Besonderes in den Weiten des Internets.
Die Ungeduld von einigen Helfern hier im Forum zeigt doch, wie engagiert sie sind, auch wenn das mal in markigen Sprüchen rüber kommt und das eigene Ego etwas aufmöbeln soll. Trotzdem, niemand ist hier gezwungen auf vermeintlich dumme Fragen zu antworten, aber viele tun es trotzdem mit Geduld und Sachverstand. Das finde ich klasse! Also Dank an alle, die hier so engagiert antworten, denn sie helfen die PB-Gemeinde zu vergrößern und erhalten Einsteigern die Lust und Motivation an der Sprache PureBasic.
Viele benutzen das Forum, weil es ein bequemer Weg ist. Das muss man einfach sehen. Gerade Anfänger haben das Problem, dass sie gar nicht wissen, wonach sie suchen müssen bzw. die Quellen nicht kennen. Da ist es besser mal ein paar Links zu posten als gleich die "Du bist zu dumm"-Keule zu schwingen. Das hilft keinem. Hilfe zur Selbsthilfe ist ein guter Weg und passende Hinweise auch. Denkt auch daran, dass es unterschiedliche Lerntypen gibt. Die einen lernen aus Büchern und lesen im Internet, die anderen müssen sich in Foren an die Probleme heranfragen. Das hat nichts mit "nerven" zu tun, das hängt vom Lerntyp ab.
Also werte Poster, als Hilfesuchende denkt daran, dass das hier ein excellentes aktives Forum ist, als Helfer denkt daran, Geduld zu bewahren und auch auf vermeintlich dumme Fragen sachgerecht zu antworten. Ihr macht aus diesem Forum das, was es ist.
Zum Abschluss noch eine persönliche Erfahrung mit der Microsoft-Hotline, die durchaus einen Einzelfall darstellen mag. (äh - die Erfahrung natürlich)
Dort bekam ich als Antwort auf ein Problem. "Tut mir leid, das Problem haben wir nicht in unserer Datenbank." Nun, die Hotline war zu der Zeit kostenpflichtig. Hier im PB-Forum habe ich bisher IMMER eine hilfreiche Antwort bekommen und das kostenlos.
Also macht Euch klar, was Ihr hier Feines habt.


