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); }
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); }