edit.c

来自「好记星的控件,包括button,list,对文件操作」· C语言 代码 · 共 1,029 行 · 第 1/3 页

C
1,029
字号
/**************************************************************************
                                                                          
              Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD                   
                                                                          
 FILE NAME:   Edit.C                                                      
 MODULE NAME: Edit                                                        
 DESCRIPTION: 编辑器主函数及消息处理函数等
 对外函数声明:
编辑器控件初始化
VOID    EditInitialize(VOID);
设置编辑器的统一样式
VOID    EditSetFaceParam( MEditFace *pFace );
编辑器的消息处理函数
UINT32	EditHandleEvent(APGUI_STRUCT_MODEL *pGui, UINT uEvent, UINT uParam);
设置编辑器的参数,Ap初始化时调用,否则用默认的参数初始化
BOOL	EditSetParam(MEdit* pEdit,MEditParam* pParam);
设置编辑器标题
VOID	EditSetCaption(MEdit* pEdit,UINT8* pCaption);
设置编辑器的只读属性
VOID    EditSetReadOnly(MEdit* pEdit,BOOL bReadOnly);
获取编辑器的只读属性
BOOL    EditIsReadOnly(MEdit* pEdit);
编辑器是否被编辑过
BOOL    EditIsModified(MEdit* pEdit);
编辑器的总行数
UINT    EditGetLineCount(MEdit* pEdit);
获取编辑器数据指针
UINT8*  EditGetDataPtr(MEdit* pEdit);
获取编辑器数据的长度
UINT    EditGetDataLen(MEdit* pEdit);
获取编辑器块首尾
BOOL    EditGetSel(MEdit* pEdit, UINT* pStart, UINT* pEnd);
设置编辑器的块首尾
BOOL	EditSetSel(MEdit* pEdit, UINT  uStart, UINT uEnd);
编辑器选中所有数据
BOOL	EditSetAll(MEdit* pEdit);
获取光标内存位置
BOOL    EditGetCursorMem(MEdit* pEdit,UINT* pCurMem);
获取编辑器行列位置
BOOL    EditGetCursorLineRow(MEdit* pEdit,UINT* pLine, UINT* pRow);
设置编辑器光标的行列
BOOL	EditSetCursorLineRow(MEdit* pEdit, UINT uLine, UINT uRow);
设置编辑器的数据
BOOL	EditSetText(MEdit* pEdit, UINT8* pData);
清除mark块数据
BOOL	EditClear(MEdit* pEdit);
 内部函数声明:
		编辑器设置默认参数
		BOOL	__EditSetDefaultParam(MEdit* pEdit);
		
**************************************************************************
    DTAE       AUTHOR     VERSION                 REMARKS                 
 =========== ==========  =========  ======================================
 2005-12-31    gaolinhui    V1.0     create                               
***************************************************************************/
#include "kernel.h"
#include "EditIn.h"


//全局变量
MEditFace   g_mEditFace;		//编辑器控件的外观颜色
EdtCmdEx    g_mEdtCmdEx;		//编辑器的扩展命令类型
CMDEXP		g_mEditCmdParam;

//外观参数
const MEditFace EDITFACE = {
    0xffff,//背景颜色白色
    0x0000,//行分隔线黑色
    0x0000,//文本颜色黑色
	0x0000,//高亮显示背景色
	0xffff //高亮显示文本色

};




VOID    EditSetFaceParam( MEditFace *pFace )
{
    memcpy( &g_mEditFace, pFace, sizeof(MEditFace) );
}

VOID    EditInitialize()
{
    EditSetFaceParam( (MEditFace *)&EDITFACE);
}

/****************************************************************************/
/*	BOOL	EditSetParam(MEdit* pEdit,MEditParam* pParam)					*/
/*	description:															*/
/*		设置编辑器的参数													*/
/*	Input:	pEdit - Edit控件句柄											*/
/*			pParam - 指向MEditParam的结构									*/
/*	output:																	*/
/*			无																*/
/****************************************************************************/
/*	高林辉				2005-12-20				创建						*/
/****************************************************************************/
BOOL	EditSetParam(MEdit* pEdit,MEditParam* pParam)
{
	pEdit->pmEditInfo->uRowSpace = pParam->uRowSpace;
	pEdit->pmEditInfo->wAllowChar = pParam->wAllowChar;
	pEdit->pmEditInfo->wFontID = pParam->wFontID;
	pEdit->pmEditInfo->uIndent = pParam->uIndent;	
/*	
	//重新计算一行显示的字符个数
    if( pEdit->pmEditInfo->wState & OF_EDITOR_MULTILINE )
    {
        pEdit->pmEditInfo->uDataLines = __EditGetStrLineNum(pEdit->pmEditInfo->wFontID,
				pEdit->uWidth, pEdit->pmEditInfo->pCaption, pEdit->pmEditInfo->pBuf, 
				pEdit->pmEditInfo->uIndent, FALSE );
    }
*/
	__EditLineRowChange(pEdit,pEdit->pmEditInfo->uUseDspLen,FALSE,FALSE);
	return TRUE;
}


