void CFWL_ToolTipImp::RefreshToolTipPos() { if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_TTP_NoAnchor) == 0) { CFX_RectF rtPopup; CFX_RectF rtWidget(m_pProperties->m_rtWidget); CFX_RectF rtAnchor(m_rtAnchor); rtPopup.Set(0, 0, 0, 0); FX_FLOAT fx = rtAnchor.Center().x + 20; FX_FLOAT fy = rtAnchor.Center().y + 20; rtPopup.Set(fx, fy, rtWidget.Width(), rtWidget.Height()); FX_FLOAT fScreenWidth = 0; FX_FLOAT fScreenHeight = 0; GetScreenSize(fScreenWidth, fScreenHeight); if (rtPopup.bottom() > fScreenHeight) { rtPopup.Offset(0, fScreenHeight - rtPopup.bottom()); } if (rtPopup.right() > fScreenWidth) { rtPopup.Offset(fScreenWidth - rtPopup.right(), 0); } if (rtPopup.left < 0) { rtPopup.Offset(0 - rtPopup.left, 0); } if (rtPopup.top < 0) { rtPopup.Offset(0, 0 - rtPopup.top); } SetWidgetRect(rtPopup); Update(); } }
void CFWL_DateTimePickerImp::DisForm_ShowMonthCalendar(FX_BOOL bActivate) { FX_BOOL bShowed = IsMonthCalendarShowed(); if (bShowed == bActivate) { return; } if (bActivate) { CFX_RectF rtMonthCal; m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); FX_FLOAT fPopupMin = rtMonthCal.height; FX_FLOAT fPopupMax = rtMonthCal.height; CFX_RectF rtAnchor(m_pProperties->m_rtWidget); rtAnchor.width = rtMonthCal.width; rtMonthCal.left = m_rtClient.left; rtMonthCal.top = rtAnchor.Height(); GetPopupPos(fPopupMin, fPopupMax, rtAnchor, rtMonthCal); m_pMonthCal->SetWidgetRect(rtMonthCal); if (m_iYear > 0 && m_iMonth > 0 && m_iDay > 0) { m_pMonthCal->SetSelect(m_iYear, m_iMonth, m_iDay); } m_pMonthCal->Update(); } m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); if (bActivate) { CFWL_MsgSetFocus msg; msg.m_pDstTarget = m_pMonthCal.get(); msg.m_pSrcTarget = m_pEdit.get(); IFWL_WidgetDelegate* pDelegate = m_pEdit->SetDelegate(NULL); pDelegate->OnProcessMessage(&msg); } CFX_RectF rtInvalidate, rtCal; rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, m_pProperties->m_rtWidget.height); m_pMonthCal->GetWidgetRect(rtCal); rtInvalidate.Union(rtCal); rtInvalidate.Inflate(2, 2); Repaint(&rtInvalidate); }