モードレスダイアログを表示してる中、ツールチップを前面に表示するには

解決


Prise  2010-06-18 11:59:49  No: 71735  IP: 192.*.*.*

モードレスダイアログを複数画面に表示しています。
メインウィンドウではツールチップを表示したいのですが
ツールチップを表示すると、モードレスダイアログの下に表示されてしまいます。

ウィンドウは常に最前面に表示しているため、WM_NOTIFYで
ツールチップ表示時などに、最前面を解除したりするのを試みておりますが
どうも旨く解決しません。

ご教授の程よろしくお願いします。

編集 削除
ロマ  2010-06-19 21:56:50  No: 71736  IP: 192.*.*.*

メインウィンドウのツールチップを流用しているんですか。
ダイアログを親(正確にはオーナー)にして、新しいtooltipを作れば
解決すると思います。
tooltipなどPopupWindowはオーナーより手前に出るためです。

または、tooltipはWS_EX_TOPMOSTを持っており、
ダイアログのWS_EX_TOPMOSTをぶつかっているために
このような症状がでるので
tooltip表示時にSetWindowPos(HWND_TOPMOST,,)を呼べば
なんとかなるかもしれません。

編集 削除
Prise  2010-06-20 13:49:47  No: 71737  IP: 192.*.*.*

レス有難うございます。

メインウィンドウでだけツールチップは表示したいが為
ダイアログはオーナーには今のところ出来ません。

ツールチップ表示時にTOPMOSTを操作していますが
たまにダイアログの上に表示される事もありますが、100%成功はしていません。

編集 削除
ロマ  2010-06-20 18:48:43  No: 71738  IP: 192.*.*.*

メインウィンドウ用のtooltip、
ダイアログ用のtooltip、
その他必要に応じてtooltip、
どんどん作ったほうが簡単です。

Spy++を見ると、
いっぱいあることが分かると思います。

編集 削除
ロマ  2010-06-21 22:19:17  No: 71739  IP: 192.*.*.*

がんばるのなら
SetWindowPosよりも
WM_ACTIVATEでSetParent()のほうが簡単かもしれません。

編集 削除
ryo  2010-06-22 10:10:10  No: 71740  IP: 192.*.*.*

ちょいと状況を確認

「『メインウィンドウに対するツールチップ』が質問の対象。
たとえば、表示する文字が長いため、一部がサブダイアログに重なってしまうことがある
その重なった部分がサブに隠れる。これをなんとかしたい」

「ツールチップの目的がメイン・サブのどちらであろうと、
『技術的にツールチップの直接のオーナーはメイン』でやりたい
ただ、こうすると、サブ上のツールチップは当然サブに隠れてしまう。
これをなんとかして、『メインから出したツールチップだけど、サブの上にもってこさせたい』」

どっち?
私は前者だと思ったのですが・・・

編集 削除
ロマ  2010-06-22 11:25:50  No: 71741  IP: 192.*.*.*

ryoさん、ありがとうございます。
完全に誤解していました。

編集 削除
ロマ  2010-06-22 12:09:25  No: 71742  IP: 192.*.*.*

連投すまんです。
これでなんとかなりませんか。
//メインウィンドウのWindowProcで
case WM_NOTIFY:
  if(((NMHDR*)lParam)->code == TTN_SHOW)
    SetWindowPos(hwndTooltip, HWND_TOPMOST, 0, 0, 0, 0,
                  SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE);
  break;

編集 削除
Prise  2010-06-22 22:42:21  No: 71743  IP: 192.*.*.*

レス有難うございます。

遅くなり大変申し訳ございません。
こちらの文章が下手で、質問内容に齟齬がおき申し訳ありません。
ロマさんの記述して頂けた方法で無事解決しました。

本当に有難うございました。

編集 削除