MFC(VC++6.0)のダイアログベースでプログラムを製作していますが、
そのテキストにマウスカーソルが乗ったときに処理をさせたいです。
そして、マウスカーソルがテキストから離れたときにも処理をさせたいです。
どういうメッセージが送られてくるのかが知りたいので、
ご存知の方、ご教授お願いします。

わかりやすく言うと、ダイナミックHTMLの
OnMouseOverとOnMouseOutみたいな処理をさせたいのです。

A 回答 (1件)

ダイアログで、メッセージループを作成して、メッセージループないで、『WM_MOUSEMOVE』をサーチして、メッセージループのパラメータで、現在位置が取得出来るので、その現在位置から、コントロールを調べれば出来ます(GetCaptureで、マウスをキャプチャしているMOOを調べる必要もありますね)



 また、どういったメッセージが送られてくるのか調べるだけでしたら、VC++の中のツールでスパイって奴があるので、これでメッセージを調べる事が出来ます。
    • good
    • 0
この回答へのお礼

教えていただいたことを参考にいろいろやってみます。

ありがとうございました。

お礼日時:2001/05/25 23:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qマウスのホイールと左クリックがおかしい

マウスの左クリックの調子が悪く、一度分解をしてみました。
その左クリックのスイッチの所に届いていない(?)みたいで開けた状態でスイッチを押すと左クリックはきくのですが…。
マウスはHID 準拠マウス というXP購入時に付属していたマウスです。
後、そのときの衝撃で外れたホイールの近くの金具が二個落ちてしまいました。丸まっているパーツ(右クリックの方向)は付けれたのですが左のパーツの位置がどうにもわからなくて・・・。
お暇な方、お願いします。

Aベストアンサー

こういってしまうと元も子もないのですが、マウスなんて安いんだから新しいの買いましょう。

修理方法を知りたいのですか?
写真も無し、型番も無しではさすがに答えようがありませんよ。
ホイール近くの金具? 丸まってるパーツ? なんのこっちゃですよ。

QMFC・ダイアログベースで、ダイアログの変更内容が反映されない・・・

初めて質問させていただきます。よろしくお願いします。

当方、VisualStdio2005内のC++2005で、
ダイアログベースにてツールを開発していました。

ある日、ダイアログ上に多くのEditコントロールを作成(追加)することになり、
ダイアログリソースをVC内のリソースエディタにて、
テキスト形式でコントロールを追加していきました。

そのときは、テキストでの変更内容がダイアログにも反映されていたのですが、
その後はダイアログにツールボックスでのコントロールの追加やサイズ変更など、
見た目には反映されてもビルド後に反映されなくなってしまいました。

クリーン後のリビルドでも、問題は解決しません。

原因と対策をご存知の方、いらっしゃいましたらご教授いただけませんでしょうか。

よろしくお願いします。

Aベストアンサー

VC2005は初心者です。VC6.0は仕事で使っていました。

私はダイアログリソースをテキスト形式でコントロールを追加したことがないので、基本的にご期待に添える回答ではないと思いますが、ご参考までに。

回答する前に質問ですが、もっと詳しい問題の状況、状態を教えていただけませんか?「ビルド後に反映」とは?実行までおこなっていない、ということですか?

以下、回答です。

ダイアログリソースとダイアログのウィンドウの関連付けは正しいですか?ダイアログIDが間違って指定されていませんか?変更対象のダイアログとビルド後の実行したダイアログが違っているなんてことがあったりします。

上記のような間違いがなければ、Editコントロールを1つだけにしてビルド&実行してみてください。それで問題があれば、Editコントロールの書き方に問題があるかも?(いや、その場合はコンパイルでエラーになるはずだけど)。問題がなければ、Editコントロールを1つずつ増やしてビルド&実行する。ある程度増やしたら、思い切って半分くらい増やしてみたりしてもいいと思います。

VC2005は初心者です。VC6.0は仕事で使っていました。

