Screensaver Vorschau

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

hazumu-kun

Betreff: Screensaver Vorschau

BeitragDi, Mai 11, 2010 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Codergemeinde,

aktuell programmiere ich an einem Bildschirmschoner, bin auch soweit fertig, brauche aber nurnoch ein bisschen Grundlagenforschung zum Thema Vorschau.

Wenn man in Windows einen Bildschirmschoner auswählt läuft ja in dem kleinem Monitorrahmen eine Vorschau, ich weiß dass mein Bildschirmschoner dann mit dem Parameter /p xxxxx (xxxxx ist ein Windows Fensterhandle) gestartet wird, wie schaffe ich es nun auf dieses übergebene Fenster meine Vorschau draufzuzeichnen?

WinAPI Funktionen scheinen vonnöten, aber ich habe keine Ahnung welche nun.

Danke für eure Hilfe, wenn ich fertig bin wirds auf jeden Fall geil aussehen Wink
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
  • Zuletzt bearbeitet von hazumu-kun am Mi, Mai 12, 2010 0:01, insgesamt einmal bearbeitet

ZaP

BeitragDi, Mai 11, 2010 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
SystemProperty kann das Window Handle ausgeben.
Starfare: Worklog, Website (download)

hazumu-kun

BeitragDi, Mai 11, 2010 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hilft mir nur nichst, ich brauche eine Funktion die mich mit dem Handle arbeiten lässt das ich VON Windows übergeben bekomme. Ich muss praktisch ein Child-Window zu dem übergebenem Parent-Handle erstellen und darein zeichnen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
  • Zuletzt bearbeitet von hazumu-kun am Di, Mai 11, 2010 23:55, insgesamt einmal bearbeitet

D2006

Administrator

BeitragDi, Mai 11, 2010 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
An den Zeichenkontext würdest du sicherlich noch relativ einfach rankommen. Aber BB klarmachen, dass er bei der Grafikausgabe nun dieses Kontext benutzen soll halte ich für unmöglich.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

hazumu-kun

BeitragDi, Mai 11, 2010 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Idee ist ja dem Handle ein Child-Window anzuhängen und dadrin per Canvas zu zeichnen.
Um das zu testen brauche ich aber eine Funktion, die mich ein Fenster an beliebige Parents anhängen lässt.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

The Shark

BeitragMi, Mai 12, 2010 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
das kannst du vergessen. Ich hatte mal ein ähniches problem, bei dem es darum ging Buttons in die Taskleiste zu setzten. Das Problem ist, dass Blitz nicht mit api-handles arbeitet sondern mit eigenen.
Würde man die Struktur kennen, könnte man vllt ein window erstellen und "umbiegen", indem man in den Blitzhandles rumpfuscht. Ob das geht, keine ahnung, aber ich würds auch nicht empfehlen.

hazumu-kun

BeitragMi, Mai 12, 2010 0:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr tragisch, dass ausgerechnet so ein toller Screensaver keine Vorschau bieten kann, nunden, ich mach mich dann mal dran den Konfigurationsdialog zu erstellen und ansonsten seht ihr das Ding Ende der Woche im Projekte Thread oder Showcase.

BTW: Es geht um eine Virtuelle Glasfaserleuchte, richtig hübsch mit Farbwechsel undso.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
 

chi

BeitragMi, Mai 12, 2010 2:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst deinen Screensaver gleich noch um ein Preview-Fenster erweitern Wink b3dScr_preview.zip (Author ???)

hazumu-kun

BeitragMi, Mai 12, 2010 6:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr vielen dank Smile
Vielleicht läuft es ja auch mit BlitzPlus!
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Silver_Knee

BeitragMi, Mai 12, 2010 10:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Um mal für die Nachwelt, wenn der Download mal down ist, was aufzubereiten

Aus screen1.bb:

BlitzBasic: [AUSKLAPPEN]
Const GWL_STYLE	= -16
Const GWL_HWNDPARENT = -8
Const WS_VISIBLE = $10000000
Const WS_CHILD = $40000000

[...]
Type tRECT
Field x, y, w, h
End Type