/****************************************************************************/
/*	VOID	EditSetCaption(MEdit* pEdit,UINT8* pCaption)					*/
/*	description:															*/
/*		设置编辑器的标题													*/
/*	Input:	pEdit - Edit控件句柄											*/
/*			pCaption - 标题													*/
/*	output:																	*/
/*			无																*/
/****************************************************************************/
/*	高林辉				2005-12-20				创建						*/
/****************************************************************************/
VOID	EditSetCaption(MEdit* pEdit,UINT8* pCaption)
{
	pEdit->pmEditInfo->pCaption = pCaption;
	__EditLineRowChange(pEdit,pEdit->pmEditInfo->uUseDspLen+1,FALSE,FALSE);
}


/****************************************************************************/
/*	VOID    EditSetReadOnly(MEdit* pEdit,BOOL bReadOnly)					*/
/*	description:															*/
/*		设置编辑器的只读属性												*/
/*	Input:	pEdit - Edit控件句柄											*/
/*			bReadOnly - 只读属性,true为只读,FALSE为非只读					*/
/*	output:																	*/
/*																			*/
/****************************************************************************/
/*	高林辉				2006-1-13				创建						*/
/****************************************************************************/
VOID    EditSetReadOnly(MEdit* pEdit,BOOL bReadOnly)
{
	BOOL bRet = FALSE;
	UINT nCurLine,nCurRow;
	if(pEdit->pmEditInfo->wState & OF_EDITOR_READONLY)
	{
		bRet = TRUE;
	}
	if((bRet && bReadOnly) || (!bRet && !bReadOnly))
	{//属性不变,返回
		return;
	}
		
    if(bReadOnly)
    {   /*设定为只读*/
		pEdit->pmEditInfo->wState |= OF_EDITOR_READONLY;
		//隐藏光标
		__EditCursorHide(pEdit);
		//如果有选择块,则取消块选择
		if(pEdit->pmEditInfo->m_Block.uBlkHead != pEdit->pmEditInfo->m_Block.uBlkTail)
		{
			pEdit->pmEditInfo->m_Block.uBlkHead = 0;
			pEdit->pmEditInfo->m_Block.uBlkTail = 0;
		}

    }
    else
    {   /*设定为可编辑*/
		pEdit->pmEditInfo->wState &= (~OF_EDITOR_READONLY);
        pEdit->pmEditInfo->m_CurSor.uCursorMem = (UINT)(pEdit->pmEditInfo->pScrnStart - pEdit->pmEditInfo->pBuf);
        __EditMemColToCursor( pEdit, pEdit->pmEditInfo->m_CurSor.uCursorMem, &nCurLine, &nCurRow, TRUE, TRUE);
		__EditShowCursor( pEdit);
	}
	MsgPost(NULL,EVENT_DRAW,0);

}


/****************************************************************************/
/*	BOOL    EditIsReadOnly(MEdit* pEdit);									*/
/*	description:															*/
/*		获取编辑器的只读属性												*/
/*	Input:	pEdit - Edit控件句柄											*/
/*	output:																	*/
/*	如果是只读的,返回TRUE,否则返回FALSE										*/
/****************************************************************************/
/*	高林辉				2006-1-13				创建						*/
/****************************************************************************/
BOOL    EditIsReadOnly(MEdit* pEdit)
{
	if(pEdit->pmEditInfo->wState & OF_EDITOR_READONLY)
		return TRUE;
	else
		return FALSE;
}


/****************************************************************************/
/*	BOOL    EditIsModified(MEdit* pEdit)									*/
/*	description:															*/
/*		编辑器是否被编辑过													*/
/*	Input:	pEdit - Edit控件句柄											*/
/*	output:																	*/
/*	如果是被编辑过,返回TRUE,否则返回FALSE									*/
/****************************************************************************/
/*	高林辉				2006-1-13				创建						*/
/****************************************************************************/
BOOL    EditIsModified(MEdit* pEdit)
{
	if(pEdit->pmEditInfo->wState & SF_EDITOR_MODIFIED)
		return TRUE;
	else
		return FALSE;
}