私はダイアログリソースをテキスト形式でコントロールを追加したことがないので、基本的にご期待に添える回答ではないと思いますが、ご参考までに。

回答する前に質問ですが、もっと詳しい問題の状況、状態を教えていただけませんか?「ビルド後に反映」とは?実行までおこなっていない、ということですか?

以下、回答です。

ダイアログリソースとダイアログのウィンドウの関連付けは正しいですか?ダイアログIDが間違って指定されていませんか?...続きを読む

Qマウスの右クリックがおかしいんです。

こんにちは。
マウスの右クリックでコピー&ペーストをよく利用しているのですが
1週間前程からマウスの右クリックを押すと瞬時に消えてしまうと言う現象になりました。
そして先ほどからは右クリックを押すとただの白い箱が出るだけになって
そこを選択すると文字が出てくると言う現象に変わりました。
何をした覚えもありませんが、何故このような状態になるのでしょうか?
ご存知の方がいらしたら是非教えてください。

Aベストアンサー

補足ありがとうございます。
どうやらOSの問題みたいですね~
とりあえずこの辺で探してみてください。

http://support.microsoft.com/default.aspx?scid=fh;JA;KBHOWTO&sd=GN&ln=JA

http://winfaq.jp/

ちなみに右クリックででるメニューは「コンテキストメニュー」って呼ぶらしいです。

頑張ってくださいヽ(^。^)ノ

Qダイアログベースでの様々なフォントのスタティックテキストの貼り付け

お世話になります。
現在MFCのダイアログベースアプリケーションを作成しており、ダイアログ上に大小さまざまフォントのスタティックテキストを貼り付けています。
さまざまフォントがあるということは、それだけスタティックテキストに割り当てるCFontも多数作らなければならないと思います。

そこで質問なのですが、
この大小さまざまな(約5種類ほど)のフォントのスタティックテキストを、複数のダイアログで貼り付けようと思っているのですが、その際にダイアログ毎にメンバ変数としてCFontを5種類定義するのと、5種類のサイズ用のCStaticのクラスを作成し、それらを複数のダイアログに貼り付けるのとどちらがよいでしょうか?

クラスをむやみに増やすのもプログラムが見づらくなる気もしますし、ダイアログ毎にその都度CFontをCreateFontするのも面倒かなと思い、質問させて頂きました。

ご意見をよろしくお願い致します。

Aベストアンサー

>しかしCPaint()内でCreateFontをして、CPaint()の最後にリソースの確保をしたCFontをDeleteObjectすると、そのフォントがダイアログに反映されないのではないでしょうか?

フォントがスタティックテキストに反映されるのは「スタティックテキストのCPaint()内で行った描画のみ」です。

なので、ダイアログのCPaint()を書き換えても、何の意味もありません。

つまり、

・スタティックテキストのCPaint()をオーバーライドする
・そのCPaint()内で、CFontをCreateFontする
・スタティックテキストのDCをGetDCする。このDCは親から継承され、フォントや色などのプロパティは「スタティックテキストの親であるダイアログ」に設定されたプロパティと同じになっている筈
・得たDCに作成したフォントを設定する
・フォントを変えたDCに対してCDC::DrawTextExで文字列を描画する←ここで行った「DCに対する描画」のみがダイアログに反映される。他の場所で描画しても、ウィンドゥが再描画された瞬間に消えてしまう。
・GetDCしたDCをReleaseDCする←同時に使用できるDC数は非常に少ないので、これを忘れるとあっという間に破綻する
・CFontをDeleteObjectする

と言う事です。

ダイアログベースでなくフォームデザイナを使ってアプリを書く場合、フォームデザイナでフォームにスタティックテキストを貼り付ける際に、Fontプロパティを「好みのフォント」にしておけば済むので、上記のような「面倒な事」は一切必要ありません。

スタティックテキストのCPaint()をオーバーライドしなかった場合、以下のようなデフォルトの描画処理が行われます。

