CComboUI::CComboUI() : m_uTextStyle(DT_VCENTER | DT_SINGLELINE) , m_dwTextColor(0) , m_dwDisabledTextColor(0) , m_iFont(-1) , m_bShowHtml(false) , m_pWindow(NULL) , m_iCurSel(-1) , m_uButtonState(0) { m_szDropBox = CDuiSize(0, 150); ::ZeroMemory(&m_rcTextPadding, sizeof(m_rcTextPadding)); m_ListInfo.nColumns = 0; m_ListInfo.nFont = -1; m_ListInfo.uTextStyle = DT_VCENTER; m_ListInfo.dwTextColor = 0xFF000000; m_ListInfo.dwBkColor = 0; m_ListInfo.bAlternateBk = false; m_ListInfo.dwSelectedTextColor = 0xFF000000; m_ListInfo.dwSelectedBkColor = 0xFFC1E3FF; m_ListInfo.dwHotTextColor = 0xFF000000; m_ListInfo.dwHotBkColor = 0xFFE9F5FF; m_ListInfo.dwDisabledTextColor = 0xFFCCCCCC; m_ListInfo.dwDisabledBkColor = 0xFFFFFFFF; m_ListInfo.dwLineColor = 0; m_ListInfo.bShowHtml = false; m_ListInfo.bMultiExpandable = false; ::ZeroMemory(&m_ListInfo.rcTextPadding, sizeof(m_ListInfo.rcTextPadding)); ::ZeroMemory(&m_ListInfo.rcColumn, sizeof(m_ListInfo.rcColumn)); }
SIZE CLabelUI::EstimateSize(SIZE szAvailable) { if (m_bAutoCalcWidth) { RECT rcText = {0}; CRenderEngine::DrawText(m_pManager->GetPaintDC(), m_pManager, rcText, m_sText, m_dwTextColor, m_iFont, DT_CALCRECT | m_uTextStyle); m_cxyFixed.cx = rcText.right - rcText.left + m_rcTextPadding.left + m_rcTextPadding.right; } if( m_cxyFixed.cy == 0 ) return CDuiSize(m_cxyFixed.cx, m_pManager->GetFontInfo(GetFont())->tm.tmHeight + 4); return CControlUI::EstimateSize(szAvailable); }
SIZE CMenuUI::EstimateSize(SIZE szAvailable) { int cxFixed = 0; int cyFixed = 0; for( int it = 0; it < GetCount(); it++ ) { CControlUI* pControl = static_cast<CControlUI*>(GetItemAt(it)); if( !pControl->IsVisible() ) continue; SIZE sz = pControl->EstimateSize(szAvailable); cyFixed += sz.cy; if( cxFixed < sz.cx ) cxFixed = sz.cx; } return CDuiSize(cxFixed, cyFixed); }
SIZE CLabelUI::EstimateSize(SIZE szAvailable) { if (m_bAutoCalcWidth) { CDuiString sText = GetText(); RECT rcText = {0, 0, szAvailable.cx, szAvailable.cy}; int nLinks = 0; if( m_bShowHtml ) CRenderEngine::DrawHtmlText(m_pManager->GetPaintDC(), m_pManager, rcText, sText, m_dwTextColor, NULL, NULL, nLinks, DT_CALCRECT | m_uTextStyle); else CRenderEngine::DrawText(m_pManager->GetPaintDC(), m_pManager, rcText, sText, m_dwTextColor, m_iFont, DT_CALCRECT | m_uTextStyle); m_cxyFixed.cx = MulDiv(rcText.right - rcText.left + GetManager()->GetDPIObj()->Scale(m_rcTextPadding.left) + GetManager()->GetDPIObj()->Scale(m_rcTextPadding.right), 100, GetManager()->GetDPIObj()->GetScale()); } if( m_cxyFixed.cy == 0 ) return CDuiSize(GetManager()->GetDPIObj()->Scale(m_cxyFixed.cx), m_pManager->GetFontInfo(GetFont())->tm.tmHeight + 4); return CControlUI::EstimateSize(szAvailable); }
SIZE COptionUI::EstimateSize(SIZE szAvailable) { SIZE size; GetTextExtentPoint32(m_pManager->GetPaintDC(), m_sText, ::lstrlen(m_sText), &size); if (m_bAutoCalcWidth) { RECT rcText = {0}; CRenderEngine::DrawText(m_pManager->GetPaintDC(), m_pManager, rcText, m_sText, m_dwTextColor, m_iFont, DT_CALCRECT | m_uTextStyle); int iWidth = size.cx + m_rcTextPadding.left + m_rcTextPadding.right; if (iWidth < m_cxyMax.cx) { m_cxyFixed.cx = iWidth; } } if( m_cxyFixed.cy == 0 ) return CDuiSize(m_cxyFixed.cx, m_pManager->GetFontInfo(GetFont())->tm.tmHeight + 8); return CControlUI::EstimateSize(szAvailable); }
SIZE COptionUI::EstimateSize(SIZE szAvailable) { if( m_cxyFixed.cy == 0 ) return CDuiSize(m_cxyFixed.cx, m_pManager->GetFontInfo(GetFont())->tm.tmHeight + 8); return CControlUI::EstimateSize(szAvailable); }
void CScrollBarUI::DoEvent(TEventUI& event) { if( !IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND ) { if( m_pOwner != NULL ) m_pOwner->DoEvent(event); else CControlUI::DoEvent(event); return; } if( event.Type == UIEVENT_SETFOCUS ) { return; } if( event.Type == UIEVENT_KILLFOCUS ) { return; } if( event.Type == UIEVENT_BUTTONDOWN || event.Type == UIEVENT_DBLCLICK ) { if( !IsEnabled() ) return; m_nLastScrollOffset = 0; m_nScrollRepeatDelay = 0; m_pManager->SetTimer(this, DEFAULT_TIMERID, 50U); if( ::PtInRect(&m_rcButton1, event.ptMouse) ) { m_uButton1State |= UISTATE_PUSHED; if( !m_bHorizontal ) { if( m_pOwner != NULL ) m_pOwner->LineUp(); else SetScrollPos(m_nScrollPos - m_nLineSize); } else { if( m_pOwner != NULL ) m_pOwner->LineLeft(); else SetScrollPos(m_nScrollPos - m_nLineSize); } } else if( ::PtInRect(&m_rcButton2, event.ptMouse) ) { m_uButton2State |= UISTATE_PUSHED; if( !m_bHorizontal ) { if( m_pOwner != NULL ) m_pOwner->LineDown(); else SetScrollPos(m_nScrollPos + m_nLineSize); } else { if( m_pOwner != NULL ) m_pOwner->LineRight(); else SetScrollPos(m_nScrollPos + m_nLineSize); } } else if( ::PtInRect(&m_rcThumb, event.ptMouse) ) { m_uThumbState |= UISTATE_CAPTURED | UISTATE_PUSHED; ptLastMouse = event.ptMouse; m_nLastScrollPos = m_nScrollPos; } else { if( !m_bHorizontal ) { if( event.ptMouse.y < m_rcThumb.top ) { if( m_pOwner != NULL ) m_pOwner->PageUp(); else SetScrollPos(m_nScrollPos + m_rcItem.top - m_rcItem.bottom); } else if ( event.ptMouse.y > m_rcThumb.bottom ){ if( m_pOwner != NULL ) m_pOwner->PageDown(); else SetScrollPos(m_nScrollPos - m_rcItem.top + m_rcItem.bottom); } } else { if( event.ptMouse.x < m_rcThumb.left ) { if( m_pOwner != NULL ) m_pOwner->PageLeft(); else SetScrollPos(m_nScrollPos + m_rcItem.left - m_rcItem.right); } else if ( event.ptMouse.x > m_rcThumb.right ){ if( m_pOwner != NULL ) m_pOwner->PageRight(); else SetScrollPos(m_nScrollPos - m_rcItem.left + m_rcItem.right); } } } if( m_pManager != NULL && m_pOwner == NULL ) m_pManager->SendNotify(this, DUI_MSGTYPE_SCROLL); return; } if( event.Type == UIEVENT_BUTTONUP ) { m_nScrollRepeatDelay = 0; m_nLastScrollOffset = 0; m_pManager->KillTimer(this, DEFAULT_TIMERID); if( (m_uThumbState & UISTATE_CAPTURED) != 0 ) { m_uThumbState &= ~( UISTATE_CAPTURED | UISTATE_PUSHED ); Invalidate(); } else if( (m_uButton1State & UISTATE_PUSHED) != 0 ) { m_uButton1State &= ~UISTATE_PUSHED; Invalidate(); } else if( (m_uButton2State & UISTATE_PUSHED) != 0 ) { m_uButton2State &= ~UISTATE_PUSHED; Invalidate(); } return; } if( event.Type == UIEVENT_MOUSEMOVE ) { if( (m_uThumbState & UISTATE_CAPTURED) != 0 ) { if( !m_bHorizontal ) { int vRange = m_rcItem.bottom - m_rcItem.top - m_rcThumb.bottom + m_rcThumb.top - 2 * m_cxyFixed.cx; if (vRange != 0) m_nLastScrollOffset = (event.ptMouse.y - ptLastMouse.y) * m_nRange / vRange; } else { int hRange = m_rcItem.right - m_rcItem.left - m_rcThumb.right + m_rcThumb.left - 2 * m_cxyFixed.cy; if (hRange != 0) m_nLastScrollOffset = (event.ptMouse.x - ptLastMouse.x) * m_nRange / hRange; } } else { if( (m_uThumbState & UISTATE_HOT) != 0 ) { if( !::PtInRect(&m_rcThumb, event.ptMouse) ) { m_uThumbState &= ~UISTATE_HOT; Invalidate(); } } else { if( !IsEnabled() ) return; if( ::PtInRect(&m_rcThumb, event.ptMouse) ) { m_uThumbState |= UISTATE_HOT; Invalidate(); } } } return; } if( event.Type == UIEVENT_CONTEXTMENU ) { return; } if( event.Type == UIEVENT_TIMER && event.wParam == DEFAULT_TIMERID ) { ++m_nScrollRepeatDelay; if( (m_uThumbState & UISTATE_CAPTURED) != 0 ) { if( !m_bHorizontal ) { if( m_pOwner != NULL ) m_pOwner->SetScrollPos(CDuiSize(m_pOwner->GetScrollPos().cx, \ m_nLastScrollPos + m_nLastScrollOffset)); else SetScrollPos(m_nLastScrollPos + m_nLastScrollOffset); } else { if( m_pOwner != NULL ) m_pOwner->SetScrollPos(CDuiSize(m_nLastScrollPos + m_nLastScrollOffset, \ m_pOwner->GetScrollPos().cy)); else SetScrollPos(m_nLastScrollPos + m_nLastScrollOffset); } Invalidate(); } else if( (m_uButton1State & UISTATE_PUSHED) != 0 ) { if( m_nScrollRepeatDelay <= 5 ) return; if( !m_bHorizontal ) { if( m_pOwner != NULL ) m_pOwner->LineUp(); else SetScrollPos(m_nScrollPos - m_nLineSize); } else { if( m_pOwner != NULL ) m_pOwner->LineLeft(); else SetScrollPos(m_nScrollPos - m_nLineSize); } } else if( (m_uButton2State & UISTATE_PUSHED) != 0 ) { if( m_nScrollRepeatDelay <= 5 ) return; if( !m_bHorizontal ) { if( m_pOwner != NULL ) m_pOwner->LineDown(); else SetScrollPos(m_nScrollPos + m_nLineSize); } else { if( m_pOwner != NULL ) m_pOwner->LineRight(); else SetScrollPos(m_nScrollPos + m_nLineSize); } } else { if( m_nScrollRepeatDelay <= 5 ) return; POINT pt = { 0 }; ::GetCursorPos(&pt); ::ScreenToClient(m_pManager->GetPaintWindow(), &pt); if( !m_bHorizontal ) { if( pt.y < m_rcThumb.top ) { if( m_pOwner != NULL ) m_pOwner->PageUp(); else SetScrollPos(m_nScrollPos + m_rcItem.top - m_rcItem.bottom); } else if ( pt.y > m_rcThumb.bottom ){ if( m_pOwner != NULL ) m_pOwner->PageDown(); else SetScrollPos(m_nScrollPos - m_rcItem.top + m_rcItem.bottom); } } else { if( pt.x < m_rcThumb.left ) { if( m_pOwner != NULL ) m_pOwner->PageLeft(); else SetScrollPos(m_nScrollPos + m_rcItem.left - m_rcItem.right); } else if ( pt.x > m_rcThumb.right ){ if( m_pOwner != NULL ) m_pOwner->PageRight(); else SetScrollPos(m_nScrollPos - m_rcItem.left + m_rcItem.right); } } } if( m_pManager != NULL && m_pOwner == NULL ) m_pManager->SendNotify(this, DUI_MSGTYPE_SCROLL); return; } if( event.Type == UIEVENT_MOUSEENTER ) { if( IsEnabled() ) { m_uButton1State |= UISTATE_HOT; m_uButton2State |= UISTATE_HOT; if( ::PtInRect(&m_rcThumb, event.ptMouse) ) m_uThumbState |= UISTATE_HOT; Invalidate(); } return; } if( event.Type == UIEVENT_MOUSELEAVE ) { if( IsEnabled() ) { m_uButton1State &= ~UISTATE_HOT; m_uButton2State &= ~UISTATE_HOT; m_uThumbState &= ~UISTATE_HOT; Invalidate(); } return; } if( m_pOwner != NULL ) m_pOwner->DoEvent(event); else CControlUI::DoEvent(event); }
SIZE CComboUI::EstimateSize(SIZE szAvailable) { if( m_cxyFixed.cy == 0 ) return CDuiSize(m_cxyFixed.cx, m_pManager->GetDefaultFontInfo()->tm.tmHeight + 12); return CControlUI::EstimateSize(szAvailable); }
void CComboWnd::Scroll(int dx, int dy) { if( dx == 0 && dy == 0 ) return; SIZE sz = m_pLayout->GetScrollPos(); m_pLayout->SetScrollPos(CDuiSize(sz.cx + dx, sz.cy + dy)); }