Я хочу создать собственные всплывающие подсказки, где я могу поместить любые элементы управления. Я получил из CDialog и использовал стили WS_POPUP | WS_BORDER
. Я также добавляю стиль CS_DROPSHADOW
в OnInitDialog, чтобы получить тень всплывающей подсказки.Пользовательская подсказка с диалогом WS_POPUP
Затем я сам управляю WM_MOUSEHOVER
и WM_MOUSELEAVE
событиями, чтобы показать/скрыть всплывающие подсказки.
Я показываю всплывающую подсказку, используя SetWindowPos
и SWP_NOACTIVATE
, чтобы предотвратить включение родительского элемента и включение нового диалога. Но в любом случае, когда я создаю диалог, используя метод CDialog::Create
... главное окно становится неактивным ... что делает очень плохой эффект.
Итак, мое сглаживание - это как создать CDialog с типом WS_POPUP без моего главного окна (или родительского окна диалога), становящегося неактивным, когда появится новое диалоговое окно ???
Спасибо за помощь!
Отредактировано: Я не использую стиль 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);
В первый раз (т. Е. При вызове create) главные окна теряют фокус ... остальные из них этот уродливый эффект не происходит ... поэтому я уверен, что это из-за Create.
Благодарим за помощь! Теперь я использую ShowWindow (SW_SHOWNOACTIVATE) вместо SetWindowPos и SWP_NOACTIVATE. Я не понял этого варианта, и он намного более умный. Плохо это все еще не работает ... Я отредактировал вопрос с некоторыми комментариями. –