[...]
r.tRECT=New tRECT
api_GetClientRect(hParent,r)
g_width = r\w
g_height = r\h
;Graphics3D g_width,g_height,0,2 ;A
;blitz_hnd = api_FindWindow("Blitz Runtime Class", title$) ;B
api_SetWindowLong(blitz_hnd, GWL_STYLE, WS_VISIBLE + WS_CHILD)
api_SetParent(blitz_hnd,hParent)
api_MoveWindow(blitz_hnd,r\x,r\y,g_width,g_height,1)
api_SetWindowLong(blitz_hnd,GWL_HWNDPARENT,hParent)
[...]



hParent ist das übergebene handle.

Zeile A:
Graphics/Graphics3D in B3D, in B+ ein Fenster ohne Titelleiste oder ähnlichem erstellen und ein Canvas auf die volle Größe

Zeile B:
blitz_hnd wäre mit B3D SystemProperty ("AppHWND") und mit BlitzPlus QueryObject(fenster) zu bekommen.

Dann wird da noch ein bisschen mit dem Event-Handler angegeben. Die müssten allerdings normal abzufragen sein: in B+ über WaitEvent und in B3D wird das ja automatisch gemacht

hazumu-kun

BeitragMi, Mai 12, 2010 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Code vom Eventhandler solltest du hier noch beischreiben, weil es um winapi events geht, und blitz die nativ nicht abfragen kann.

Das hier einmal pro Mainloop Durchgang ausführen:
Code: [AUSKLAPPEN]

Function eventHandler()
   While api_PeekMessage(w_message,0,0,0,1)
      api_TranslateMessage(w_message)
      
      If hParent Then
         Select w_message\message
            Case WM_DESTROY:
               api_PostQuitMessage(0)
            Case WM_CLOSE:
               ExitScreensaver()
            Default:
               api_DefWindowProc(w_message\hwnd,w_message\message,w_message\wParam,w_message\lParam)      
         End Select   
      Else
         Select w_message\message
            Case WM_DESTROY:
               api_PostQuitMessage(0)
            Case WM_CLOSE:
               ExitScreensaver()
            Case WM_MOUSEMOVE:
               pt.POINT = New POINT
               api_GetCursorPos(pt)
               If Abs(pt\x-orig_pt\x)>10 Or Abs(pt\y-orig_pt\y)>10 Then
                  api_PostMessage(w_message\hwnd,WM_CLOSE,0,0)
               EndIf
            Case WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN, WM_KEYDOWN, WM_SYSKEYDOWN, WM_MOUSEWHEEL:
               api_PostMessage(w_message\hwnd,WM_CLOSE,0,0)
            Default:
               api_DefWindowProc(w_message\hwnd,w_message\message,w_message\lParam,w_message\wParam)                  
         End Select   
      EndIf
   Wend
   Return True
End Function


Hier noch die Konstanten die benutzt werden:
Code: [AUSKLAPPEN]

Const GWL_STYLE   = -16
Const GWL_HWNDPARENT = -8
Const WS_VISIBLE = $10000000
Const WS_CHILD = $40000000
Const WM_DESTROY                = $0002
Const WM_CLOSE                  = $0010
Const WM_KEYDOWN                = $0100
Const WM_SYSKEYDOWN             = $0104
Const WM_MOUSEMOVE              = $0200
Const WM_LBUTTONDOWN            = $0201
Const WM_RBUTTONDOWN            = $0204
Const WM_MBUTTONDOWN            = $0207
Const WM_MOUSEWHEEL             = $020A


p.s.: Es funktioniert! Very Happy Aber allerdings dauert es im Bildschirmschoner Auswahlmenü sehr lange vom Custom-Screensaver zu einem anderen zu wechseln.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Silver_Knee

BeitragFr, Mai 14, 2010 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
also sowas wie mousemove und mousedown müsste blitz doch von haus aus können o.O

hazumu-kun

BeitragFr, Mai 14, 2010 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
DAS schon, aber der Kram mit WM_Close und WM_Destroy ist auch wichtig, und im Grunde alles ohne Mouse events.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group