USBデバイスを制御するための小さなアプリを(再)作成しています。そのアプリのウィンドウが常に完全に表示されるようにしたいと思います。したがって、ウィンドウの周りを移動すると、下部が画面の下部に当たったとき、または側面の1つが画面の側面に当たったときに、ウィンドウの移動が停止します。
これは可能ですか?
はい、可能です。タイトルバーのある通常のNSWindowsは、ウィンドウの上部が画面の上部から離れないように独自のフレームを制限します。これはで行われ-[NSWindow constrainFrameRect:toScreen:]
ます。このメソッドをオーバーライドして、フレームを制限することができます。
ユーザーがウィンドウを自由に移動できないようにする場合は、タイトルバーのないカスタムウィンドウを作成するだけです。タイトルバーがあると、ウィンドウを移動できることがユーザーに示されるため、ここでの解決策はウィンドウを移動しないことです。次に、それを移動するためのコントロールはありません。ウィンドウを閉じるための独自のコントロールを提供する必要があります。
Ken Aspeslaghによって提供されたコード例がDropboxリンクから利用できなくなったため、ソリューションを共有することが役立つと思いました。私のプロジェクトでは、画面の下部と右側だけを気にする必要がありましたが、他の人は画面の上部と左側を考慮してこれを適応させることができるはずです。
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
{
if (((self.frame.origin.x + self.frame.size.width) > screen.frame.size.width) && (screen.frame.size.width > 0))
{
frameRect.origin.x = (screen.frame.size.width - self.frame.size.width);
}
if (self.frame.origin.y < 0)
{
frameRect.origin.y = 0;
}
return frameRect;
}