マウスの位置の監視

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

マウスの位置の監視

#1

投稿記事 by 氷室ってかっこいい名前じゃね » 13年前


マウスが指定された位置にくるとその部分が黄色の枠に囲まれるというプログラムを作っていますが、うまくいきません。
マウスの現在位置が取得できていないのでわと思い、左上で確認できるようにしたのですが、異常がありませんでした。
こうなってしまうともう僕にはお手上げです。
わかる方に教えていただきたいです。お願いします。
[hr]
#include "DxLib.h"

int Key[256];

typedef struct{
int x;
int y; //座標
int WheelRotVol;//ホイールの回転量
unsigned int Button[8]; //ボタンの押した状態
}Mouse_t;
Mouse_t Mouse;

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}

int GetHitMouseStateAll_2(Mouse_t *Nezumi){
if(GetMousePoint( &Nezumi->x, &Nezumi->y ) == -1){ //マウスの位置取得
return -1;
}
int MouseInput=GetMouseInput(); //マウスの押した状態取得
for(int i=0; i<8; i++){ //マウスのキーは最大8個まで確認出来る
if( (MouseInput & 1<<i ) != 0 ) Nezumi->Button++; //押されていたらカウントアップ
else Nezumi->Button = 0; //押されてなかったら0
}
Nezumi->WheelRotVol = GetMouseWheelRotVol() ; //ホイール回転量取得
return 0;
}

int flag;
void message_box(){
flag=MessageBox(
NULL ,
TEXT("フルスクリーンモードで起動しますか?") ,
TEXT("スクリーン設定") ,
MB_YESNO | MB_ICONQUESTION );
if(flag==IDYES)
ChangeWindowMode( FALSE );
else
ChangeWindowMode( TRUE );
}

int white=GetColor(255,255,255);
int yellow=GetColor(255,255,0);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
message_box();
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
SetMouseDispFlag(TRUE);
int place=0;
int title=CreateFontToHandle("MS 明朝",40,4,DX_FONTTYPE_NORMAL);
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && GetHitMouseStateAll_2(&Mouse)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理  ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない
DrawFormatString(0,0,white,"座標[%d,%d],回転量:%d,",Mouse.x,Mouse.y,Mouse.WheelRotVol);
//タイトル画面
if(place==0){
DrawStringToHandle(130,160,"Battle",white,title);
DrawStringToHandle(210,210,"Create",white,title);
DrawStringToHandle(280,260,"Exit",white,title);
if(120<= Mouse.x <=520 && 155<= Mouse.y <=205){
DrawBox(120,155,520,205,yellow,0);
if(Mouse.Button[0]==1)
place=1;
}
else if(120<= Mouse.x <=520 && 205<= Mouse.y <=255){
DrawBox(120,205,520,255,yellow,0);
if(Mouse.Button[0]==1)
place=2;
}
else if(120<= Mouse.x <=520 && 255<= Mouse.y <=305){
DrawBox(120,255,520,305,yellow,0);
if(Mouse.Button[0]==1)
break;
}
}
ScreenFlip();
}

DxLib_End();
return 0;
}

[hr]
追伸:長い文になってしまい申し訳ございません。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: マウスの位置の監視

#2

投稿記事 by みけCAT » 13年前

まずコードはcodeタグで囲んでいただけると嬉しいです。

コード:

if(120<= Mouse.x <=520 && 155<= Mouse.y <=205){
else if(120<= Mouse.x <=520 && 205<= Mouse.y <=255){
else if(120<= Mouse.x <=520 && 255<= Mouse.y <=305){
これがダメですね。C言語の条件分岐は数学の条件とは違います。
正しくは、上から順に

コード:

if(120<= Mouse.x && Mouse.x <=520 && 155<= Mouse.y && Mouse.y <=205){
else if(120<= Mouse.x && Mouse.x <=520 && 205<= Mouse.y && Mouse.y <=255){
else if(120<= Mouse.x && Mouse.x <=520 && 255<= Mouse.y && Mouse.y <=305){
ですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

氷室ってかっこいい名前じゃね

Re:Re: マウスの位置の監視

#3

投稿記事 by 氷室ってかっこいい名前じゃね » 13年前

ありがとうございました。無事直すことができました。
それに、コードの件についてはご忠告ありがとうございます。次からは、気を付けます。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: マウスの位置の監視

#4

投稿記事 by みけCAT » 13年前

解決でしたら、解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

氷室ってかっこいい名前じゃね

Re: マウスの位置の監視

#5

投稿記事 by 氷室ってかっこいい名前じゃね » 13年前

何度もすみません。
まだ何かできてなかったら、教えてくださるとありがたいです。

閉鎖

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