・スタティックテキストのDCがGetDCされる。このDCは親から継承され、フォントや色などのプロパティは「スタティックテキストの親であるダイアログ」に設定されたプロパティと同じになっている筈
・そのDCに対してCDC::DrawTextExで文字列が描画される。つまり、スタティックテキストの親であるダイアログと同じフォントで描画される
・GetDCしたDCをReleaseDCされる

要は「CPaint()の中で描画した事がすべて」です。「そこでやったことだけ」がウィンドゥに反映され、「そこでやらなかったこと」はウィンドゥに反映されません。

CDC::DrawTextExでなく、CDC:FillRectやCDC::Polylineをやったって構いません。ともかく「そこでやった描画がすべて」です。

逆にいうと「CPaint()を乗っ取ったら、他の場所で何やっても無駄」って事で、フォントを削除しても描画には何の影響も出ません。

>しかしCPaint()内でCreateFontをして、CPaint()の最後にリソースの確保をしたCFontをDeleteObjectすると、そのフォントがダイアログに反映されないのではないでしょうか?

フォントがスタティックテキストに反映されるのは「スタティックテキストのCPaint()内で行った描画のみ」です。

なので、ダイアログのCPaint()を書き換えても、何の意味もありません。

つまり、

・スタティックテキストのCPaint()をオーバーライドする
・そのCPaint()内で、CFontをCreateFontする
・スタティックテキストのD...続きを読む

Qクリックできない!マウスがおかしい?

数日前から、なんだかマウスが思ったように動いてくれません。
・プルダウンメニューというのでしょうか、下向きの矢印をクリックしてもメニューが出てきてはすぐ引っ込んでしまって選択できない
・文章の一部分を選択しようとドラッグしても、全体が選択されてしまったり、単語だけが選択されてしまう
・いくつか同時にウィンドウを開けている時、ひとつを×で閉じたいのに、勝手にその他のウィンドウまで閉じられてしまう
・・・などなど、数えだしたらきりがありません;;
パソコンを購入したときについていたマウスをそのまま使っているので、もし新しいのを購入するのだとしたら、どれにすればいいのか分からないのです。マウスって寿命があるんですか?まだ数年しか使っていないのですが・・・。今のこの調子が悪いのは、光学マウスというのでしょうか、下に赤い光が点灯しているタイプです。
いままでも何度か、上のような症状が出たりはしたのですが、数日で治っていたのでそのまま使い続けていました。でも、さすがにイライラしてきて。マウスがおかしいのかな、と超初心者の私は思っているのですが、もしかして他におかしい部分がある??それすらも分かりません。
もしこのままのマウスを使い続けるとしたら、どうすれば症状は治まるのでしょうか?買い換えるとしたら、どんなタイプがいくら位で手に入るのでしょうか?それとも、マウスがおかしいのではないのでしょうか?
パソコン初心者の私に、是非ご教示願います。

数日前から、なんだかマウスが思ったように動いてくれません。
・プルダウンメニューというのでしょうか、下向きの矢印をクリックしてもメニューが出てきてはすぐ引っ込んでしまって選択できない
・文章の一部分を選択しようとドラッグしても、全体が選択されてしまったり、単語だけが選択されてしまう
・いくつか同時にウィンドウを開けている時、ひとつを×で閉じたいのに、勝手にその他のウィンドウまで閉じられてしまう
・・・などなど、数えだしたらきりがありません;;
パソコンを購入したときについて...続きを読む

Aベストアンサー

もちろんマウスも消耗品ですから壊れますよ。
出来れば誰か知り合いが使っているマトモなマウスを貴方のPCにさして使ってみてほしいです。
それで何の問題もなく動くようであれば完全にマウスが壊れたと思って頂いて結構です。
新しく購入する際はお好きなマウスを買ってOKです。安いのでも高いのでもお好きなものをどうぞ。とりあえずお店に行って店員に直接聞いた方が色々と楽だと思います。

