カーソルの変化

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

カーソルの変化

#1 投稿記事 by 雷電 »

最近、カーソルをある位置に移動させると、カーソルが変わるように設定しようとたくらんでいます。
しかし、関数しか見つからず、細かいことは載っていません。
ご教授願えますか?

探したサイトはVBのやつでしたが、移植すれば問題ないので・・・

http://www.winapi-database.com/Graphics ... ursor.html
===============================
MyHomePage;; raiden.no.land.to/
===============================
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

Re: カーソルの変化

#2 投稿記事 by MML »

こんにちは。ゆちボンです。
> http://www.winapi-database.com/Graphics ... ursor.html
ちなみに、僕もこのサイトにお世話になってます(^^;

そういうことはおいといて、早速ですが、
引数の1個目は「カーソルのハンドル」、つまり、
「CreateCursor」でカーソルを作って返ってくる、ハンドルを指定します。

引数の2個目はIDの指定つまり、
普通に使っているときのカーソルと指定したハンドルのカーソルを入れ替える
というものです。
だから、Iビーム(文字入力時にでるカーソル)を指定したカーソルハンドルと
入れ替えます。

コード: 全て選択

'定義
Dim hMouse As DWord
Const IDC_IBEAM = 32513

'取得
'hMouse = CreateCursor(GetModuleHandle(),0,0,13,20,?,?)

'Iビームカーソルをハンドル「hMouse」のものと入れ替える。
SetSystemCursor(hMouse,IDC_IBEAM)

'開放
DestroyCursor(hMouse)
使うときは取得の下で、hMouseに「CreateCursor」で取得してください。
「CreateCursor」はABのヘルプに乗っているのでわかると思うのですが
僕は?の部分がよくわからなかったので一応その行をコメントアウトしています。
注意として、必ず開放することと、
カーソルはウィンドウズのアプリケーション全部と共有しているので、一部分だけの変更にしたほうがいいと思います。

あとは、かなり詳しい方にお願いします。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: カーソルの変化

#3 投稿記事 by 7 »

ウィンドウズ内臓?のカーソルに限られますけど。

> 最近、カーソルをある位置に移動させると、カーソルが変わるように設定しようとたくらんでいます。
カーソルが移動する度にメインウィンドウ内のある位置にカーソルが存在するか判定し、カーソルが存在する場合イメージを変更するようにするといいと思います。
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#4 投稿記事 by 雷電 »

7さん、ゆちボンさん、コード提供ありがとうございます。
一応、ゆちボンさんのだけやってみたんですが、?が分からないため、NULLで試したところ、エラーが出てコンパイルが止まりました。
GetModuleHandleのパラメータがおかしいとか?
・・・なぜこんなエラーが出るのか不思議です。

スタッティックの文字の上にあると色とポインタ(カーソル)を変更するようにしたいんです。
7さんのコードも今からやってみようと思います。
===============================
MyHomePage;; raiden.no.land.to/
===============================
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#5 投稿記事 by 雷電 »

やってみたところ、ちゃんと動きますね。
ですが、指を刺しているカーソル(こんな感じ)が表示したいのですが、system32のフォルダを調べてみると、comctl32.dllこのライブラリの中のリソース108が僕の望むカーソルなのですが・・・どうやって取り出すのか・・・
===============================
MyHomePage;; raiden.no.land.to/
===============================
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#6 投稿記事 by イグトランス »

CreateCorsor(...)の部分をLoadImage(0, OCR_HAND, IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE)にしたら良いと思います。
ただしこれはcomctl32.dllのアイコンではなく,ユーザが(マウスのプロパティから)設定したアイコンになるはずです。

またこの方法で指差しのカーソルを読み込む方法は,Windows 2000以上で使えることになっていますが,
インターネットを検索してみたところ,Windows 9xでも使えると言う話も見かけます。
Windows 2000以前でも確実に対応したいのでしたら,レジストリの設定を読み込んでやることになるでしょう。
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#7 投稿記事 by 雷電 »

置き換えてやってみましたが、
OCR_HAND
が無効な識別子になってしまいます。
定数かなにか、加えるものがありそうな気がするのですが・・・
===============================
MyHomePage;; raiden.no.land.to/
===============================
OverTaker
記事: 231
登録日時: 2005年5月31日(火) 17:14
お住まい: 茨城県

#8 投稿記事 by OverTaker »

検索すればすぐに出てきますよ。
OCR_HAND=32649みたいです。
Tomorrow
記事: 72
登録日時: 2005年6月04日(土) 10:09

Re: カーソルの変化

#9 投稿記事 by Tomorrow »

WM_SETCURSORメッセージにて

コード: 全て選択

SetCursor(LoadCursor(NULL, IDC_HAND))
で、いいのでは?
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#10 投稿記事 by 雷電 »

できました。
この件についてはOKですが、アイテム(Static1)の座標を計算して、その上にカーソル(ポインタ)が触れたら変えるというのはまだ実装できていません。

どのように実装したらよいでしょう?
===============================
MyHomePage;; raiden.no.land.to/
===============================
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#11 投稿記事 by 7 »

> この件についてはOKですが、アイテム(Static1)の座標を計算して、その上にカーソル(ポインタ)が触れたら変えるというのはまだ実装できていません。
>
> どのように実装したらよいでしょう? コメント書いてないので分かり難いかもしれません...。

スタティックコントロールに関連付けられているマウスカーソルのハンドルを、SetClassLong・SetClassLongPtr関数を使ってIDC_HANDに変更してしまえばもっと簡単なんじゃないかと思ったんですけど、どうやら無理みたいです。
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#12 投稿記事 by 雷電 »

できました。
7さん、ありがとうございます。
こんな計算をしているのかと、コードを見ながら考えています。
色の変化は、以前に質問したのでそれを見ながら考えます。
===============================
MyHomePage;; raiden.no.land.to/
===============================
返信する