モードレスダイアログを複数画面に表示しています。
メインウィンドウではツールチップを表示したいのですが
ツールチップを表示すると、モードレスダイアログの下に表示されてしまいます。
ウィンドウは常に最前面に表示しているため、WM_NOTIFYで
ツールチップ表示時などに、最前面を解除したりするのを試みておりますが
どうも旨く解決しません。
ご教授の程よろしくお願いします。
メインウィンドウのツールチップを流用しているんですか。
ダイアログを親(正確にはオーナー)にして、新しいtooltipを作れば
解決すると思います。
tooltipなどPopupWindowはオーナーより手前に出るためです。
または、tooltipはWS_EX_TOPMOSTを持っており、
ダイアログのWS_EX_TOPMOSTをぶつかっているために
このような症状がでるので
tooltip表示時にSetWindowPos(HWND_TOPMOST,,)を呼べば
なんとかなるかもしれません。
レス有難うございます。
メインウィンドウでだけツールチップは表示したいが為
ダイアログはオーナーには今のところ出来ません。
ツールチップ表示時にTOPMOSTを操作していますが
たまにダイアログの上に表示される事もありますが、100%成功はしていません。
メインウィンドウ用のtooltip、
ダイアログ用のtooltip、
その他必要に応じてtooltip、
どんどん作ったほうが簡単です。
Spy++を見ると、
いっぱいあることが分かると思います。
がんばるのなら
SetWindowPosよりも
WM_ACTIVATEでSetParent()のほうが簡単かもしれません。
ちょいと状況を確認
「『メインウィンドウに対するツールチップ』が質問の対象。
たとえば、表示する文字が長いため、一部がサブダイアログに重なってしまうことがある
その重なった部分がサブに隠れる。これをなんとかしたい」
「ツールチップの目的がメイン・サブのどちらであろうと、
『技術的にツールチップの直接のオーナーはメイン』でやりたい
ただ、こうすると、サブ上のツールチップは当然サブに隠れてしまう。
これをなんとかして、『メインから出したツールチップだけど、サブの上にもってこさせたい』」
どっち?
私は前者だと思ったのですが・・・
ryoさん、ありがとうございます。
完全に誤解していました。
連投すまんです。
これでなんとかなりませんか。
//メインウィンドウの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;
レス有難うございます。
遅くなり大変申し訳ございません。
こちらの文章が下手で、質問内容に齟齬がおき申し訳ありません。
ロマさんの記述して頂けた方法で無事解決しました。
本当に有難うございました。
ツイート | ![]() |