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

📄 brw_handler.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 2 页
字号:
	}
	//保存申请的内存地址
	handle->pBrwInfo->pAllocBuf  = pMemBuf;
	//分配内存
	//handle->pBrwInfo->pLineInfo = (MLineInfo*)p;
	//p += sizeof(MLineInfo)*(BROWSER_MAX_LINENUM + 1);
	handle->pBrwInfo->pNodeInfo = (BrowserNodeInfo*)p;
	p += sizeof(BrowserNodeInfo)*(BROWSER_MAX_NODES+1);
	//初始化堆栈.
	handle->pBrwInfo->mBrowserStack.pStackBuf = p;
	handle->pBrwInfo->mBrowserStack.uStackSize = BROWSER_STACK_SIZE;
	handle->pBrwInfo->mBrowserStack.uStackPointer = 0;
	//控件内部初始化
	/*取字体*/
//============================================
//Modified by Liang Ruhui on 2007-9-12
	if(handle->wFontID >= SYSTLIBTOTAL)
	{
		handle->wFontID = SYSTLIB;
		//wFontID = SYSTLIB;
	}
//	else
//	{
//		wFontID = handle->wFontID;
//	}
	wFontID = handle->wFontID;
//============================================

	/*行高*/
    wLineHeight = FontGetHeight(wFontID) + handle->wLineSpace;
	/*列宽*/
	wColWidth = 1;
	/*最大列数*/
	wTotalCol = handle->uWidth / wColWidth;
	/*一页可显示的行数*/
	wPageLine = handle->uHeight / wLineHeight;
	/*设置单元处理函数*/
	if(handle->pfnRuleProcess == NULL)
	{
		handle->pBrwInfo->fpProcessRule = BrowserDefaultRule;
	}
	else
	{
		handle->pBrwInfo->fpProcessRule = handle->pfnRuleProcess;
	}
	
	/*初始化*/
	handle->pBrwInfo->nX = handle->uX;
	handle->pBrwInfo->nY = handle->uY;
	handle->pBrwInfo->wWidth = handle->uWidth;
	handle->pBrwInfo->wHeight = handle->uHeight;
	handle->pBrwInfo->wStates = 0;
	handle->pBrwInfo->wOptions = handle->wOption;
	handle->pBrwInfo->pBuffer = NULL;
	handle->pBrwInfo->dwTotalLine = 0;
	handle->pBrwInfo->dwTopLine = 0;
	handle->pBrwInfo->wStartCol = 0;
	handle->pBrwInfo->wColWidth = wColWidth;
	handle->pBrwInfo->wLineHeight = wLineHeight;
	handle->pBrwInfo->wTotalCol = wTotalCol;
	handle->pBrwInfo->wLineSpace = handle->wLineSpace;
	handle->pBrwInfo->wPageLine = wPageLine;
	handle->pBrwInfo->pMarkStart = NULL;
	handle->pBrwInfo->pMarkEnd = NULL;
	handle->pBrwInfo->pMarkCur = NULL;
	handle->pBrwInfo->wFontID = wFontID;
	handle->pBrwInfo->byTabGrade = 0;
	handle->pBrwInfo->byExtraType = BROWSER_EXTRA_NOTHING;
	handle->pBrwInfo->dwExtraStart = 0;
	handle->pBrwInfo->dwExtraEnd = 0;
	handle->pBrwInfo->bFinished = FALSE;
	return 0;
}




/************************************************************************/
/* 函数名称: BrowserSearchStart                                         */
/* 函数描述: 创建浏览器		                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                  */
/* 输入参数:                                                            */
/*			handle			- 浏览器句柄								*/
/*			pString			- 查找的起始指针							*/
/*			uStrlen			- 数据长度									*/
/*			pState			- 起始的状态								*/
/* 输出:																*/
/*			pState			- 返回找到的行首的状态						*/
/* 返回值:                                                              */
/*          起始点的指针                                                */
/*			如果是NULL,说明查找失败										*/
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-4-3    gaolinhui    1.0    创建                                 */
/************************************************************************/
UINT8* BrowserSearchStart(MBrowser* handle, UINT8* pString, UINT uStrlen, UINT16* pState)
{
	UINT8* pUnitBuff, *pRet, *pData;
	MBrowser dv, *pBrowserer;
	UINT16 wMoveLen, wUnitWidth, wCurCol,wTotalCol;
	UINT16 width, height;
	UINT   uCount;
	BOOL   bFirstSpace;
	
	if(handle->wReserved != BROWSER_INIT_SUCCESS)
	{
		return (UINT8*)NULL;
	}

	//申请内存
	pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
    /*复制句柄数据*/
    memcpy(&dv,handle,sizeof(MBrowser));
	dv.pBrwInfo = BROWSER_STACK_ALLOC(handle,sizeof(MBrowserInfo));
	memcpy(dv.pBrwInfo, handle->pBrwInfo, sizeof(MBrowserInfo));
    pBrowserer = &dv;
	//初始化
	pBrowserer->pBrwInfo->wStates = *pState;
	wCurCol = pBrowserer->pBrwInfo->wStartCol;		/*当前列*/
	wTotalCol = pBrowserer->pBrwInfo->wTotalCol;	/*总列数*/
	pData = pString;
	pRet = NULL;
	uCount = 0;
	while( pData < (pString+uStrlen))
	{
		wUnitWidth = BrowserGetOneUnit(pBrowserer, pData, pUnitBuff, &wMoveLen, BROWSER_SCANNING);
		/*需要换行*/
		if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_RETURN)
		{
			if ((wCurCol != 0) && (wUnitWidth != (UINT16)-1))
			{
				wCurCol = 0;
			}
			pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
		}
		/*分段*/
		if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_SEGMENT)
		{
			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)
			{
				wCurCol = 0;
			}
			/*拨动数据指针*/			//找到了,返回
			pData += wMoveLen;
			pRet = pData;
			*pState = pBrowserer->pBrwInfo->wStates;
			break;
		}		
		else if (wUnitWidth == 0)	/*结束符*/
		{
			pRet = NULL;
			break;
		}
		/* 单词显示长度大于行最大显示长度 */
		else if (wUnitWidth > wTotalCol)
		{
			UINT8 *p,*ptr;
			UINT range;
			UINT32 dwLen,l,i;
			UINT16 w,h;

			/*如果不是行开始位置则另起一行*/
			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);
			}
			FontGetStringRect(&w,&h,ptr);
			wCurCol = w;
			pData += wMoveLen;
			continue;
		}	
		/*总长度超行,另起一行*/
		else if ((wCurCol + wUnitWidth) > wTotalCol)
		{
			wCurCol = 0;
		}	
		
		/*是不是行首空格*/
		if ((wCurCol == 0 && *pUnitBuff == ' ') 
			&& (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT))
		{
			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);
	return pRet;
}







⌨️ 快捷键说明

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