質問

私は、コントロールの任意の種類を置くことができるカスタムツールチップを作成します。私はCDialogの由来とWS_POPUP | WS_BORDERスタイルを使用しています。私はまた、ツールチップの影を取得するのOnInitDialogでCS_DROPSHADOWスタイルを追加します。

それから私はWM_MOUSEHOVERWM_MOUSELEAVEイベントがツールチップを表示/非表示するために自分自身を管理します。

私は非アクティブとアクティブになってから、新しいダイアログになってから親を防ぐためにSetWindowPosSWP_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の親ウィンドウを持っている必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top