悪徳商法?マニアックス ココログ支店

悪徳商法総合情報紹介ページ ~騙すなら、素敵にだまして~  本家「悪徳商法?マニアックス」は、こちら

« ソフトバンクの分かりやすい説明 | トップページ | 2ちゃんねる、新トップ絵募集中 »

2007.11.07

C# Tips: フォームにスナップ機能を付ける

フォームが、ぴったり揃うと気持ちいい!ということで、スナップ機能(画面端や別のウィンドウ端に吸着する機能。snap to grid)を作ってみた。

参考にしたサイトだと、フラグ(?)を使う実装になってたけど、ドラッグ処理を自前でやれば、もっと簡単に書ける。

#region Win32 private const int WM_MOVING = 0x0216; private const int WM_ENTERSIZEMOVE = 0x0231;

[StructLayout( LayoutKind.Sequential )]
private struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
#endregion

private Point mouseStart;
private Point rectStart;
private Size Gap = new Size( 12, 12 );

protected override void WndProc( ref Message m )
{
if ( m.Msg == WM_MOVING )
{
Rectangle rect1 = new Rectangle( rectStart.X + Cursor.Position.X - mouseStart.X,
rectStart.Y + Cursor.Position.Y - mouseStart.Y,
Gap.Width, Gap.Height );
Rectangle rect_x = new Rectangle( 0, 0, Gap.Width, Screen.PrimaryScreen.Bounds.Height );
Rectangle rect_y = new Rectangle( 0, 0, Screen.PrimaryScreen.Bounds.Width, Gap.Height );
RECT r = (RECT)Marshal.PtrToStructure( m.LParam, typeof( RECT ) );

// 横方向
rect1.Width = Gap.Width;
rect1.Height = this.Height;
if ( rect1.IntersectsWith( rect_x ) )
{
r.Left = rect_x.Left;
Cursor.Position = new Point( Cursor.Position.X - (this.Left - r.Left), Cursor.Position.Y );
Gap.Width = 48;
}
else
{
r.Left = rect1.Left;
Gap.Width = 12;
}

// 縦方向
rect1.Width = this.Width;
rect1.Height = Gap.Height;
if ( rect1.IntersectsWith( rect_y ) )
{
r.Top = rect_y.Top;
Cursor.Position = new Point( Cursor.Position.X, Cursor.Position.Y - (this.Top - r.Top) );
Gap.Height = 48;
}
else
{
r.Top = rect1.Top;
Gap.Height = 12;
}

r.Right = r.Left + this.Width;
r.Bottom = r.Top + this.Height;
Marshal.StructureToPtr( r, m.LParam, false );
}
else if ( m.Msg == WM_ENTERSIZEMOVE )
{
mouseStart = Cursor.Position;
rectStart = this.Location;
}

base.WndProc( ref m );
}


2007 11 07 [プログラム] | 固定リンク このエントリーを含むはてなブックマーク

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/26611/17007989

この記事へのトラックバック一覧です: C# Tips: フォームにスナップ機能を付ける:

» 内山理名女優、女としても危機かも・・・濡れ場仰天映像 from 内山理名 東と破局の危機!?
内山理名、魅力たっぷり26歳「結婚?多分ないと思います」7日に26歳の誕生日を迎える女優、内山理名の誕生日とデビュー10周年記念を祝うパーティーが6日、都内で行われた。 スカウトされての芸能界入りに、「最初はやりたくなかった」と笑いを誘った内山。10年で一番辛かったことに、22歳で父親が亡くなったことを挙げ、「この姿を見せたかった。『10年頑張ったね』と言ってくれると思う」と瞳... 続きを読む

受信: 2007/11/08 15:12:37

コメント

コメントを書く