显示会议信息框
通知描述
收到该通知时,表示用户将鼠标移至会中界面左上角的会议ID处。
方法定义
1
|
virtual void OnShowExternalConfInfoWnd(int left,int top) {}; |
注意事项
1 收到该通知的前提需要打开 7.5.3.1 表2 frame对象介绍 中的isUseExternalConfInfoWnd开关为true。
2 通知方法OnShowExternalConfInfoWnd中添加线程切换,抛到用户自己线程中,再显示用户自定义的
会议信息框(会议信息框显示需做置顶操作)。
3 显示用户自定义的会议信息框接口中,需要添加定时器检测(2s):
鼠标若未移入自定义会议信息框区域,定时器时间到则销毁会议信息框。
鼠标若移入自定义会议信息框区域,则待鼠标移出信息框区域直接销毁会议信息框。
(若未添加3处理,无法覆盖所有的场景销毁会议信息框)
参数描述
参数 |
类型 |
描述 |
---|---|---|
left |
int |
会议信息框左上角坐标的x。 |
top |
int |
会议信息框左上角坐标的y。 |
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
/** * 显示外部会议信息框 */ LRESULT demoMainMenuDlg::OnShowExternalConfInfoWnd(WPARAM wParam, LPARAM lParam) { CPoint* pt = (CPoint*)wParam; demoConfInfoDlg* dlg = demoData::GetInstance().GetConfInfoDlgObj(); // 若窗口对象不存在,则创建窗口对象 if (dlg == NULL) { dlg = new demoConfInfoDlg; dlg->Create(IDD_CONF_INFO_DIALOG, NULL); demoData::GetInstance().SetConfInfoDlgObj(dlg); } // 若窗口存在,则发起定时器检测窗口销毁 if (IsWindow(dlg->GetSafeHwnd())) { SetTimer(1, 2000, NULL); } // 显示窗口且置顶 CRect rectDlg(0, 0, 0, 0); dlg->GetClientRect(rectDlg); CRect rt(pt->x, pt->y, pt->x + rectDlg.Width(), pt->y + rectDlg.Height()); dlg->MoveWindow(rt); dlg->SetWindowPos(&CWnd::wndTopMost, pt->x, pt->y, rectDlg.Width(), rectDlg.Height(), SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); dlg->ShowWindow(SW_SHOW); delete pt; pt = NULL; return 0; } /** * 定时器检测销毁会议信息框 */ void demoMainMenuDlg::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == 1) { demoConfInfoDlg* dlg = demoData::GetInstance().GetConfInfoDlgObj(); if (dlg == NULL) { return; } if (IsWindow(dlg->m_hWnd)) { CPoint ptMouse(0, 0); GetCursorPos(&ptMouse); CRect rtConfInfo(0,0,0,0); dlg->GetWindowRect(&rtConfInfo); // 鼠标不在会议信息框范围内则销毁 if (!rtConfInfo.PtInRect(ptMouse)) { dlg->CloseWindow(); demoData::GetInstance().SetConfInfoDlgObj(NULL); delete dlg; dlg = NULL; KillTimer(nIDEvent); } } } CDialogEx::OnTimer(nIDEvent); } /** * 会议信息框添加鼠标移出销毁自身窗口 */ void demoConfInfoDlg::OnMouseMove(UINT nFlags, CPoint point) { if (!m_bTracking) { TRACKMOUSEEVENT t_MouseEvent; t_MouseEvent.cbSize = sizeof(TRACKMOUSEEVENT); t_MouseEvent.dwFlags = TME_HOVER | TME_LEAVE; t_MouseEvent.hwndTrack = m_hWnd; t_MouseEvent.dwHoverTime = 30; // 触发OnMouseLeave or OnMouseHover事件,m_bTracking 防止频繁触发事件 if (::_TrackMouseEvent(&t_MouseEvent)) { m_bTracking = true; } } CDialogEx::OnMouseMove(nFlags, point); } void demoConfInfoDlg::OnMouseLeave() { m_bTracking = false; CDialogEx::OnMouseLeave(); demoData::GetInstance().SetConfInfoDlgObj(NULL); OnCancel(); } |