Siv3D / OpenSiv3D

C++20 framework for creative coding 🎮🎨🎹 / Cross-platform support (Windows, macOS, Linux, and the Web)
https://siv3d.github.io/
MIT License
1.01k stars 139 forks source link

枠なしで、マウスによるリサイズが出来るウィンドウ #737

Open tomolatoon opened 2 years ago

tomolatoon commented 2 years ago

概要

枠なし(WindowStyle::Framelessの見た目)のウィンドウかつ、マウスによるリサイズが出来るウィンドウがあると、ピクチャーインピクチャーなどで有用だと思います。

Windowsでの実現方法

当方Windowsでのみ開発していますので、Windowsでの実装について少し調べてきました。 結論ですが、枠なしウィンドウに「独自に当たり判定から実装する」か、「フレーム部分にも描画する」(下記資料)か、の2択だと思われます。

Win32のウィンドウスタイルをWS_SIZEBOXにする方法は、Windows Vista以降で上辺境界線が完全に消えない仕様があるのでダメでした。(上辺境界線への描画が出来れば有用な気はしますが…)

資料:https://stackoverflow.com/questions/39731497/create-window-without-titlebar-with-resizable-border-and-without-bogus-6px-whit

sthairno commented 2 years ago

参考までに、VisualStudioは透明なウィンドウを4辺に配置してFramelessなウィンドウのリサイズ(と光る枠)を実現しています。 http://grabacr.net/archives/507

sthairno commented 2 years ago

Visual Studio以外の実装を調べてみました。 ChromeとFirefoxは見た目よりも広いウィンドウを持ち、ドロップシャドウ部分にリサイズ判定がありました。 VSCodeはウィンドウの四隅にリサイズ判定があり、その部分のクリック判定は無効化されていました。

若干誇張気味に図に示してみました。オレンジがリサイズ判定がある部分です。

image