Esempio n. 1
0
void STabCtrl::OnPaint(IRenderTarget *pRT)
{
    SPainter painter;
    BeforePaint(pRT,painter);
    
    CRect rcItem,rcItemPrev;
    CRect rcSplit;
    DWORD dwState;
    CRect rcTitle=GetTitleRect();
    

    pRT->PushClipRect(&rcTitle,RGN_AND);

    for(size_t i=0; i<GetItemCount(); i++)
    {
        dwState=WndState_Normal;
        if(i == m_nCurrentPage) dwState=WndState_PushDown;
        else if(i== m_nHoverTabItem) dwState=WndState_Hover;

        GetItemRect(i,rcItem);
        //画分隔线
        if(i>0 && m_pSkinTabInter)
        {
            rcSplit=rcItem;
            if(m_nTabAlign==AlignLeft)
            {
                rcSplit.top=rcItemPrev.bottom;
                rcSplit.bottom = rcSplit.top + m_nTabInterSize;
            }
            else
            {
                rcSplit.left=rcItemPrev.right;
                rcSplit.right=rcSplit.left + m_nTabInterSize;
            }
            m_pSkinTabInter->Draw(pRT,rcSplit,0);
        }

        DrawItem(pRT,rcItem,i,dwState);
        rcItemPrev=rcItem;
    }
    pRT->PopClip();
    
    if (m_pSkinFrame)
    {
        CRect rcPage = GetChildrenLayoutRect();
        m_pSkinFrame->Draw(pRT, rcPage, WndState_Normal);
    }

    if(IsFocused() && IsFocusable() && m_bDrawFocusRect)
    {
        CRect rc;
        GetItemRect(m_nCurrentPage,rc);
        rc.DeflateRect(2,2);
        DrawDefFocusRect(pRT,&rc);
    }
    AfterPaint(pRT,painter);
}
Esempio n. 2
0
BOOL STabCtrl::SetItemTitle( int nIndex, LPCTSTR lpszTitle )
{
    STabPage* pTab = GetItem(nIndex);
    if (pTab)
    {
        pTab->SetTitle(lpszTitle);

        CRect rcTitle = GetTitleRect();
        InvalidateRect(rcTitle);
        return TRUE;
    }

    return FALSE;
}
Esempio n. 3
0
//绘制标题栏
void CDBFrame::DrawCaption(CDC *pDC)
{
	CRect rcWindow;
	GetWindowRect(&rcWindow);

	//画标题栏位图
	CRect rcCaption(0,//m_rcSysBorder.left,
					m_rcSysBorder.top,
					rcWindow.Width(),// - m_rcSysBorder.right,
					m_rcSysBorder.top + m_imageCaption.Height());

	if (m_bNcActivate)
		m_imageCaption.Render(pDC, rcCaption.TopLeft(), rcCaption.Size());
	else
		m_imageCaptionNA.Render(pDC, rcCaption.TopLeft(), rcCaption.Size());

	
	CRect rcTitle;
	GetTitleRect(rcTitle);
	DrawTitle(pDC, rcTitle);
}
Esempio n. 4
0
BOOL STabCtrl::RemoveItem( int nIndex , int nSelPage/*=0*/)
{
    STabPage * pTab = GetItem(nIndex);

    DestroyChild(pTab);
    m_lstPages.RemoveAt(nIndex);

    if (m_nCurrentPage == nIndex)
    {
        if(nSelPage<0) nSelPage=0;
        if(nSelPage>=(int)GetItemCount()) nSelPage=GetItemCount()-1;
        m_nCurrentPage=-1;
        SetCurSel(nSelPage);
    }else
    {
        if(m_nCurrentPage>nIndex) m_nCurrentPage--;
        CRect rcTitle = GetTitleRect();
        InvalidateRect(rcTitle);
    }
    return TRUE;
}
Esempio n. 5
0
BOOL STabCtrl::GetItemRect( int nIndex, CRect &rcItem )
{
    if (nIndex < 0 || nIndex >= (int)GetItemCount())
        return FALSE;
    
    CRect rcTitle = GetTitleRect();
        
    rcItem = CRect(rcTitle.TopLeft(),m_szTab);

    switch (m_nTabAlign)
    {
    case AlignTop:
    case AlignBottom:
        rcItem.OffsetRect(m_nTabPos + nIndex * (rcItem.Width()+ m_nTabInterSize),0);
        break;
    case AlignLeft:
    case AlignRight:
        rcItem.OffsetRect(0, m_nTabPos + nIndex * (rcItem.Height()+ m_nTabInterSize));
        break;
    }
    rcItem.IntersectRect(rcItem,rcTitle);
    return TRUE;
}
Esempio n. 6
0
int STabCtrl::InsertItem( pugi::xml_node xmlNode,int iInsert/*=-1*/,BOOL bLoading/*=FALSE*/ )
{
    if (wcscmp(xmlNode.name(),STabPage::GetClassName()) != 0) return -1;
    STabPage *pChild = (STabPage *)SApplication::getSingleton().CreateWindowByName(STabPage::GetClassName());
    
    InsertChild(pChild);
    pChild->InitFromXml(xmlNode);
    pChild->GetLayout()->SetFitParent(PD_ALL);
    
    if(iInsert==-1) iInsert=m_lstPages.GetCount();
    m_lstPages.InsertAt(iInsert,pChild);

    if(!bLoading )
    {
        CRect rcPage=GetChildrenLayoutRect();
        pChild->Move(&rcPage);
        pChild->SetVisible(FALSE,FALSE);
        if(m_nCurrentPage>=iInsert)  m_nCurrentPage++;
        InvalidateRect(GetTitleRect());
        if(m_nCurrentPage == -1) SetCurSel(iInsert);
    }
    
    return iInsert;
}
Esempio n. 7
0
unsigned int GMsgBox::initialize (GMessage& msg)
{
	LCD_MODULE* lcd = ((LCD_MODULE **)msg.lparam)[0];
	id = ID_MB_DLG;
	rect = lcd->rect;
	flags = GO_FLG_BORDER|GO_FLG_ENABLED|GO_FLG_SHOW|GO_FLG_SELECTED;

	RECT_T button_rect;
	RECT_T title_rect;
	RECT_T message_rect;

	int bnum =0;
	for(int mask = 1; type && mask < MBF_LAST_BTN; mask <<=1)
		if(type & mask)
			bnum++;

	if(body.empty() && !init_size.as_int )
	{
		for(int i=0; i < lcd->chars_per_row/2; i++)
			body += '.';
		type |= MBF_CLR;
	}

	POINT_T bs = get_border_size();
	text_metrics_t msg_size;
    int x_offset, y_offset;
	while(1)
	{
		allocate_border();
		if(bnum)
			button_rect = GetButtonRect();
		title_rect = GetTitleRect();
		message_rect =client_rect;

		message_rect.y0 += title_rect.height()+1; 								// title to message spacing 1 dot
		message_rect.y1 -= (button_rect.height())?(button_rect.height()):1;		// message to buttons spacing 1 dot

		int width=0;
		int dec = message_rect.width();
		if(type & MBF_EDIT)
			dec -= 2*bs.x;

		if(init_size.as_int)
			msg_size.as_int = init_size.as_int;
		else
			msg_size = get_text_metrics(body.c_str(), dec, font);

		if(msg_size.height + font->vspacing < message_rect.height())
		{
			rect.y1 -= message_rect.height() - (msg_size.height + font->vspacing);
			continue;
		}
		else
		{
			if(message_rect.height() < msg_size.height)
			{
				flags |= GO_FLG_VSCROLL;
				x_offset = message_rect.height();
				if(client_rect.height() > msg_size.height)
					message_rect.y1 = message_rect.y0 + msg_size.height;
				else
					message_rect.y1 = message_rect.y0 + client_rect.height();// +client_rect.y1;
				x_offset = message_rect.height() - x_offset;
				if(button_rect)
				{
					button_rect.Offset(0, x_offset);
				}
			}
		}
		if(dec > msg_size.width + 3*font->hdistance)
		{
			message_rect.x1 -= dec - msg_size.width - 3*font->hdistance;
			text_metrics_t new_msg_size;
			new_msg_size = get_text_metrics(body.c_str(), message_rect.width(), font);
			while(new_msg_size.height != msg_size.height )
			{
				message_rect.x1 += 3*font->hdistance;
				new_msg_size = get_text_metrics(body.c_str(), message_rect.width(), font);
			}
		}
		width = message_rect.width();
		if( title_rect.width() > width)
			width = title_rect.width();
		if(button_rect.width() + bnum * bs.x > width)
			width = button_rect.width() + bnum * bs.x ;
		if(client_rect.width() > width)
		{
			rect.x1 -= client_rect.width() - width;
			continue;
		}
		break;
	}
	if(type & MBF_CLR)
		body.clear();

    x_offset = (lcd->rect.width() - rect.width())/2;
    y_offset = (lcd->rect.height() - rect.height())/2;

    rect.Offset(x_offset, y_offset);
    client_rect.Offset(x_offset, y_offset);
    button_rect.Offset(x_offset, y_offset);
    if(title_rect)
    {
    	title_rect.x0 = rect.x0;
    	title_rect.x1 = rect.x1;
    	title_rect.Offset(0, y_offset);
    	GFlags flg = GO_FLG_SHOW|GO_FLG_TRANSPARENT;
    	if(message_rect.height() >= client_rect.height())
    		flg |= GO_FLG_ENABLED;
    	title_box = new GTitle(	ID_MB_TITLE, title_rect, title, nullptr,
    							flg, SS_CENTER|SS_TOP);
    	addChild(title_box);
    }
    if(message_rect.width() < client_rect.width())
    	x_offset += (client_rect.width() - message_rect.width())/2;
    message_rect.Offset(x_offset, y_offset);

    if(type & MBF_EDIT)
    {
    	edit_box = new GEdit(ID_MB_TEXT_BOX, message_rect, body, nullptr,
    			((bnum)?0:GO_FLG_SELECTED)|
				 GO_FLG_BORDER|GO_FLG_VSCROLL|GO_FLG_TRANSPARENT|GO_FLG_DEFAULT,
				 GET_MBF_EDIT_FLAGS(type),
				font);
		if(addChild(edit_box))
		{
			edit_box->shift = GET_MBF_INPUT_TYPE(type);
			text_box = edit_box;
		}
    }
    else
    {
    	text_box = new GText(ID_MB_TEXT_BOX, message_rect, body, nullptr,
 				GO_FLG_VSCROLL|GO_FLG_TRANSPARENT|GO_FLG_SHOW,SS_DEFAULT,font);
		if(addChild( text_box ))
		{
			if(message_rect.height() < msg_size.height)
				text_box->flags |= GO_FLG_ENABLED;
		}
    }
	int bdistance = client_rect.width();

	if ( bnum )
	{
		if(bdistance > button_rect.width())
		{
			bdistance -= button_rect.width();
			bdistance /= bnum+1;
		}
		else
			bdistance = 0;
		int distance = 4*font->hdistance + 2*bs.x;
		button_rect.Inflate(0,2);
		button_rect.Offset(0,1);
		for(unsigned char mask =1, i=0; mask < MBF_LAST_BTN; mask <<=1, i++)
		{
			if(type & mask)
			{
				if(!default_button)
					default_button = mask;

				button_rect.x0 += bdistance;
				button_rect.x1 = button_rect.x0 + (strlen(MB_IDS[i]) * font->hspacing) + distance;
				addChild(new GButton(mask/*ret_codes[i]*/, button_rect, ret_codes[i], MB_IDS[i],
						GO_FLG_DEFAULT|GO_FLG_BORDER|GO_FLG_TRANSPARENT|
						((default_button&mask)?GO_FLG_SELECTED:0 )));
				button_rect.x0 += button_rect.width();
			}
		}
	}
	weak_gui_message_beep(GET_MBF_BEEP_TYPE(type));
	return GDialog::initialize(msg);
}
Esempio n. 8
0
int CALLBACK GetMemoData( LPVOID lp, int nGetType, LPVOID lpData, int nDataSize)
{
	switch( nGetType)
	{
	case _GET_MEMO:
		return GetMemo( lp, lpData, nDataSize);
	case _GET_TITLE:
		return GetTitle( lp, lpData, nDataSize);
	case _GET_FONT:
		return GetFont( lp, lpData, nDataSize);
	case _GET_FORECOLOR:
		return GetForeColor( lp, lpData, nDataSize);
	case _GET_BACKCOLOR:
		return GetBackColor( lp, lpData, nDataSize);
	case _GET_ICON:
		return GetIconIndex( lp);
	case _GET_ZORDER:
		return GetZOrder( lp);
	case _GET_WINDOWTYPE:
		return GetWindowType( lp);
	case _GET_RECT_NORMAL:
		return GetNormalRect( lp, lpData, nDataSize);
	case _GET_POINT_TITLE:
		return GetTitlePoint( lp, lpData, nDataSize);
	case _GET_POINT_ICON:
		return GetIconPoint( lp, lpData, nDataSize);
	case _GET_RECT_TITLE:
		return GetTitleRect( lp, lpData, nDataSize);
	case _GET_RECT_ICON:
		return GetIconRect( lp, lpData, nDataSize);

	case _GET_TIMERENABLE:
		return IsTimerEnable( lp);
	case _GET_TIMER_TYPE:
		return GetTimerType( lp);
	case _GET_TIMER_MONTH:
		return GetTimerMonth( lp);
	case _GET_TIMER_DAY:
		return GetTimerDay( lp);
	case _GET_TIMER_HOUR:
		return GetTimerHour( lp);
	case _GET_TIMER_MIN:
		return GetTimerMin( lp);
	case _GET_TIMER_WEEK:
		return GetTimerWeek( lp);
	case _GET_TIMER_SOUND:
		return GetTimerSound( lp, lpData, nDataSize);

	case _GET_LINKENABLE:
		return IsLink( lp);
	case _GET_LINK_FILE:
		return GetLinkFile( lp, lpData, nDataSize);
	case _GET_LINK_PARAM:
		return GetLinkParam( lp, lpData, nDataSize);

	case _GET_CREATE_YEAR:
		return GetCreateYear( lp);
	case _GET_CREATE_MONTH:
		return GetCreateMonth( lp);
	case _GET_CREATE_DAY:
		return GetCreateDay( lp);

	case _GET_DEF_FONT:
		return GetDefFont( lpData, nDataSize);
	case _GET_DEF_FORECLR:
		return GetDefForeColor( lpData, nDataSize);
	case _GET_DEF_BACKCLR:
		return GetDefBackColor( lpData, nDataSize);

	case _GET_VERSION:
		return VERSION_CODE;
	}
	return 0;
}