| |
|
|
- Seite 1 - |
|
Christian Schneider | Hallo,
gibt es irgendeine Möglichkeit die Minimierung des Hauptfensters (per Systemmenü) abzufangen und das Ganze selbst in die Hand zu nehmen (so wie bei schließen per Usermessages 16)? |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
| RGH
m erstgenannten Fall wir die Original Fensterprozedur nicht mehr aufgerufen und der ggf. mit Return angegebene Wert wird dem Aufrufer zurückgeliefert. Im zweiten Fall wird anschließend die ursprüngliche Fensterprozedur aufgerufen.
Jau! |
|
|
| |
|
|
|
Frank Abbing | Genauso meinte ich es... |
|
|
| |
|
|
|
| Kurze Fragen hierzu, wenn ich im Minibrowser diese 2 Zeilen hinzufüge: KompilierenMarkierenSeparieren dürfte das hWnd doch nicht aktivierbar sein, korrekt?
Wir also trotz return 0 zur original wndproc weitergeleitet? |
|
|
| |
|
|
|
RGH | iF
Kurze Fragen hierzu, wenn ich im Minibrowser diese 2 Zeilen hinzufüge: KompilierenMarkierenSeparierendürfte das hWnd doch nicht aktivierbar sein, korrekt?
Das return 0 brauchst Du nicht einmal. Durch das SubClassMessage() hast Du die Message behandelt und die ursprüngliche Fensterprozedur wird gar nicht mehr aufgerufen. Im Beispiel, dass ich im Thread zum Thema Subclassing gepostet habe, kommt ~wm_close ja auch nicht mehr an.
BTW: Wieso im Minibrowser? Verwechselst Du die Beispiele?
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 22.01.2008 ▲ |
|
|
|
|
| Ich glaube ich verwechsle die Beispiele, korrekt!
Aber was ist mit meiner Frage? Das hWnd ist dennoch aktivierbar was imho nicht korrekt ist. (ich hoffe ich verwechsle jetzt nicht auch noch die Message) |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
RGH | Ach so: So wie ich das verstehe, teilt diese essage dem Fenster nur mit, DASS es aktiviert (bzw. deaktiviert, je nach WPARAM) wurde und zwar exakt nachdem dies geschehen ist. Die Message veranlaßt nicht das Aktivieren oder Deaktivieren. Dazu ist die API activateWindow zuständig ... wenn ich mich recht entsinne. (Ich hab die API nicht komplett im Kopf.)
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 22.01.2008 ▲ |
|
|
|
|
| Hm, da bin ich mir grad nicht sicher - ich meine mich zu erinnern das ich auf diesem Wege bereits das Aktivieren verhindern konnte - auch das Deaktivieren. Ich werde wohl innerhalb einer dll das xprofan hwnd gesubclasst haben. Die GUI hat das Fenster sichtlich nicht aktiviert oder deaktiviert bei Anwahl per Maus oder Tastatur. Ich hoffe ich verwechsle die Message nicht!
Leider hier (noch) keine Werkzeuge zur Hand...
@Frank: Kannst Du grad mal nen InlineASM bereitstellen welcher das XProfan-hWnd subclasst und wm_activate abfängt? |
|
|
| |
|
|
|
RGH | Und um zum Threadthema zurückzukommen:
Es müßte die Message wm_syscommand abgefragt werden. In wParam steht dann, welches Systemkommando abgesetz wurde. Der Verkleinerungsbutton hat den Wert sc_minimize.
ACHTUNG: Wenn man das als Usermessage deklariert oder ab XProfan 11 im Subclassing abfängt, muß man darauf achten, auch auf die anderen Systemkommandos korrekt zu reagieren, sonst kann das Fenster z.B. nicht mehr ohne Einsatz des Taskmanagers geschlossen werden.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 22.01.2008 ▲ |
|
|
|
|
Frank Abbing |
@Frank: Kannst Du grad mal nen InlineASM bereitstellen welcher das XProfan-hWnd subclasst und wm_activate abfängt?
Ja. Aber eine Fensteraktivierung läßt sich mit WM_ACTIVATE so nicht verhindern. Ist nur eine Meldung, dass aktiviert wurde? |
|
|
| |
|
|
|
Christian Schneider | RGH
Es müßte die Message wm_syscommand abgefragt werden. In wParam steht dann, welches Systemkommando abgesetz wurde. Der Verkleinerungsbutton hat den Wert sc_minimize.
Danke, so funktionierts.
Falls es mal jemand brauchen sollte, hier die Werte von &Wparam für...
schließen: 20 minimieren: 8 die normale Anzeige (nach Minimierung): 61728 Alt+F4: 61536 |
|
|
| |
|
|
|
Jac de Lad | Poste bitte mal ein Minimalbeispiel. |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 23.01.2008 ▲ |
|
|
|
|
| Zurück zum Unterthema: KompilierenMarkierenSeparieren Hiermit verhindere ich per ASM erfolgreich die sichtliche Aktivierbarkeit des Zielfensters - ich nutze also nicht wm_activate sondern WM_NCACTIVATE.
Hier von mir ein Uralt-Code der schön zeig das/wie es funktioniert: KompilierenMarkierenSeparieren {$cleq}
Set(FastMode,1)
Def Cwp(5) !user32,CallWindowProcA
Declare Ex%,_owp&,Sb&
DEF CreateStatusBar(6) @control(msctls_statusbar32,@$(2),add(000256,$50800040-16),@%(3),@%(4),@%(5),@%(6),@%(1),100, %HInstance)
windowstyle 512+8
window 100,100 - 640,480
_owp&:=External(user32,SetWindowLongA,%Hwnd,-4, Procaddr(_wproc,4))
Whilenot Ex%
Waitinput
Endwhile
End
Proc _wproc
Parameters Wnd&, Msg&, Wparam&, Lparam&
If (Msg&==16)// close
Ex%:=1
Elseif (Msg& == WM_NCACTIVATE)
return 0
endif
Return Cwp(_owp&,Wnd&, Msg&, Wparam&, Lparam&)
Endproc
Leider habe ich nun hier wieder grad nicht den aktuellsten XProfan-Compiler zur Hand sodass ich WM_NCACTIVATE nicht innerhalb der SubClassProc testen kann. Könnte das jemand versuchen und hier posten? KompilierenMarkierenSeparieren Ich meine mich zu erinnern es auch ermöglicht zu haben das ein Fenster noch nicht einmal reagiert / in den Vordergrund geholt wird nachdem man es anwählt - gleichwohl aber alle daraufliegenden Controls durchaus empfangsfähig waren. Ich empfand es als Manko das nicht per windowStyle einstellen zu können.
Es ist natürlich richtig dass das Abfangen des Minimierens so geschehen kann: KompilierenMarkierenSeparieren Da ich wie bereits erwähnt hier grad kein neusten XProfan Compiler zu Hand habe würde ich auch gerne wissen ob das MinMax-Geschenen mit der SubClassProc zu handeln ist. (Glaube dem XProfan11 fehlt dafür noch ein eigenes Peek/Poke) |
|
|
| |
|
|