WS_POPUPダイアログでカスタムツールチップ
質問
私は、コントロールの任意の種類を置くことができるカスタムツールチップを作成します。私はCDialogの由来とWS_POPUP | WS_BORDER
スタイルを使用しています。私はまた、ツールチップの影を取得するのOnInitDialogでCS_DROPSHADOW
スタイルを追加します。
それから私はWM_MOUSEHOVER
とWM_MOUSELEAVE
イベントがツールチップを表示/非表示するために自分自身を管理します。
私は非アクティブとアクティブになってから、新しいダイアログになってから親を防ぐためにSetWindowPos
とSWP_NOACTIVATE
を使用してツールチップを表示します。私はCDialog::Create
メソッドを使用してダイアログを作成するときしかし、いずれにせよ、...メインウィンドウが非常に悪い影響を作るもの...非アクティブになります。
だから私のcustionは、私は私のメインウィンドウ(またはダイアログの親ウィンドウ)なしWS_POPUPスタイルでのCDialogを作成する方法である新しいダイアログが
???現れたときに、非アクティブbecomening助けてくれてありがとう!
編集:私は、ダイアログを作成するために、WS_VISIBLEスタイルを使用していない...この、このリソースます:
IDD_LABEL_TOOLTIP_DLG DIALOGEX 0, 0, 100, 9
STYLE DS_SETFONT | WS_POPUP | WS_BORDER
FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
LTEXT "##################",IDC_TOOLTIP_LBL_TEXT,0,0,99,9
END
ツールチップを表示するコードは、そのようなものです。
if(!pTooltipDlg)
{
pTooltipDlg = new MyCustomTooltipDlg();
pTooltipDlg->Create( MyCustomTooltipDlg::IDD, this);
}
pTooltipDlg->ShowWindow(SW_SHOWNOACTIVATE);
最初の時間を(つまり、作成時にコールされている)のメインウィンドウが...それらの残りの部分、この醜い効果は起きていないフォーカスを失う...ので、私は理由作成であると確信しています。
解決 4
[OK]をクリックします。私は最終的にそれを得ました!私はちょうどアクティブ化されることから、ダイアログを回避するためのOnInitDialog方法でFALSEを返す必要がありました。
あなたのすべてに感謝!
他のヒント
、それにWS_VISIBLEフラグを設定しないでください。そして、あなたはダイアログが表示されるようにSW_SHOWNAまたはSW_SHOWNOACTIVATEでのShowWindowを使用することができます。
あなたはCDialog::Create()
セットでWS_VISIBLE
を呼び出していますか?それも、ただCreate()
を呼び出すと、親からフォーカスを取るのに十分であることかもしれません。また、あなたのツールチップのクラスにWM_SETFOCUS
をオーバーライドし、のないのそれは不可能フォーカスがウィンドウを変更できるようにすること、基本クラスを呼び出す価値があるかもしれません。
まず最初に、CWndのではなく、CDialogの使用を検討してください。これはあなたに多くの細かい制御を提供します。そして、あなたは本当にダイアログテンプレートよりも、とにかく他のCDialogのすべての機能を使用していません。動的にコントロールを作成するにはあまりにも難しいことではありません。
またOnShowWindowハンドリング、メッセージハンドラでは、検討し、任意のshowコマンドは、マーク身代金のコメントのようにSW_SHOWNAに変更されていることを確認したい場合があります。
また、ツールチップとして、それはおそらくNULLの親ウィンドウを持っている必要があります。