Qマウスムーブでのマウスカーソル表示・非表示

いつもお世話になっております。
VS2005でC++を利用してWindowsアプリケーション作成を行っています。

マウスカーソルが一定時間動かなかったらマウスカーソルを非表示、
マウスカーソルが移動したらマウスカーソルを表示させる

このようなプログラムを作成したいと考えています。
今、ShowCursorでマウスカーソルの表示・非表示はできたのですが、
「マウスムーブが一定時間無かった場合」というのは
どのように調べたらよいのでしょうか。

ご教授お願いいたします。

Aベストアンサー

>あと3秒をチェックするのにif文を使っているため ==3 としていたのですが、それではできないのでしょうか。
きっちり動けば良いですが例えばイベント動作が遅れて
Timer関数走ったときの求めた時間秒数が
2・4のように変化していたら ==3 のチェックでは引っかかりませんよね
>=3でチェックすれば4でも引っかかりますよね
ということです

> =3 だとエラーが出てデバッグできません。
> を引用と見間違えられたかな? 比較式としての >= です
(今見たら確かに間違えそうだ)

#2さんへの補足についても一つ
>エラーはでずにデバッグできるのですがマウスカーソルの表示非表示はなりませんでした。
ShowCursor時間数の御理解がいまひとつのようです
TRUE・FALSEのパラメータでで一回呼べば表示・非表示になるという関数ではないのです
(前書いたURLの説明を再度お読みください)

内部にマウス表示のカウンターを持っていてそのカウント値が
負数だったとき初めて非表示0以上で表示と切り替わります
ですのでちゃんと動作させるためには関数の戻り値をチェックして
必要な回数分ShowCursor関数をコールし続けなければなりません
whie(ShowCursor(TRUE) >= 0 );
whie(ShowCursor(FALSE) < 0 );  のように

書いているコードではShowCursor(TRUE)は数回呼ばれる
可能性があるのにShowCursor(FALSE)は
一定時間経過後1回しか呼ばれません
その為非表示にならないのです

> CXX0017: エラーです: シンボル "ShowCursor" が見つかりません
これについてはどのような状況で出ているのか分からないので
なんともいえません

>あと3秒をチェックするのにif文を使っているため ==3 としていたのですが、それではできないのでしょうか。
きっちり動けば良いですが例えばイベント動作が遅れて
Timer関数走ったときの求めた時間秒数が
2・4のように変化していたら ==3 のチェックでは引っかかりませんよね
>=3でチェックすれば4でも引っかかりますよね
ということです

> =3 だとエラーが出てデバッグできません。
> を引用と見間違えられたかな? 比較式としての >= です
(今見たら確かに間違えそうだ)

#2さん...続きを読む

Qマウスのクリックとドラッグの動作がおかしい

現在、二年程前に買ったマウスを使っていますが、動作が変になりました。症状は以下の通りです。

1.エクスプローラでフォルダをクリックや長押しすると、ダブルクリックしたときと同じようにフォルダが開かれる。
2.ファイルを複数選ぶとき、Ctrlキーを押しながらクリックや、ドラッグすると途中で選択が外れる。
3.ブラウザのスクロールバーをドラッグしていると、途中でドロップされる。
4.フォルダ、ファイルをドラッグして移動出来ない。
5.お気に入りのURLをドラッグしようとすると、クリックしたようにそのページが開かれる。

買い替えの時期だとすれば、何か留意すべきことは有りますか?

Aベストアンサー

・シングルクリックで開く設定になっていないか。
・マウスユーティリティを使っていないか。
・ノートPCだったらタッチパッドを無効にしても症状が出るか。
・マウスパッドを変えても同様か。
・セーフモードで起動したときも症状が再現するか。

などを確認した上、やっぱり症状が出るといった場合はマウスの故障っぽいですね。

QVC++のMFCでエラーが出ます

