모든 종류의 컨트롤을 넣을 수있는 사용자 정의 툴팁을 만들고 싶습니다. CDialog에서 파생되었고 WS_POPUP | WS_BORDER
스타일을 사용했습니다. 또한 도구 설명 그림자를 얻으려면 OnInitDialog에 CS_DROPSHADOW
스타일을 추가하십시오.WS_POPUP 대화 상자가있는 사용자 정의 툴팁
그 다음 툴팁을 표시하거나 숨기려면 WM_MOUSEHOVER
및 WM_MOUSELEAVE
이벤트를 관리합니다.
SetWindowPos
과 SWP_NOACTIVATE
을 사용하여 상위 항목이 비활성 상태가되고 새 대화 상자가 활성화되지 않도록 도구 설명을 표시합니다. 하지만 어쨌든, CDialog::Create
메서드를 사용하여 대화 상자를 만들면 기본 창이 비활성 상태가되어 매우 나쁜 영향을줍니다.
그래서 내 커스텀은 메인 윈도우 (또는 대화 상자의 부모 창)없이 WS_POPUP 스타일로 CDialog를 만들 수 있습니다. 새 대화 상자가 나타나면 비활성화됩니다. ???
도와 주셔서 감사합니다.
편집 :
if(!pTooltipDlg)
{
pTooltipDlg = new MyCustomTooltipDlg();
pTooltipDlg->Create(MyCustomTooltipDlg::IDD, this);
}
pTooltipDlg->ShowWindow(SW_SHOWNOACTIVATE);
:
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
툴팁을 표시하는 코드가 같은 것입니다 : 나는 ... 대화 상자를 만들려면이이 자원을 WS_VISIBLE 스타일을 사용하지 않는 처음에는 (즉, 생성이 호출 될 때) 메인 윈도우가 포커스를 잃습니다 ... 나머지는이 추악한 효과가 일어나지 않습니다 ... 그래서 나는 Create 때문입니다.
도움 주셔서 감사합니다. 지금 SetWindowPos 및 SWP_NOACTIVATE 대신 ShowWindow (SW_SHOWNOACTIVATE) 사용하고 있습니다. 나는이 선택을 깨닫지 못했고 훨씬 더 영리합니다. 여전히 작동하지 않습니다 ... 몇 가지 의견으로 질문을 편집했습니다. –