Einzelnen Beitrag anzeigen

Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#2

AW: SPI_SETDRAGFULLWINDOWS, aber nur für eigene Anwendung

  Alt 14. Sep 2016, 14:33
Ich glaube nicht dass das zuverlässig funktioniert, wenn man nicht selbst den Drag-Code implementiert. Vom Systemdesign (Windows) her ist es nicht vorgesehen, dass je nach Programm einzustellen. Alle Einstellungen die das irgendwie hinbiegen wären dann unzuverlässige Hacks.

Das selber zu implementieren ist auch nicht ganz trivial. Ansätze wären wohl die Window Messages: WM_NCLBUTTONDOWN und WM_NCHITTEST (und verwandte Non-Client-Area-Nachrichten).

In WM_NCLBUTTONDOWN und Co. könnte man dann die Nachricht nicht an DefWindowProc() weiterleiten um somit den Windows-eigenen Drag-Drop-Prozess zu verhindern. Ob das auch die Option abfängt, über die Tastatur ein Fenster zu verschieben, wäre zu testen.

Man könnte dann selbst ein Drag-Rechteck auf den Bildschirm zeichnen und wieder löschen, mit XOR-Operationen oder sowas wie DrawFocusRect(). Vielleicht gibt es auch noch etwas bei Multi-Monitor-Konfigurationen zu beachten.


Der Aufwand einer korrekten Implementierung ist beträchtlich, und unter neueren Windows-Versionen (mindestens ab Vista, wahrscheinlich auch XP) ist das Verschieben eines Fensters eh per Grafikkarte beschleunigt, daher die Frage:
Welches Problem soll das lösen?


P.S.: Hier ist ein Ansatz für das Resizen eines Fensters: http://stackoverflow.com/questions/2...aying-my-c-sha

Würde es aber nicht empfehlen, weil das ein unzuverlässiger Hack ist der sich auf undokumentierte Implementierungsdetails verlässt die sich ändern können. Außerdem könnte ein Abstürzen oder sonstiger Fehler in deinem Programm dann alle Programme beeinflussen (also immer das Drag-Rectangle anzeigen).
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd

Geändert von mael (14. Sep 2016 um 14:43 Uhr)
  Mit Zitat antworten Zitat