MFC   VC++   Visual Studio   Visual Studio   プログラミング

スプリッタウインドウの移動制限

 スプリッタウインドウ(CSpritterWnd/CSpritterWndEx)で、仕切り位置を固定し、ユーザーに位置変更をさせない方法。
 また、カーソルが乗っても移動用のカーソルに変更しないようにする。

 まず、CSpritterWnd/CSpritterWndExから派生させたクラスを作る。(ここではCMySplitterWndEx)
 派生先でHitTestをオーバーライドする。

 HitTestは、
virtual int HitTest(CPoint pt) const;
 と宣言されている。

 HitTestの戻り値は、
enum HitTestValue
{
    noHit                   = 0,
    vSplitterBox            = 1,
    hSplitterBox            = 2,
    bothSplitterBox         = 3,        // just for keyboard
    vSplitterBar1           = 101,        // 横方向の上下に動かすバー
    vSplitterBar15          = 115,
    hSplitterBar1           = 201,        // 縦方向の左右に動かすバー
    hSplitterBar15          = 215,
    splitterIntersection1   = 301,        // 縦と横が交わる点
    splitterIntersection225 = 525
};
 と宣言されているので、操作禁止にしたい方向のときに"0"を返すようにする。
int CMySplitterWndEx::HitTest(CPoint pt) const
{
    int ht = CSplitterWnd::HitTest(pt);// CSpritterWndExは、テーマの変更処理が追加されているだけなので、
                                            // CSplitterWndでも良い。
    if(ht == 201 || ht == 301)       // 横方向のバーだけ上下に移動可
        ht = 0;                        // ヒットしてないことにする

    return ht;
}
 この例だと、横方向のバーだけ上下に移動出来るようになり、縦方向や交差している点ではカーソルも変更されない。
 enumのHitTestValueはcppファイル内で宣言されているため、使いたい場合は自分で追加する。
ランキングへ     posted by 遠雷 | Comment(0) | フレーム
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。