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 + -
显示快捷键?