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

📄 brw_calc.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 3 页
字号:
				}
				/*拨动数据指针*/
				pData += wMoveLen;
				/*记录行指针*/
#if defined(BORWSER_RECORD_EVERY)
				pNodeInfo[dwCurLine].pLinePtr = pData;
				pNodeInfo[dwCurLine].wStates = 
					pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
				pNodeInfo[dwCurLine].byLineHi = (UINT8)height0;
#else
				if(dwCurLine%BROWSER_NODE_LEN == 0)
				{
					pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData;
					pNodeInfo[dwCurLine/BROWSER_NODE_LEN].wStates = 
						pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
				}
#endif
				
			}
			else
			{
				/*拨动数据指针*/
				pData += wMoveLen;
			}
			continue;
		}
		else if (wUnitWidth == 0)	/*结束符*/
		{
			//记录行指针
#if defined(BORWSER_RECORD_EVERY)
			pNodeInfo[ (dwCurLine+1)].pLinePtr = pData;
#else
			if( (dwCurLine+1)%BROWSER_NODE_LEN == 0)
			{
				pNodeInfo[ (dwCurLine+1)/BROWSER_NODE_LEN ].pLinePtr = pData;
			}
#endif
			break;
		}
		/* 单词显示长度大于行最大显示长度 */
		else if (wUnitWidth > wTotalCol)
		{
			UINT8 *p,*ptr;
			UINT range;
			UINT32 dwLen,l,i;
			UINT16 w,h;

			/*如果不是行开始位置则另起一行*/
			if (wCurCol != 0)
			{
				dwCurLine ++;
				/*如果超出最大行数,截断数据并返回*/
				if (dwCurLine >= BROWSER_MAX_LINENUM)
				{
					(*pData) = BROWSER_DATA_END;
					/*记录行指针*/
#if defined(BORWSER_RECORD_EVERY)
					pNodeInfo[dwCurLine].pLinePtr = pData;
#else
					if(dwCurLine%BROWSER_NODE_LEN == 0)
					{
						pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData;
					}
#endif
					break;
				}
			}
			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)
				{
					/*记录行指针*/
#if defined(BORWSER_RECORD_EVERY)
					pNodeInfo[dwCurLine].pLinePtr = pData;
#else
					if(dwCurLine%BROWSER_NODE_LEN == 0)
					{
						pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData;
					}
#endif
				}
				else
				{
					/*记录行指针*/
#if defined(BORWSER_RECORD_EVERY)
					pNodeInfo[dwCurLine].pLinePtr = pData + dwLen + l;
#else
					if(dwCurLine%BROWSER_NODE_LEN == 0)
					{
						pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData + dwLen + l;
					}
#endif
				}
#if defined(BORWSER_RECORD_EVERY)
				pNodeInfo[dwCurLine].wStates = 
						pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
				pNodeInfo[dwCurLine].byLineHi = (UINT8)height;
#else
				if(dwCurLine%BROWSER_NODE_LEN == 0)
				{
					pNodeInfo[dwCurLine/BROWSER_NODE_LEN].wStates = 
						pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
				}
