⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppscrolllistlayouter.cpp

📁 基于ARM平台的控制系统,自己带有MINIGUI,可以直接在VC下运行界面演示程序
💻 CPP
字号:
#include "GUIpp.h"

#include "ppScrollListLayouter.h"

#if _USE_GUI == 1

void CScrollListLayouter::MoveSel(int nSingleStep)
{
	int	nWidth;
	int	nHeight;
	int 	nVisibleHeight = w_rc.GetHeight();
	int	nHeightToFirstVisible;
	switch(nSingleStep)
	{
	case 1:
		if(w_nSelectedItem<w_nItemCount-1)
			w_nSelectedItem++;
		break;
	case -1:
		if(w_nSelectedItem>0)
			w_nSelectedItem--;
		break;
	}
	///////////////////////

	if(w_nSelectedItem<w_nFirstVisibleItem)
	{
		w_nFirstVisibleItem = w_nSelectedItem;
		InvalidateTarget();
	}
	else
	{
		//判断选择项是否超出了当前下边界
		//如果是,按照w_nSelectedItem必须为最后
		//一项的标准求出w_nFirstVisibleItem
		
		nHeightToFirstVisible = 0;
		for(int i=w_nSelectedItem; i>=w_nFirstVisibleItem; i--)
		{
			MeasureTargetItem(i, nWidth, nHeight,(w_nSelectedItem == i));

			if(nHeightToFirstVisible+nHeight+w_nMargin > nVisibleHeight)
			{
				// if we take  w_nSelectedItem as the last visible item, then 
				// item i will partially-invisible,so (i+1) will be the first visible item
				w_nFirstVisibleItem = (i+1);
				InvalidateTarget();
				break;
			}
			else
			{
				nHeightToFirstVisible += nHeight + w_nMargin;
			}
		}
		
	}
	
}
void CScrollListLayouter::DoLayout()
{
	int	nTotalHeight;
	int 	nScrollPos;
	int	nYPos;
	int	nWidth;
	int	nHeight;
	int	bVisible;
	int 	nVisibleHeight = w_rc.GetHeight();
	
	CRect	rc;
	
	rc.w_nX1 = w_rc.w_nX1;
	rc.w_nX2 = w_rc.w_nX2;

	nTotalHeight = 0;
	nScrollPos = 0; 
	nYPos = 0;
	for(int i=0; i<w_nItemCount; i++)
	{
		MeasureTargetItem(i, nWidth, nHeight,(w_nSelectedItem == i));

		if(i>=w_nFirstVisibleItem)
		{
			//nScrollPos代表滚动第一可见项的位置
			rc.w_nY1 = w_rc.w_nY1 + nYPos;
			rc.w_nY2 = rc.w_nY1 + nHeight;
			
			
			if(nYPos >= 0 && nYPos + nHeight <= nVisibleHeight)
			{
				bVisible = 1;
				nYPos += nHeight + w_nMargin;
			}
			else
			{
				bVisible = 0;
			}
		}
		else
		{
			nScrollPos += nHeight + w_nMargin;
			bVisible = 0;
		}

		nTotalHeight += nHeight + w_nMargin;
		
		LayoutTargetItem(i,rc,bVisible,(w_nSelectedItem == i));
		
	}

	//nTotalHeight:	总高度
	//nVisibleHeight:	可见部分高度
	//nScrollPos:		滚动垂直位置
	//===============================
	//以上信息可以用来绘制滚动条
}



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -