下層のコントロールに自作ツールチップを適用するには?

解決


twelve  2009-09-13 08:41:48  No: 142526  IP: 192.*.*.*

VB6で予定を表示できるカレンダー(Rainlendarのようなもの)を作成しています。
カレンダーの日付の上にマウスポインタを移動させるとその日の予定がポップアップするようにしたいのですが、うまくいきません。よい方法があれば教えてください。

○やろうとしている事
  Label1 :日付ラベル  BackStyle=不透明
  Label2 :当日丸印 BackStyle=透明
  Label3 :予定数  BackStyle=透明
これらを下から順Label1、Label2、Label3(Label3は右下にずらす)と重ねて表示し、Label1でToolTipをポップアップさせる。ただし、ToolTipは複数行、吹き出し型としたいのでLabel標準のToolTipTextを使用せず、CreateWindowExで自作する。

○問題点
CreateWindowExではhWndが必要となるため、Labelコントロールが使用できない。

○やってみたこと
1.Label1をhWndを持つコントロールにする。
    →hWndを持つコントロールの上層にLabelを配置できないため不適
    →また、hWndを持つ標準コントロールはBackStyleを透明にできないため不適

2.PictureBox内にLabel1〜3を配置し、PictureBoxでToolTipをポップアップさせる。
    →PictureBox上のLabel1〜3の文字が無い場所でしかポップアップせず範囲が狭すぎるため不適

3.Label1をテキストボックス、Label2〜3をユーザーコントロール(hWndあり、BackStyle=透明)とする。
    →ほぼうまくいくが、ユーザーコントロールにした文字の境界に白いギザギザが現れる。

4.CreateWindowExを使用せずFormをリージョンで切り取って吹き出し型とし、タイマーコントロールで表示させる。
    →外枠の作成、文字の配置等、手間がかかりすぎるため不適

編集 削除
GOD  2009-09-14 16:36:07  No: 142527  IP: 192.*.*.*

> ○問題点
> CreateWindowExではhWndが必要となるため、Labelコントロールが使用できない。
>
これは第9引数のことでいいのかな?
MSDNでは、「ポップアップウィンドウを表示する場合は省略できると書かれている」ので0にしてみてはどうでしょうか。
どうしても何か入れておきたいのならフォームのハンドルとかで親子関係築くとか。

http://msdn.microsoft.com/ja-jp/library/cc410714.aspx

編集 削除
twelve  2009-09-14 23:54:30  No: 142528  IP: 192.*.*.*

レスありがとうございます。

問題のhWndですが、CreateWindowExに直接必要になるのではなく、
ツールチップをコントロールに登録するTTM_ADDTOOLメッセージの
TOOLINFO構造体に必要になります。
間違った表記をしてしまい申し訳ないです。

編集 削除
GOD  2009-09-15 12:01:18  No: 142529  IP: 192.*.*.*

3)の案を継承して
3−1)Label1〜3を従来通りとして、コントロール未配置のユーザーコントロール(BackStyle=透明)を他のラベル同様、Label1に重ねる。
3−2)ユーザーコントロール(hWndあり、BackStyle=不透明)にLabel1〜3を配置する。
のどちらかでどうでしょうか。

編集 削除
twelve  2009-09-16 06:31:26  No: 142530  IP: 192.*.*.*

3-1)、3-2)とも試してみたところ、3-2)がうまくいきました。
3-1)ではユーザーコントロールを透明にしたため、マウスポインタを
認識せず、ポップアップしませんでした。
3-2)では問題なく動作しました。Label1〜3の文字列の変更もCaption
プロパティを3つ用意することで対応できました。

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

編集 削除