ページ 11

マウスカーソルの移動範囲を制限する

Posted: 2010年2月05日(金) 14:32
by かなで
マウスカーソルの移動範囲を制限するソースをかいております。
しかし下記のソースで上手く動きません。
X軸の制限はできるのですがY軸の制限位置が240px下になってしまっております。
なぜなのでしょうか・・・?

WIN_W 640
WIN_H 480

[/pre]
// マウスカーソルの移動範囲を制限する
int WINDOW_X = ((GetSystemMetrics( SM_CXSCREEN ) - WIN_W ) / 2); // ウィンドウの表示位置
int WINDOW_Y = ((GetSystemMetrics( SM_CXSCREEN ) - WIN_H ) / 2); // ウィンドウの表示位置
RECT rect;
rect.left = WINDOW_X;
rect.top = WINDOW_Y;
rect.right = WINDOW_X + WIN_W;
rect.bottom = WINDOW_Y + WIN_H;
ClipCursor( &rect );

Re:マウスカーソルの移動範囲を制限する

Posted: 2010年2月05日(金) 14:44
by 御津凪
int WINDOW_Y = ((GetSystemMetrics( SM_CXSCREEN ) - WIN_H ) / 2);

となっています。

int WINDOW_Y = ((GetSystemMetrics( SM_CYSCREEN ) - WIN_H ) / 2);

が正しいのではないでしょうか。

Re:マウスカーソルの移動範囲を制限する

Posted: 2010年2月07日(日) 02:38
by かなで
御津凪様

あ~!!!!
すみません。ケアレスミスをしておりました・・・。
ご指摘ありがとうございます。

ただ修正してみたのですがメニューバー分? 範囲が下から始まってしまいます。

なぜなのでしょうか?
┌─────────┐
│         │
│─────────│
│         │
│         │ ←ここらへんから始まります。
│         │
│         │
└─────────┘

Re:マウスカーソルの移動範囲を制限する

Posted: 2010年2月07日(日) 20:41
by 御津凪
ウインドウのクライアント領域部分の中心位置がちゃんと画面全体の中心にあるのでしょうか?

CreateWindow 関数で指定したウインドウサイズはウインドウそのもののサイズで、
クライアント領域のサイズはそれより小さくなります。

もしクライアント領域のサイズ調整が行われていないのなら、そのようにずれるのは当たり前なのですが。
(同様に左右の枠のサイズ分ずれているはずです)

さらに確認なのですが、そのウインドウは絶対的に画面中央に置かれるのでしょうか?
質問欄に書かれているコードでは作成されたウインドウにかかわらず、常に画面の中央でカーソルの移動制限が行われることになります。