« 命名規則の悩ましさ | トップページ | 構造体/クラスプロパティを展開可能にする(1) »

2010年10月 2日 (土)

SizeGrip コンポーネント

訳あって、こんなコンポーネントを作ってみました。

ソースコードはこれだけ。


using System;
using System.Drawing;
using System.Windows.Forms;

namespace Acha_ya.SampleClass
{
    /// <summary>
    /// SizeGrip です。
    /// </summary>
    public class SizeGrip : HScrollBar
    {
        /// <summary>
        /// サイズグリップクラスのコンストラクタ
        /// </summary>
        public SizeGrip()
        {
            Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
            Cursor = Cursors.SizeNWSE;      // Windows2000 では設定が必要(?)
            if (!GetStyle(ControlStyles.Opaque)) SetStyle(ControlStyles.Opaque, true);
            if (!GetStyle(ControlStyles.FixedWidth)) SetStyle(ControlStyles.FixedWidth, true);
            if (!GetStyle(ControlStyles.FixedHeight)) SetStyle(ControlStyles.FixedHeight, true);
            if (GetStyle(ControlStyles.StandardClick)) SetStyle(ControlStyles.StandardClick, false);
            if (GetStyle(ControlStyles.StandardDoubleClick)) SetStyle(ControlStyles.StandardDoubleClick, false);
            if (GetStyle(ControlStyles.UserMouse)) SetStyle(ControlStyles.UserMouse, false);
        }
        /// <summary>
        /// コントロールの作成時に必要な情報をサイズグリップ用に変更する。
        /// </summary>
        protected override CreateParams CreateParams
        {
            get
            {
                const int SBS_SIZEGRIP = 0x10;
                const int WS_GROUP = 0x20000;
                const int WS_EX_NOPARENTNOTIFY = 0x04;
                CreateParams cp = base.CreateParams;
                cp.Style |= WS_GROUP | SBS_SIZEGRIP;
                cp.ExStyle |= WS_EX_NOPARENTNOTIFY;
                return cp;
            }
        }
        /// <summary>
        /// コントロールの既定のサイズを取得します。
        /// </summary>
        protected override Size DefaultSize
        {
            get
            {
                return new Size(16, 16);
            }
        }
    }
}

実用性はともかく、それなりに遊べます。このコンポーネントを貼り付けると、FormBorderStyle.FixedSingle とか FormBorderStyle.FixedDialog といった本来サイズ変更不可なフォームになっていても、マウスでぐりぐりやって、サイズ変更出来ます。

Form には、SizeGripStyle プロパティがあるし、StatusBar/StatusStrip にも、SizingGrip プロパティがあります。SizeGrip コンポーネントなんて必要なさそうなのに、なぜ作ったのかって?
コモンダイアログに貼り付ける為です。ちょっと(いや非常に)特殊用途ですね。
興味あったら、遊んでみてください。

あっ、VS2005以降だと、通常VisualStyle対応なのでアプリケーション側にあるソースの1行、
Application.EnableVisualStyles();
をコメントにして下さい。VisualStyleオン状態だと、本来サイズ変更不可なフォームに貼り付けたら、サイズ変更出来ません。なぜかは判りませんけど、本来はそうあるべきなので文句は言えません。
FormBorderStyle.Sizable 等元々サイズ変更が可能なフォームなら、VisualStyleオンでも問題ありません。

最後にプロジェクト単位でCABにまとめたファイルをここに置いておきます。
「SizeGrip.cab」をダウンロード

« 命名規則の悩ましさ | トップページ | 構造体/クラスプロパティを展開可能にする(1) »

.NETコンポーネント」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: SizeGrip コンポーネント:

« 命名規則の悩ましさ | トップページ | 構造体/クラスプロパティを展開可能にする(1) »