/****************************************************************************/
/*	UINT    EditGetLineCount(MEdit* pEdit)									*/
/*	description:															*/
/*			编辑器的总行数													*/
/*	Input:	pEdit - Edit控件句柄											*/
/*	output:																	*/
/*		返回编辑器的总行数													*/
/****************************************************************************/
/*	高林辉				2006-1-14				创建						*/
/****************************************************************************/
UINT    EditGetLineCount(MEdit* pEdit)
{
	return (UINT)(pEdit->pmEditInfo->uDataLines);
}


/****************************************************************************/
/*	UINT8*  EditGetDataPtr(MEdit* pEdit)									*/
/*	description:															*/
/*	获取编辑器数据指针														*/
/*	Input:	pEdit - Edit控件句柄											*/
/*	output:																	*/
/*		返回编辑器的数据指针												*/
/****************************************************************************/
/*	高林辉				2006-1-14				创建						*/
/****************************************************************************/
UINT8*  EditGetDataPtr(MEdit* pEdit)
{
	return (UINT8*)(pEdit->pmEditInfo->pBuf);
}

/****************************************************************************/
/*	UINT    EditGetDataLen(MEdit* pEdit);									*/
/*	description:															*/
/*	获取编辑器数据的长度													*/
/*	Input:	pEdit - Edit控件句柄											*/
/*	output:																	*/
/*		返回编辑器的数据长度												*/
/****************************************************************************/
/*	高林辉				2006-1-14				创建						*/
/****************************************************************************/
UINT    EditGetDataLen(MEdit* pEdit)
{
	return (UINT)(pEdit->pmEditInfo->uUseMemLen);
}

/****************************************************************************/
/*	BOOL    EditGetSel(MEdit* pEdit, UINT* pStart, UINT* pEnd);				*/
/*	description:															*/
/*	获取编辑器块首尾														*/
/*	Input:	pEdit - Edit控件句柄											*/
/*			pStart - 用于存放块起始位置的地址								*/
/*			pEnd -	 用于存放块结束位置的地址								*/
/*	output:																	*/
/*		TURE - 取的块首尾成功												*/
/*		FALSE - 当前没有设置块												*/
/****************************************************************************/
/*	高林辉				2006-1-14				创建						*/
/****************************************************************************/
BOOL    EditGetSel(MEdit* pEdit, UINT* pStart, UINT* pEnd)
{
	BOOL bRet = TRUE;
	if(pEdit->pmEditInfo->m_Block.uBlkHead == pEdit->pmEditInfo->m_Block.uBlkTail)
	{	//没有块	
		bRet = FALSE;
	}
	else
	{
		*pStart = pEdit->pmEditInfo->m_Block.uBlkHead;
		*pEnd = pEdit->pmEditInfo->m_Block.uBlkTail;
	}
	return bRet;
}

/****************************************************************************/
/*	BOOL	EditSetSel(MEdit* pEdit, UINT  uStart, UINT uEnd)				*/
/*	description:															*/
/*		设置编辑器的块首尾													*/
/*	Input:	pEdit - Edit控件句柄											*/
/*			uStart - 块起始位置												*/
/*			uEnd -	 块结束位置												*/
/*	output:																	*/
/*		TURE - 设置块首尾成功												*/
/*		FALSE - 设置块首尾失败												*/
/****************************************************************************/
/*	高林辉				2006-1-14				创建						*/
/****************************************************************************/
BOOL	EditSetSel(MEdit* pEdit, UINT  uStart, UINT uEnd)
{
	BOOL bRet = TRUE;
	UINT uMemLen;
	//如果编辑器只读或是密码状态,返回设置失败
	if((pEdit->pmEditInfo->wState & OF_EDITOR_READONLY) 
		|| (pEdit->pmEditInfo->wState & OF_EDITOR_PASSWORD) )
	{
		bRet = FALSE;
	}
	else
	{
		uMemLen = pEdit->pmEditInfo->uUseMemLen;
		if((uStart > uEnd) || (uEnd > uMemLen))
		{
			bRet = FALSE;
		}
		else
		{
			pEdit->pmEditInfo->m_Block.uBlkHead = uStart;
			pEdit->pmEditInfo->m_Block.uBlkTail = uEnd;
			//光标显示在块尾
			pEdit->pmEditInfo->m_CurSor.uCursorMem = uEnd;
			//调整光标行列
			__EditLineRowChange(pEdit,pEdit->pmEditInfo->uUseDspLen+1,TRUE,FALSE);
		}
	}
	return bRet;
	
}

/****************************************************************************/
/*	BOOL	EditSetAll(MEdit* pEdit)										*/
/*	description:															*/

⌨️ 快捷键说明

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