#endif
				if (*p)
				{
					dwCurLine ++;
				}
				i ++;
				/*如果超出最大行数,截断数据并返回*/
				if (dwCurLine >= BROWSER_MAX_LINENUM)
				{
					(*pData) = BROWSER_DATA_END;
#if defined(BORWSER_RECORD_EVERY)
					pNodeInfo[dwCurLine].pLinePtr = pData;					
#else
					if(dwCurLine%BROWSER_NODE_LEN == 0)
					{
						pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData;
					}
#endif
					break;
				}
			}
			FontGetStringRect(&w,&h,ptr);
			wCurCol = w;
			pData += wMoveLen;
			continue;
		}
		/*总长度超行,另起一行*/
		else if ((wCurCol + wUnitWidth) > wTotalCol)
		{
			wCurCol = 0;
			dwCurLine ++;
			/*如果超出最大行数,截断数据并返回*/
			if (dwCurLine >= BROWSER_MAX_LINENUM)
			{
				(*pData) = BROWSER_DATA_END;
#if defined(BORWSER_RECORD_EVERY)
				pNodeInfo[dwCurLine].pLinePtr = pData;
#else
				if(dwCurLine%BROWSER_NODE_LEN == 0)
				{
					pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData;
				}
#endif
				break;
			}
			/*记录行指针*/
#if defined(BORWSER_RECORD_EVERY)
			pNodeInfo[dwCurLine].pLinePtr = pData;
			pNodeInfo[dwCurLine].wStates = 
				pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
			pNodeInfo[dwCurLine].byLineHi = (UINT8)height;

#else
			if(dwCurLine%BROWSER_NODE_LEN == 0)
			{
				pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData;
				pNodeInfo[dwCurLine/BROWSER_NODE_LEN].wStates = 
					pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
			}
#endif
		}
		/*是不是行首空格*/
		if ((wCurCol == 0 && *pUnitBuff == ' ') 
			&& (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT))
		{
#if defined(BORWSER_RECORD_EVERY)
			pNodeInfo[dwCurLine].pLinePtr = pData + wMoveLen;
#else
			if(dwCurLine%BROWSER_NODE_LEN == 0)
			{
				pNodeInfo[dwCurLine/BROWSER_NODE_LEN].pLinePtr = pData + wMoveLen;
			}
#endif
			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;
						//pLineInfo[dwCurLine].wStates |= BROWSER_STATE_NEXTTAB;
					}
				}
			}
			/*累加列宽*/
			wCurCol += wUnitWidth;
		}
		/*拨动指针*/
		pData += wMoveLen;
		
	}
	pBrowserer->pBrwInfo->wStates = wState;
	pBrowserer->pBrwInfo->bFinished = TRUE;
	//释放内存
	BROWSER_STACK_FREE(pBrowserer,BROWSER_UNIT_MAXLEN);
	if(wCurCol != 0)
	{
		dwCurLine++;
	}
	return dwCurLine;
}







UINT8 *BrowserLineColToRealPos(MBrowser *handle, UINT32 dwLine, UINT16 wCol)
{
	UINT8   *pData;
	UINT16  wMoveLen;
	UINT32  dwCurLine;
	UINT16	wCurCol,wWordCol;
    MBrowser bv,*pBrowserer;
	MLineInfo LineInfo;
    UINT8*   pUnitBuff;
	UINT16 wTotalCol,font;

	//申请内存
	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;


    /*找到行指针*/
	GetLineInfo(handle, dwLine, &LineInfo);
	pData = LineInfo.pLinePtr;
	pBrowserer->pBrwInfo->wStates = LineInfo.wStates;
	if (pData == (UINT8*)NULL)
	{
		BROWSER_STACK_FREE(handle,sizeof(MBrowserInfo));
		BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
		return pData;
	}


	/*设置起始字体*/
//================================
//Modified by Liang Ruhui on 2007-09-11
//保护系统字体
	font = GraphGetFontID();
	//font = pBrowserer->wFontID;
//================================
	BrowserSetPositionFont(pBrowserer,pData);
    dwCurLine = dwLine;
    wCurCol = 0;
	wTotalCol = pBrowserer->pBrwInfo->wTotalCol;
	while (wCurCol < wCol)
	{
		/*开始遍历*/
		wWordCol = BrowserGetOneUnit(pBrowserer, pData, 
			pUnitBuff, &wMoveLen,BROWSER_SCANNING);
		/*需要换行*/
		if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_RETURN)
		{
			if (wCurCol == 0)
			{
				pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
			}
			else
			{
				break;
			}
		}
		/*缩进*/
		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;
				}
			}
		}
		/*居中显示*/
		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 (wWordCol == (UINT16)-1)
		{
			if (wCurCol == 0)
			{
				pData += wMoveLen;
				continue;
			}
			else
			{
				break;
			}
		}
		/*数据结束*/
		else if (wWordCol == 0)
		{
			break;
		}
		/*超过一行了*/
		else if ((wCurCol + wWordCol) > wCol)
		{
			UINT range;
			UINT8 *pTemp;
			range = wCol - wCurCol;
			pTemp = pUnitBuff;
			pTemp =	BrwWidthCutStr(pUnitBuff,FontGetLib(),0,&range);
			pData += pTemp - pUnitBuff;
			pData += wMoveLen - strlen(pUnitBuff);
            break;
		}
		wCurCol += wWordCol;
		pData += wMoveLen;
	}
	//释放堆栈
	BROWSER_STACK_FREE(handle, sizeof(MBrowserInfo));
	BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);

	GraphSetFontID(font);
	ClrFontInvertStyle();

	return pData;
}



