こんにちは、高橋と申します。
タスクトレイ常駐型のアプリケーションを製作していますが、
タイトルの件が解決できずにおります。
開発環境は WinndowsXP SP1 , Visual C++ .NET 2003 で、
ダイアログベース, MFC で開発しております。
現在、タスクトレイにアイコンを表示する、ポップアップメニューを表示する
等のことは、実現できております。
通常、タスクトレイに表示させたアイコンにマウスを乗せると
ツールチップが表示されると思うのですが、このツールチップを
強制的に(ユーザがマウスを乗せなくとも)アプリケーション側から
表示させる方法を探しております。
具体的な例としては、メールを扱うソフトであれば、「新規メール受信」
等メッセージを表示して、ユーザにバックグラウンドでの動作を
通知するなどです。
解決策として、別にウインドまたは、ツールチップを製作して、
アイコンの横に自分で表示させる等のことも考えたのですが、
できれば標準のツールチップで実現できた方が簡単と判断して、
保留しております。
どなたか良い解決方法のご教授、お願い致しします。
CToolTipCtrlを使用してはダメですか?
標準のツールチップが『タスクトレイに表示させたアイコンにマウスを乗せる』と表示されるツ
ールチップの事をおっしゃっているとしたら、同じモノだと思います。
ひろぴー さんレスありがとうございます。
質問の内容がわかりにくくてすいませんでした。
ひろぴーさんの、おっしゃるとおり CToolTipCtrl を使用して
表示するのと同じことをしたいのです。
ただ、楽をしようとして
NOTIFYICONDATA NotifyIconData;
...
_tcscpy(NotifyIconData.szTip, _T(表示させたい文字));
::Shell_NotifyIcon(NIM_MODIFY, &NotifyIconData);
で、設定をした文字をアプリケーションから
表示できたらと思ったのですが、やはりダメなようですね。
素直に CToolTipCtrl を使用するようにします。
ただ、自力でツールチップを好きな位置へ表示する場合の方法が、
よくわかりません。私がやったことがあるのは、CToolTipCtrl::RelayEvent()
を PreTranslateMessage() 内で呼び出してマウスメッセージを中継する
方法なのですが、LPMSG lpMsg の lpMsg を自分で制作するとして、
コントロールの登録はどうすればいいのでしょうか?
私の理解では、CToolTipCtrl::AddTool で登録したコントロール内に
RelayEvent() で、引数に設定された pMsg からマウスのメッセージを得て
マウスポインタが重なった場合、所定の時間をおいてツールチップが
表示されるだったと思うのですが、今回の場合はタスクトレイ内のアイコン
に重なった場合なので、アイコンをコントロールとして AddTool
に指定する方法があるのでしょうか?
それとも、ほかの方法で指定する方法があるのでしょうか?
よろしくお願いします。
MFC はシロウトですが、SDKなら…
OS が Win2k 以降なら、バルーンスタイルのチップなら任意のタイミングで出せると思
います。
NOTIFYICONDATA に NIF_INFO フラグとその他必要な項目を設定し、出したいタイミング
で NIM_MODIFY で呼んでやればよいかと。
#というか、任意のタイミングでバルーンチップを出す方法はこれでいいんでしょう
か?
シャノンさんレスありがとうございました。
シャノンさんの方法で、バルーンチップを表示することができ、
問題は解決いたしました。ありがとうございました。
問題は、もちろん解決したのですが、バルーンチップというものが
表示されてみると、「ああ・・・これか」といった感じで、
今まで気にもとめていなかったのですが、そういえばこんなのでるな・・・と、
とても勉強になりました。
これは使えそうなので、今後のアプリケーション開発等に使っていこうと思います。
ひろぴーさん、シャノンさん、また、このスレッドを呼んでくださった方
ありがとうございました。