📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 261行目: | 261行目: | ||
それは、CSplitterWndExの派生クラスを作成して、OnNcHitTestハンドラをオーバーライドして<br> | それは、CSplitterWndExの派生クラスを作成して、OnNcHitTestハンドラをオーバーライドして<br> | ||
CSplitterWndEx::OnNcHitTest関数で無条件にHTBORDERを返せば、マウスカーソルも変更されない。<br> | CSplitterWndEx::OnNcHitTest関数で無条件にHTBORDERを返せば、マウスカーソルも変更されない。<br> | ||
<br> | |||
<br> | |||
分割ウインドウにて、仕切り位置を固定し、ユーザーに位置変更をさせない方法がある。<br> | |||
また、カーソルが乗っても移動用のカーソルに変更しないようにする。<br> | |||
<br> | |||
まず、CSpritterWndまたはCSpritterWndExの派生クラスを作成する。(ここではCMySplitterWndEx)<br> | |||
CMySplitterWndExにてHitTestハンドラをオーバーライドする。<br> | |||
HitTestハンドラは、下記のように宣言されている。<br> | |||
virtual int HitTest(CPoint pt) const; | |||
<br> | |||
HitTestの戻り値は下記の通りで、操作禁止にしたい方向のときに"0"を返すようにする。<br> | |||
<source lang="c++"> | |||
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 | |||
}; | |||
</source> | |||
<source lang="c++"> | |||
int CMySplitterWndEx::HitTest(CPoint pt) const | |||
{ | |||
int ht = CSplitterWndEx::HitTest(pt); // CSpritterWndExは、テーマの変更処理が追加されただけなのでCSplitterWndでも可 | |||
if(ht == 201 || ht == 301) | |||
{ // 横方向のバーだけ上下に移動可 | |||
ht = 0; // ヒットしてないことにする | |||
} | |||
return ht; | |||
} | |||
</source> | |||
上記の例では、横方向のバーだけ上下に移動出来るようになり、縦方向や交差している点ではカーソルも変更されない。<br> | |||
enumのHitTestValueはcppファイル内で宣言されているため、使用する場合は各自で追加する。<br> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:MFC]] | [[カテゴリ:MFC]] | ||