マウスカーソルの座標を取得したい!

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

マウスカーソルの座標を取得したい!

#1

投稿記事 by Jimmy » 12年前

C言語初心者です。好奇心でマウスの座標を取得する方法を調べていたらこんなプログラムを見つけました。

コード:

#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
	HDC hdc;
	POINT po;

	switch (msg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_KEYDOWN:
		GetCursorPos(&po);
		if(wp == VK_UP)	po.y--;
		if(wp == VK_DOWN)	po.y++;
		if(wp == VK_LEFT)	po.x--;
		if(wp == VK_RIGHT)	po.x++;
		SetCursorPos(po.x , po.y);
		return 0;
	}
	return DefWindowProc(hwnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
			PSTR lpCmdLine , int nCmdShow ) {
	HWND hwnd;
	MSG msg;
	WNDCLASS winc;

	winc.style		= CS_HREDRAW | CS_VREDRAW;
	winc.lpfnWndProc	= WndProc;
	winc.cbClsExtra	= winc.cbWndExtra	= 0;
	winc.hInstance		= hInstance;
	winc.hIcon		= LoadIcon(NULL , IDI_APPLICATION);
	winc.hCursor		= LoadCursor(NULL , IDC_ARROW);
	winc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
	winc.lpszMenuName	= NULL;
	winc.lpszClassName	= TEXT("KITTY");

	if (!RegisterClass(&winc)) return -1;

	hwnd = CreateWindow(
			TEXT("KITTY") , TEXT("Kitty on your lap") ,
			WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			NULL , NULL , hInstance , NULL
	);

	if (hwnd == NULL) return -1;

	while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
	return msg.wParam;
}
このプログラムを実行し、キーボードフォーカスを得ている状態で
キーボードの方向キーを押すと、マウスカーソルが1ピクセルずつ移動します
http://wisdom.sakura.ne.jp/system/winap ... win44.htmlより)

int main(void){ }しか使った事がないよのでよく分かりません。3行目のLRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)ってなんですか?マウスの座標を取得するのってこんなに手間がかかるんですか?色々と教えていただけると嬉しいです!

nil
記事: 428
登録日時: 12年前

Re: マウスカーソルの座標を取得したい!

#2

投稿記事 by nil » 12年前

マウスの座標を取得するのに手間がかかっているのではなく、
ウィンドウの表示が煩雑な処理なだけです。
座標を取得する処理は
GetCursorPos(&po);
の部分です。

Jimmy

Re: マウスカーソルの座標を取得したい!

#3

投稿記事 by Jimmy » 12年前

ウインドウ作成部分がたくさんあるのですね。GetCursorPos(&po);は分かりました。ですが、この関数はint main(void){ }のなかでは動きません。どうしたらいいですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マウスカーソルの座標を取得したい!

#4

投稿記事 by softya(ソフト屋) » 12年前

Jimmy さんが書きました:ウインドウ作成部分がたくさんあるのですね。GetCursorPos(&po);は分かりました。ですが、この関数はint main(void){ }のなかでは動きません。どうしたらいいですか?
これはWin32APIを使ったウィンドウアップリですから、コンソールアプリとはmainとWinMainで名前が違います。
コンソールアプリでマウス座標がほしいだけなら
#include <windows.h>
だけして、GetCursorPos()を使えば得られるはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Jimmy

Re: マウスカーソルの座標を取得したい!

#5

投稿記事 by Jimmy » 12年前

softya(ソフト屋) さんが書きました:
Jimmy さんが書きました:ウインドウ作成部分がたくさんあるのですね。GetCursorPos(&po);は分かりました。ですが、この関数はint main(void){ }のなかでは動きません。どうしたらいいですか?
これはWin32APIを使ったウィンドウアップリですから、コンソールアプリとはmainとWinMainで名前が違います。
コンソールアプリでマウス座標がほしいだけなら
#include <windows.h>
だけして、GetCursorPos()を使えば得られるはずです。
遅くなりました。ありがとうございます!おかげ様で解決出来ました。

nil
記事: 428
登録日時: 12年前

Re: マウスカーソルの座標を取得したい!

#6

投稿記事 by nil » 12年前

解決チェックをお願いします
[追記]されてましたね、すいません

閉鎖

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