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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
かなで

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

#1

投稿記事 by かなで » 15年前

マウスカーソルの移動範囲を制限するソースをかいております。
しかし下記のソースで上手く動きません。
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:マウスカーソルの移動範囲を制限する

#2

投稿記事 by 御津凪 » 15年前

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

となっています。

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

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

かなで

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

#3

投稿記事 by かなで » 15年前

御津凪様

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

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

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

御津凪

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

#4

投稿記事 by 御津凪 » 15年前

ウインドウのクライアント領域部分の中心位置がちゃんと画面全体の中心にあるのでしょうか?

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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る