예제 #1
0
void ZStageInfoBox::OnDraw(MDrawContext* pDC)
{
	if(m_pLook)
	{
		MRECT r = GetInitialClientRect();

		int nShowCount=0;
		for(int i=GetStartItem(); i<GetCount(); i++){

			nShowCount++;

			if(nShowCount>=GetShowItemCount()) break;

			MRECT itemrect=MRECT(r.x,r.y+GetItemHeight()*(nShowCount-1),r.w,GetItemHeight());
			DrawBitmapFrame9(pDC, itemrect, m_pLook->m_pFrameBitmaps);
		}
	}
	
	MListBox::OnDraw(pDC);
}
예제 #2
0
void VMenu2::Resize(bool force)
{
	if(!force && (!ProcessEvents() || SendMessage(DM_ENABLEREDRAW, -1, nullptr)<0))
	{
		NeedResize=true;
		return;
	}
	NeedResize=false;

	FarListInfo info={sizeof(FarListInfo)};
	SendMessage(DM_LISTINFO, 0, &info);


	int X1 = m_X1;
	int Y1 = m_Y1;
	if(!ShortBox)
	{
		if(X1>1)
			X1-=2;
		if(Y1>0)
			Y1-=1;
	}


	int width=info.MaxLength+(ShortBox?2:6) + 3;
	if(m_X2>0)
		width=m_X2-X1+1;

	if(width>ScrX+1)
		width=ScrX+1;


	int height=GetShowItemCount();
	if(MaxHeight && height>MaxHeight)
		height=MaxHeight;

	height+=ShortBox?2:4;
	if(m_Y2>0)
		height=m_Y2-Y1+1;


	int mh=Y1<0 ? ScrY : ScrY-Y1;

	mh+=ShortBox ? 1 : 2;

	if(mh<0)
		mh=0;
	if(height>mh)
	{
		if(m_Y2<=0 && Y1>=ScrY/2)
		{
			Y1+=ShortBox?1:3;
			if(height>Y1)
				height=Y1;
			Y1-=height;
		}
		else
			height=mh;
	}

	int X=X1;
	if(X>0 && (X+width>ScrX))
		X-=X+width-ScrX;


	COORD size;
	size.X=width;
	size.Y=height;
	SendMessage(DM_RESIZEDIALOG, true, &size);

	SMALL_RECT ipos;
	if(ShortBox)
	{
		ipos.Left=0;
		ipos.Top=0;
		ipos.Right=width-1;
		ipos.Bottom=height-1;
	}
	else
	{
		ipos.Left=2;
		ipos.Top=1;
		ipos.Right=width-3;
		ipos.Bottom=height-2;
	}
	SendMessage(DM_SETITEMPOSITION, 0, &ipos);

	COORD pos;
	pos.X=X;
	pos.Y=Y1;
	SendMessage(DM_MOVEDIALOG, true, &pos);
}