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

📄 browser.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 3 页
字号:
	{
		return FALSE;
	}
	pLineInfo->pLinePtr = ((BrowserNodeInfo*)(handle->pBrwInfo->pNodeInfo+dwLine))->pLinePtr;
	pLineInfo->wStates  = ((BrowserNodeInfo*)(handle->pBrwInfo->pNodeInfo+dwLine))->wStates;
	if(dwLine >= handle->pBrwInfo->dwTotalLine )
		pLineInfo->wFontMaxHi = 0;
	else
		pLineInfo->wFontMaxHi = FontGetHeight(handle->pBrwInfo->wFontID);
	if(pLineInfo->wStates & BROWSER_STATE_DICTITEM)
		pLineInfo->wFontMaxHi = BrowserItemHeigh(handle);
	return TRUE;
#else
	MBrowser    *pBrowserer,bv;
	BrowserNodeInfo* pNode;	
	MLineInfo	tmplineinfo;
	UINT16		wNode,wRemain,wi;
	UINT16		wTotalCol,wCurCol,wMoveLen;
	UINT8*      pData;
	UINT16		width,height,height0;
	UINT16		wUnitWidth;
	UINT8*		pUnitBuff;
	BOOL		bFirstSpace,bFlag;

	//清空
	memset(pLineInfo, 0, sizeof(MLineInfo));
	if(!handle->pBrwInfo)
		return FALSE;
	if(dwLine > handle->pBrwInfo->dwTotalLine)
	{
		return FALSE;
	}
	//申请内存
	pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
    /*复制句柄数据*/
    memcpy(&bv,handle,sizeof(MBrowser));
	bv.pBrwInfo = BROWSER_STACK_ALLOC(handle,sizeof(MBrowserInfo));
	memcpy(bv.pBrwInfo, handle->pBrwInfo, sizeof(MBrowserInfo));
    pBrowserer = &bv;

	//计算开始的节点
	wNode = dwLine/BROWSER_NODE_LEN;
	wRemain = dwLine%BROWSER_NODE_LEN;
	pNode = pBrowserer->pBrwInfo->pNodeInfo+wNode;

	//初始化起始行的行信息结构
	pBrowserer->pBrwInfo->wStates = pNode->wStates;
	wCurCol = pBrowserer->pBrwInfo->wStartCol;		/*当前列*/
	wTotalCol = pBrowserer->pBrwInfo->wTotalCol;	/*总列数*/
	pData = pNode->pLinePtr;
	//初始化临时行信息
	FontGetStringRect(&width,&height0, " ");
	tmplineinfo.pLinePtr = pNode->pLinePtr;
	tmplineinfo.wStates = pNode->wStates;
	tmplineinfo.wFontMaxHi = height0;

	bFlag = TRUE;
	//查找指定行,返回行信息
	for(wi=0; wi<=wRemain; )
	{
		if((wi== wRemain) && bFlag )	//只在行首拷贝一次.
		{
			//找到指定的行将行首信息赋值给返回变量
			memcpy(pLineInfo, &tmplineinfo, sizeof(MLineInfo));
			bFlag = FALSE;
			//再搜索一行是因为要找到该行的行高
		}
		/*得到一个unit,字符串保存在pUnitBuff中*/
		wUnitWidth = BrowserGetOneUnit(pBrowserer, pData, 
			pUnitBuff, &wMoveLen,BROWSER_SCANNING);
		/*需要换行*/
		if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_RETURN)
		{
			if ((wCurCol != 0) && (wUnitWidth != (UINT16)-1))
			{
				wi ++;
				wCurCol = 0;
				/*记录行指针*/
				tmplineinfo.pLinePtr = pData;
				tmplineinfo.wStates = 
					pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
				tmplineinfo.wFontMaxHi = height0;
			}
			pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
		}
		/*分段*/
		if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_SEGMENT)
		{
			tmplineinfo.wFontMaxHi = height0 * 2;
			tmplineinfo.wStates |= BROWSER_STATE_DICTITEM;
			pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_SEGMENT;
		}
		/*居中显示*/
		if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_CENTER)
		{
			UINT16 co;

			/*起始位置*/
			co = BrowserCenterStart(pBrowserer,pData,wCurCol,wTotalCol);
			if (co != 0)
			{
				wCurCol += co;
				pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_CENTER;
			}
		}
		if (wUnitWidth == (UINT16)-1)	/*换行*/
		{   
			/*另起一行*/
			if (wCurCol != 0)
			{
				wi ++;
				wCurCol = 0;
				/*拨动数据指针*/
				pData += wMoveLen;
				/*记录行指针*/
				tmplineinfo.pLinePtr = pData;
				tmplineinfo.wStates = 
					pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
				tmplineinfo.wFontMaxHi = height0;
			}
			else
			{
				/*拨动数据指针*/
				pData += wMoveLen;
			}
			continue;
		}		
		else if (wUnitWidth == 0)	/*结束符*/
		{
			wi++;
			wCurCol = 0;
			tmplineinfo.pLinePtr = pData;
			tmplineinfo.wStates = 0;
			continue;
		}
		/* 单词显示长度大于行最大显示长度 */
		else if (wUnitWidth > wTotalCol)
		{
			UINT8 *p,*ptr;
			UINT range;
			UINT32 dwLen,l,i;
			UINT16 w,h;

			/*如果不是行开始位置则另起一行*/
			if (wCurCol != 0)
			{
				wi ++;
			}
			wCurCol = 0;
			/*标记符长度*/
			l = (UINT32)wMoveLen - strlen(pUnitBuff);
			p = pUnitBuff;
			i = 0;
			FontGetStringRect(&width,&height," ");
			while (*p)
			{
				/*数据长度*/
				dwLen = p - pUnitBuff;
				ptr = pUnitBuff + dwLen;
				/*计算一行最多显示的字符串指针位置*/
				range = wTotalCol;
				p = BrwWidthCutStr(ptr,FontGetLib(),0,&range);
				/*记录行指针*/
				if (i == 0)
				{
					tmplineinfo.pLinePtr = pData;
				}
				else
				{
					tmplineinfo.pLinePtr = pData + dwLen + l;
				}
				tmplineinfo.wStates = 
					pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
				tmplineinfo.wFontMaxHi = height;
				if (*p)
				{
					wi ++;
				}
				i ++;
			}
			FontGetStringRect(&w,&h,ptr);
			wCurCol = w;
			pData += wMoveLen;
			continue;
		}	
		/*总长度超行,另起一行*/
		else if ((wCurCol + wUnitWidth) > wTotalCol)
		{
			wCurCol = 0;
			wi ++;
			/*记录行指针*/
			tmplineinfo.pLinePtr = pData;
			tmplineinfo.wStates = 
				pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
			FontGetStringRect(&width,&height,pUnitBuff);
			tmplineinfo.wFontMaxHi = (UINT16)height;
		}	
		
		/*是不是行首空格*/
		if ((wCurCol == 0 && *pUnitBuff == ' ') 
			&& (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT))
		{
			tmplineinfo.pLinePtr = pData + wMoveLen;
			bFirstSpace = TRUE;
		}
		else
		{
			bFirstSpace = FALSE;
		}
		if (!bFirstSpace)
		{
			/*缩进*/
			if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
			{
				if (wCurCol == 0)
				{
					if (pBrowserer->pBrwInfo->byTabGrade == 0)
					{
						wCurCol = BROWSER_TAB_LENGTH;
						pBrowserer->pBrwInfo->byTabGrade = 1;
					}
					else
					{
						wCurCol = pBrowserer->pBrwInfo->wTabWidth;
					}
				}
			}
			/*累加列宽*/
			wCurCol += wUnitWidth;
		}
		/*拨动指针*/
		pData += wMoveLen;

	}

	//释放内存
	BROWSER_STACK_FREE(handle, sizeof(MBrowserInfo));
	BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
	//将行高输出
	if(dwLine == pBrowserer->pBrwInfo->dwTotalLine)
	{
		pLineInfo->wFontMaxHi = 0;
	}
	else
	{
		pLineInfo->wFontMaxHi = tmplineinfo.wFontMaxHi;
	}
	return TRUE;
