2017-08-14 30 views
0

各バルーンにユーザーデータ(IDまたはボイド*)を付けることができるようにしたいので、NIN_BALLOONUSERCLICKを受け取ったら、クリックされたバルーンを特定し、その特定の通知に意味のある操作を実行できます。私が知る限り、これはNOTIFYICONDATA構造では不可能です。NIF_INFOを使用してShell_NotifyIconのユーザーデータを指定する方法はありますか?

+0

APIの規定はありません。 –

答えて

0

は、私の知る限り、これは正しいですNOTIFYICONDATA構造

与えられたことはできません。 Shell_NotifyIcon() APIには、ユーザー定義データと通知を関連付けるための規定はありません。

ただし、一度に1つのバルーンしか表示できないため、データを側面に保存して、バルーンを解除したときにデータを取得することができます。複数の通知がある場合は、何らかの種類のスタックを使用してデータを格納してから、バルーンのデータをスタックから取得します。

NIF_MESSAGEフラグを使用するときに、個々のバルーンに異なるuCallbackMessage値を使用し、必要に応じてウィンドウメッセージハンドラにメッセージIDを区別させることもできます。たとえば、データの配列がある場合は、一意の基本メッセージID(おそらくRegisterWindowMessage()から配列インデックスを追加することができます)

+0

あなたの最初の提案は、OSが通知を表示する要求が多すぎる場合に通知を表示しないようにすることを除いて、機能するかもしれません。解決策が機能しない場合は、通知アイコン全体またはバルーンごとに格納されているグローバルなメッセージIDではないかどうかを確認する必要があります(RegisterWindowMessageなどを使用してメッセージIDを使い果たしてしまいます)それらをリサイクルすることができました。これにより、誤って新しい通知に応答する可能性があります古い出来事。 – cppguy

+0

ドキュメントからは、複数のバルーンがキューに入れられ、順番に表示され、それぞれにNIN_BALLOONSHOWとNIN_BALLOON(HIDE | TIMEOUT | USERCLICK)が表示されます。 「かなりの時間」がアクティブな場合を除いて、 'NIIF_RESPECT_QUIET_TIME'フラグを指定しない限り何も得られません。その後、「静かな時間」にバルーンを表示しようとすると' NIN_BALLOONHIDE'が得られます。 –

+0

'Shell_NotifyIcon()'は通知ごとに異なる 'uCallbackMessage' IDを指定します。私は各通知に対してあなたが 'RegisterWindowMessage()'を呼び出すことを提案していませんでした。私はそれを**一度**と呼んで基本IDを取得し、各通知でそれにオフセットを追加することを提案しました。 –

関連する問題