MFCを使って、本を見ながらMDIアプリケーションを作ったのですが、実行してみるとカーソルがツールバーのところへ来ると「ハンドルされていない例外です」というエラーが出ます。このエラーは最初に実行したときには起こらないのですが、2回目以降の実行で起こり、また、MFCで作った他のアプリケーションでもこのエラーが起こるようになります。
 オンラインヘルプを見て、サービスパックをインストールしたのですが直りません。VC++も再インストールしました。これはWindowsを再インストールするべきなのでしょうか?どなたか、私と同じ状況になられた方いらっしゃいますか?是非とも教えていただきたいです。「3週間マスター」どころじゃないです。お願いします。

Aベストアンサー

補足から...

 デバッグが、出来ますし、修正も可能です。

 また根性があるのなら...MFCをラッピングした独自クラスの作成も可能です。

 また、環境の責任かどうかを調べる為に、releaseで作成したアプリケーションを、別のパソコンで動作させてみてはどうでしょうか?
 それで問題なければ、開発環境が変になっている可能性が高いですので、OSの再セットアップから行った方が気分が良いと思います。

Qマウスの右クリックの動作がおかしい

過去ログを見たのですが、見つけることができずに、質問させていただきます。

OSはWin98SE
IEは6.0

のノートブックですが、IEで右クリックをすると、前の画面に戻ってしまいます。
以前は、メニューが表示されていたのですが。
(Windowsのデスクトップ画面ではメニューがでます。どうも、IEのときだけのようです)

特別な設定等をした記憶はないのですが、右クリックでメニューを出す設定に戻したいのです。

どなたか、設定方法のわかる方がいらっしゃしましたら、アドバイスお願いします。

Aベストアンサー

問題のありそうなところをチェックしていくと
(1)マウスの設定の問題(PS/2互換マウスだったら設定ではないと思います)
(2)マウスドライバーの誤作動
(3)フリーソフトと相性がわるい
(4)IEの誤作動
(5)OSの誤作動
などですか

最初にとりあえず再起動を試してね。
(1)に関しては、前のかたがかいてますので 設定のマウスのところを確認してみてください
(2)に関しては コントロールパネルのシステムを開いてマウスのところにびっくりマークがでていたらマウスのところをすべて削除して再起動してみてください

出てなくてもドライバーを削除して再起動してもいいと思います。
自動的にインストールされるか(ドライバー)されなかったら、ドライバーを入れなおしてください。

(3)に関しては、最近入れたフリーソフトなどを思い出して削除してみてください。それだけで障害が収まることがあります。
また、フリーフォントなどで起こることもあります。

(4)に関してはIEをいったん削除して再インストールしてみてね
(個人的にはIE6.0はまだ好きになれないけどね)


(5)それでだめだったらリカバリーするか OSをいれなおしてね
リカバリーのほうがいいかも

問題のありそうなところをチェックしていくと
(1)マウスの設定の問題(PS/2互換マウスだったら設定ではないと思います)
(2)マウスドライバーの誤作動
(3)フリーソフトと相性がわるい
(4)IEの誤作動
(5)OSの誤作動
などですか

最初にとりあえず再起動を試してね。
(1)に関しては、前のかたがかいてますので 設定のマウスのところを確認してみてください
(2)に関しては コントロールパネルのシステムを開いてマウスのところにびっくりマークがでていたらマウスのところをすべて削除して再起動してみて...続きを読む

Qwaitせずにキー入力があった場合のみ処理をさせたい(C言語)

getch()だと、そこでいったん待機状態になりますが、何もキー入力が無かった場合通常通り処理が続行され、もしキー入力があった場合のみ、何か処理をさせたいって時はどうすればいいでしょうか?

ちなみにヘッダーファイルが見つからなくて、kbhit()が使えませんでした。

Aベストアンサー

select()でstdinを監視すれば可能だと思います。
select()のマニュアル(man select)にサンプルがあるので試してみてください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング