タスクトレイに追加されたアイコンに強制的にツールチップを表示する方法

[戻る]
Takahashi 2004/01/09(金) 15:08:35
こんにちは、高橋と申します。

タスクトレイ常駐型のアプリケーションを製作していますが、
タイトルの件が解決できずにおります。

開発環境は WinndowsXP SP1 , Visual C++ .NET 2003 で、 
ダイアログベース, MFC で開発しております。

現在、タスクトレイにアイコンを表示する、ポップアップメニューを表示する
等のことは、実現できております。

通常、タスクトレイに表示させたアイコンにマウスを乗せると
ツールチップが表示されると思うのですが、このツールチップを
強制的に(ユーザがマウスを乗せなくとも)アプリケーション側から
表示させる方法を探しております。

具体的な例としては、メールを扱うソフトであれば、「新規メール受信」
等メッセージを表示して、ユーザにバックグラウンドでの動作を
通知するなどです。

解決策として、別にウインドまたは、ツールチップを製作して、
アイコンの横に自分で表示させる等のことも考えたのですが、
できれば標準のツールチップで実現できた方が簡単と判断して、
保留しております。

どなたか良い解決方法のご教授、お願い致しします。

ひろぴー 2004/01/09(金) 20:28:12
CToolTipCtrlを使用してはダメですか?
標準のツールチップが『タスクトレイに表示させたアイコンにマウスを乗せる』と表示されるツ
ールチップの事をおっしゃっているとしたら、同じモノだと思います。

Takahashi 2004/01/09(金) 22:04:49
ひろぴー さんレスありがとうございます。

質問の内容がわかりにくくてすいませんでした。
ひろぴーさんの、おっしゃるとおり CToolTipCtrl を使用して
表示するのと同じことをしたいのです。

ただ、楽をしようとして

NOTIFYICONDATA    NotifyIconData;
...

_tcscpy(NotifyIconData.szTip, _T("表示させたい文字"));
::Shell_NotifyIcon(NIM_MODIFY, &NotifyIconData);

で、設定をした文字をアプリケーションから
表示できたらと思ったのですが、やはりダメなようですね。
素直に CToolTipCtrl を使用するようにします。

ただ、自力でツールチップを好きな位置へ表示する場合の方法が、
よくわかりません。私がやったことがあるのは、CToolTipCtrl::RelayEvent()
を PreTranslateMessage() 内で呼び出してマウスメッセージを中継する
方法なのですが、LPMSG lpMsg の lpMsg を自分で制作するとして、
コントロールの登録はどうすればいいのでしょうか?

私の理解では、CToolTipCtrl::AddTool で登録したコントロール内に
RelayEvent() で、引数に設定された pMsg からマウスのメッセージを得て
マウスポインタが重なった場合、所定の時間をおいてツールチップが
表示されるだったと思うのですが、今回の場合はタスクトレイ内のアイコン
に重なった場合なので、アイコンをコントロールとして AddTool
に指定する方法があるのでしょうか?
それとも、ほかの方法で指定する方法があるのでしょうか?

よろしくお願いします。

シャノン 2004/01/09(金) 22:51:33
MFC はシロウトですが、SDKなら…
OS が Win2k 以降なら、バルーンスタイルのチップなら任意のタイミングで出せると思
います。
NOTIFYICONDATA に NIF_INFO フラグとその他必要な項目を設定し、出したいタイミング
で NIM_MODIFY で呼んでやればよいかと。

#というか、任意のタイミングでバルーンチップを出す方法はこれでいいんでしょう
か?

Takahashi 2004/01/10(土) 00:52:39
[[解決]]
シャノンさんレスありがとうございました。

シャノンさんの方法で、バルーンチップを表示することができ、
問題は解決いたしました。ありがとうございました。

問題は、もちろん解決したのですが、バルーンチップというものが
表示されてみると、「ああ・・・これか」といった感じで、
今まで気にもとめていなかったのですが、そういえばこんなのでるな・・・と、
とても勉強になりました。
これは使えそうなので、今後のアプリケーション開発等に使っていこうと思います。

ひろぴーさん、シャノンさん、また、このスレッドを呼んでくださった方
ありがとうございました。

古いスレッドには追加発言できません。