/************************************************************************/
/* 函数名称: BrowserCenterStart                                         */
/* 函数描述: 计算居中起始位置                                           */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			pBrowserer			- 对象句柄								*/
/*			pData				- 数据指针								*/
/*			curCol				- 当前列								*/
/*			totalCol			- 总列数								*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          起始位置	                                                */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT16 BrowserCenterStart(MBrowser *pBrowserer,UINT8 *pData,
					   UINT16 curCol,UINT16 totalCol)
{
	UINT16 w,m;
	MBrowser bv,*handle;
	UINT uTemp;

	if (curCol >= totalCol)
	{
		return 0;
	}

	/*复制结构*/
	memcpy(&bv,pBrowserer,sizeof(MBrowser));
	bv.pBrwInfo = BROWSER_STACK_ALLOC(pBrowserer, sizeof(MBrowserInfo));
	memcpy(bv.pBrwInfo, pBrowserer->pBrwInfo, sizeof(MBrowserInfo));

	handle = &bv;

	/*得到一个Unit*/
	w = BrowserGetOneUnit(handle,pData,(UINT8 *)NULL,&m,BROWSER_SCANNING);
	/*缩进*/
	if (handle->pBrwInfo->wStates & BROWSER_STATE_TAB)
	{
		if (curCol == 0)
		{
			if (handle->pBrwInfo->byTabGrade == 0)
			{
				curCol = BROWSER_TAB_LENGTH;
				handle->pBrwInfo->byTabGrade = 1;
			}
			else
			{
				curCol = handle->pBrwInfo->wTabWidth;
			}
		}
	}
	if ((w == 0) || (w == (UINT16)-1))
	{
		BROWSER_STACK_FREE(pBrowserer,sizeof(MBrowserInfo));
		return 0;
	}
	if (curCol + w >= totalCol)
	{
		curCol = 0;
	}
	if (curCol != 0)
	{
		BROWSER_STACK_FREE(pBrowserer,sizeof(MBrowserInfo));		
		return 0;
	}
	/*遍历数据,直到居中标记结束或者换行*/
	while (handle->pBrwInfo->wStates & BROWSER_STATE_CENTER)
	{
		if ((w == 0) || (w == (UINT16)-1))
		{
			BROWSER_STACK_FREE(pBrowserer,sizeof(MBrowserInfo));
			return 0;
		}
		curCol += w;
		if (curCol >= totalCol)
		{
			BROWSER_STACK_FREE(pBrowserer,sizeof(MBrowserInfo));
			return 0;
		}
		pData += m;
		while(uTemp = BrowserFilter(handle,pData,BROWSER_UNIT_SYMBOL)) {
			pData += uTemp;
			if (!(handle->pBrwInfo->wStates & BROWSER_STATE_CENTER)) {
				BROWSER_STACK_FREE(pBrowserer,sizeof(MBrowserInfo));
				return (totalCol - curCol) / 2;
			}
		}
		w = BrowserGetOneUnit(handle,pData,(UINT8 *)NULL,&m,BROWSER_SCANNING);
	}
	BROWSER_STACK_FREE(pBrowserer,sizeof(MBrowserInfo));
	return (totalCol - curCol) / 2;
}



UINT BrowserLineWidth(MBrowser *handle,UINT32 line)
{
	UINT8 *ps,*pe;
	UINT32 l;
	UINT16 c;

	c = handle->pBrwInfo->wTotalCol;
	ps = BrowserLineColToPos(handle,line,0);
	pe = BrowserLineColToPos(handle,line + 1,0);
	if (!ps || !pe)
	{
		return c;
	}
	BrowserPendToLineCol(handle,ps,pe,&l,&c);
	if ((l != line) || (c > handle->pBrwInfo->wTotalCol))
	{
		c = handle->pBrwInfo->wTotalCol;
	}
	return c;
}

⌨️ 快捷键说明

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