#endif
}



BOOL BrowserIsFinished(MBrowser *handle)
{
	if(!handle->pBrwInfo)
		return FALSE;
	return handle->pBrwInfo->bFinished;
}

//返回浏览器初始化是否成功
BOOL BrowserIsInited(MBrowser *handle)
{
	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return FALSE;
	else
		return TRUE;
}

/************************************************************************/
/* 函数名称: BrowserSetTextFont                                         */
/* 函数描述: 设置字体类型	                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: Liang Ruhui                                                */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/*			font    		- 字体类型									*/
/* 输出参数:                                                            */
/*          NONE                    					                */
/* 返回值  :                                                            */
/*          设置成功或失败                                              */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2007-9-12   Liang Ruhui      1.0    创建	                            */
/************************************************************************/
BOOL BrowserSetTextFont(MBrowser *handle,UINT16 font)
{
	UINT16          wBackfont;
	UINT32          dwTotal;
	MLineInfo       lineinfo;
	INT             i;
	BrowserNodeInfo *pNodeInfo;

	if(!handle->pBrwInfo->bFinished){
		return FALSE;
	}
	if(font == handle->wFontID){
		return FALSE;
	}
	
	/*保护系统字体*/
	wBackfont = GraphGetFontID();

	/*设置新字体*/
	if(font >= SYSTLIBTOTAL)
	{
		handle->wFontID = SYSTLIB;
	}
	else{
		handle->wFontID = font;
	}
	handle->pBrwInfo->wFontID = handle->wFontID;

	/*取得原起始行信息*/
	if(!GetLineInfo(handle,handle->pBrwInfo->dwTopLine, &lineinfo)){
		return FALSE;
	}

	/*计算总行数*/
	dwTotal = BrowserCalcTotalLine((MBrowser *)handle, (UINT16)(BROWSER_STATE_INITIAL) );

	/*设置总行数*/
	handle->pBrwInfo->dwTotalLine = dwTotal;

	/*设置新起始行*/
	pNodeInfo = handle->pBrwInfo->pNodeInfo;
	i = 0;
	while((pNodeInfo[i].pLinePtr < lineinfo.pLinePtr) &&
		  (i <= BROWSER_MAX_LINENUM))
	{
		i++;
	}
	handle->pBrwInfo->dwTopLine = i;

	/*设置状态*/
	GetLineInfo(handle,handle->pBrwInfo->dwTopLine, &lineinfo);
	handle->pBrwInfo->wStates = lineinfo.wStates;

	/*初始化其它信息*/
	handle->pBrwInfo->wStartCol  = 0;
	handle->pBrwInfo->pMarkCur   = NULL;
	handle->pBrwInfo->pMarkStart = NULL;
	handle->pBrwInfo->pMarkEnd   = NULL;

	/*恢复系统字体*/
	GraphSetFontID(wBackfont);

	return TRUE;
}

⌨️ 快捷键说明

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