📄 wk_basefunc.cpp
字号:
FREEIF(str);*/
return SAVEFILE_ERROR;
}
// 保存文件索引
bTemp = AddFavoriteIndex(pIShell, ppFile, szName, nType, szFile);
if (!bTemp)
{// 错误提示
/* AECHAR * str = NULL;
WebData * pWebData = &pMe->web;
LoadWideText(pMe->app.m_pIShell, IDS_ERR_WRITEFILE, &str, RES_FILE);
PrintString2(pWebData->m_pIStatic, pWebData->szCategory, str, FALSE);
FREEIF(str);*/
return SAVEFILE_ERROR;
}
return SAVEFILE_SUCCESS;
}
// 设置菜单样式
void SetMenuStyle(IMenuCtl * pMenu, AEERect * pRect)
{
AEEItemStyle sel, normal;
AEEMenuColors colors;
normal.ft = AEE_FT_NONE;
normal.xOffset = 0;
normal.yOffset = 0;
normal.roImage = AEE_RO_TRANSPARENT;
sel.ft = AEE_FT_RAISED;
sel.xOffset = 0;
sel.yOffset = 0;
sel.roImage = AEE_RO_TRANSPARENT;
IMENUCTL_SetStyle(pMenu, &normal, &sel);
colors.wMask = MC_BACK | MC_SEL_BACK;
colors.cBack = MAKE_BACK_COLOR;
colors.cSelBack = MAKE_SEL_COLOR;
IMENUCTL_SetColors(pMenu, &colors);
IMENUCTL_SetProperties(pMenu, MP_MAXSOFTKEYITEMS | MP_ICON_TEXT_TOP | MP_NO_ARROWS);
}
int GetImageWidth(IImage * img)
{
AEEImageInfo info;
if (img != NULL)
IIMAGE_GetInfo(img, &info);
return info.cx;
}
int GetImageHeight(IImage * img)
{
AEEImageInfo info;
if (img != NULL)
IIMAGE_GetInfo(img, &info);
return info.cy;
}
int _parseEscapeChars( char *sz )
{
int i,j,len;
char buf[CBUF1SIZE];
STRCPY( buf, sz );
// Convert literal "\n" in resources to 0x0A newlines
len = STRLEN( buf );
for( i=j=0; i<=len; i++ ) {
if( buf[i] == '\\' ) {
switch( buf[++i] ) {
case 'n':
sz[j++] = '\n';
break;
case '\\':
sz[j++] = '\\';
break;
default:
break;
}
} else if( buf[i] == '%' ) {
i++;
if( buf[i] == '%' ) {
sz[j++] = '%';
} else if( !STRNCMP( buf+i, "CLR", 3 )) {
STRCPY( sz+j, CLR_KEY );
j+= STRLEN( CLR_KEY );
i+= STRLEN( "CLR" )-1;
} else if( !STRNCMP( buf+i, "SEL", 3 )) {
STRCPY( sz+j, SEL_KEY );
j+= STRLEN( SEL_KEY );
i+= STRLEN( "SEL" )-1;
}
} else {
sz[j++] = buf[i];
}
}
return( j );
}
int _parseEscapeAEChars( AECHAR * sz )
{
int i, len;
//AECHAR buf[CBUF1SIZE];
// Convert literal "~" in resources to 0x0A newlines
len = WSTRLEN( sz );
for( i=0; i<=len; i++ ) {
if ( sz[i] == L'~' )
sz[i] = '\n';
}
return i;
}
// 将char型的字符串转为AECHAR
boolean StrToWstr(char * szBuf, AECHAR ** ppDest)
{
long nLen;
if (szBuf == NULL) return FALSE;
if (ppDest == NULL) return FALSE;
nLen = (STRLEN(szBuf) + 1) * sizeof(AECHAR);
*ppDest = (AECHAR *)MALLOC(nLen);
STR_TO_WSTR(szBuf, *ppDest, nLen);
return TRUE;
}
// 将AECHAR型的字符串转为char
boolean WstrToStr(AECHAR * szBuf, char ** ppDest)
{
long nLen;
if (szBuf == NULL) return FALSE;
if (ppDest == NULL) return FALSE;
nLen = (WSTRLEN(szBuf) + 1) * sizeof(char);
*ppDest = (char *)MALLOC(nLen);
WSTR_TO_STR(szBuf, *ppDest, nLen);
return TRUE;
}
// 产生一个指定后缀的新文件名
boolean GetNewFileName(IShell * pIShell, IFileMgr **ppFile, char * lpFile, char * lpExt)
{
long nIndex = 0;
boolean bTemp = FALSE;
boolean bPath = FALSE; // 是否需要设置收藏夹路径
if (pIShell == NULL || ppFile == NULL) return FALSE;
ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)ppFile);
if (STRLEN(FAVORITE_PATH) > 0) bPath = TRUE;
// 检查收藏文件夹是否存在,如果不存在,则创建它
if (bPath)
{
if (IFILEMGR_EnumInit(*ppFile, "", TRUE) == SUCCESS)
{
FileInfo pInfo;
while (IFILEMGR_EnumNext(*ppFile, &pInfo))
{
if (STRICMP(pInfo.szName, FAVORITE_PATH) == 0)
bTemp = TRUE;
}
}
if (!bTemp)
{
IFILEMGR_MkDir(*ppFile, FAVORITE_PATH);
}
}
// 开始枚举文件
bTemp = FALSE;
for (nIndex = 0; nIndex < MAX_FILE; nIndex++)
{
IFile *f;
if (bPath)
SPRINTF(lpFile, "%s\\tmp%04d.%s", FAVORITE_PATH, nIndex, lpExt);
else
SPRINTF(lpFile, "tmp%04d.%s", nIndex, lpExt);
f = IFILEMGR_OpenFile (*ppFile, lpFile, _OFM_READ);
if (f)
{
IFILE_Release(f);
}
else
{
bTemp = TRUE;
break;
}
}
IFILEMGR_Release(*ppFile);
*ppFile = NULL;
return bTemp;
}
boolean CheckFileName(IShell * pIShell, IFileMgr **ppFile, char * lpFile, char * lpExt, long nID)
{
boolean bTemp = FALSE;
boolean bPath = FALSE; // 是否需要设置收藏夹路径
if (pIShell == NULL || ppFile == NULL) return FALSE;
ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)ppFile);
if (STRLEN(FAVORITE_PATH) > 0) bPath = TRUE;
// 检查收藏文件夹是否存在,如果不存在,则创建它
if (bPath)
{
if (IFILEMGR_EnumInit(*ppFile, "", TRUE) == SUCCESS)
{
FileInfo pInfo;
while (IFILEMGR_EnumNext(*ppFile, &pInfo))
{
if (STRICMP(pInfo.szName, FAVORITE_PATH) == 0)
bTemp = TRUE;
}
}
if (!bTemp)
{
IFILEMGR_MkDir(*ppFile, FAVORITE_PATH);
}
}
// 开始枚举文件
bTemp = FALSE;
IFile *f;
/*
if (bPath)
SPRINTF(lpFile, "%s\\wxfz%04d.%s", FAVORITE_PATH, nID, lpExt);
else
SPRINTF(lpFile, "wxfz%04d.%s", nID, lpExt);*/
if (bPath)
SPRINTF(lpFile, "%s\\xhf%04d.%s", FAVORITE_PATH, nID, lpExt);
else
SPRINTF(lpFile, "xhf%04d.%s", nID, lpExt);
f = IFILEMGR_OpenFile (*ppFile, lpFile, _OFM_READ);
if (!f)
{
bTemp = TRUE;
}
else
IFILE_Release(f);
IFILEMGR_Release(*ppFile);
*ppFile = NULL;
return bTemp;
}
boolean AddFavoriteIndex(IShell* pIShell,IFileMgr **ppFile, AECHAR * szName, long nType, char * szFile)
{
IFile *f;
// 打开文件,并移至文件末尾准备追加文件
ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)ppFile);
if ((f = IFILEMGR_OpenFile (*ppFile, FAVORITE_FILE, _OFM_READ)) == NULL)
{
if (IFILEMGR_GetLastError (*ppFile) == EFILENOEXISTS)
{
f = IFILEMGR_OpenFile (*ppFile, FAVORITE_FILE, _OFM_CREATE);
}
}
else
{
IFILE_Release(f);
f = IFILEMGR_OpenFile (*ppFile, FAVORITE_FILE, _OFM_APPEND);
}
if (f)
{// 保存信息
long nLen;
nLen = sizeof(AECHAR) * (WSTRLEN(szName) + 1) + 4 + sizeof(char) * (STRLEN(szFile) + 1);
// chunk size
IFILE_Write (f, &nLen, 4);
// name
IFILE_Write (f, szName, sizeof(AECHAR) * (WSTRLEN(szName) + 1));
// type
IFILE_Write (f, &nType, 4);
// file name
IFILE_Write (f, szFile, sizeof(char) * (STRLEN(szFile) + 1));
IFILE_Release(f);
}
else
{
IFILEMGR_Release(*ppFile);
*ppFile = NULL;
return FALSE;
}
IFILEMGR_Release(*ppFile);
*ppFile = NULL;
return TRUE;
}
// 根据指定索引获取文件名称
boolean GetFavoriteByIndex(IShell* pIShell,IFileMgr **ppFile, long nIndex, char * szFile)
{
IFile *f;
boolean bResult = FALSE;
// 打开文件
ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)ppFile);
f = IFILEMGR_OpenFile (*ppFile, FAVORITE_FILE, _OFM_READ);
// 查找文件名称
if (f)
{
// 读取文件的所有信息
char * szBuffer;
long nLen, i = 1, nPos = 0;
FileInfo pInfo;
IFILE_GetInfo(f, &pInfo);
nLen = pInfo.dwSize;
szBuffer = (char*)MALLOC(nLen);
IFILE_Read(f, szBuffer, nLen);
IFILE_Release(f);
// 找到指定的索引位置
while (nPos < nLen)
{
AECHAR * szAechar;
char * szChar;
long nTemp;
// chunk size
MEMCPY(&nTemp, szBuffer + nPos, 4);
if (i == nIndex)
{
nPos += 4; // chunk size
szAechar = (AECHAR *)(szBuffer + nPos); // name
nPos += sizeof(AECHAR) * (WSTRLEN(szAechar) + 1);
nPos += 4; // type
// read file name
if (nPos < nLen)
{
szChar = szBuffer + nPos;
nTemp = STRLEN(szChar) + 1;
if (nTemp > 256) nTemp = 256;
MEMCPY(szFile, szChar, nTemp);
bResult = TRUE;
}
break;
}
else
{// skip this chunk
i++;
nPos += nTemp + 4;
// 删去以前的信息
if (nPos < nLen)
{
char * szTemp = NULL;
szTemp = (char*)MALLOC(nLen - nPos);
MEMCPY(szTemp, szBuffer + nPos, nLen - nPos);
nLen -= nPos;
nPos = 0;
FREEIF(szBuffer);
szBuffer = szTemp;
}
}
}
FREEIF(szBuffer);
}
IFILEMGR_Release(*ppFile);
*ppFile = NULL;
return bResult;
}
// 根据指定索引删除文件
boolean DeleteFavoriteByIndex(IShell* pIShell,IFileMgr **ppFile, long nIndex)
{
IFile *f;
boolean bResult = FALSE;
// 打开文件
ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)ppFile);
f = IFILEMGR_OpenFile (*ppFile, FAVORITE_FILE, _OFM_READ);
// 查找文件名称
if (f)
{
// 读取文件的所有信息
char * szBuffer;
long nLen, i = 1, nPos = 0, nChunkSize;
FileInfo pInfo;
IFILE_GetInfo(f, &pInfo);
nLen = pInfo.dwSize;
szBuffer = (char*)MALLOC(nLen);
IFILE_Read(f, szBuffer, nLen);
IFILE_Release(f);
// 找到指定的索引位置
while (nPos < nLen)
{
// chunk size
MEMCPY(&nChunkSize, szBuffer + nPos, 4);
if (i == nIndex)
{
break;
}
else
{// skip this chunk
i++;
nPos += nChunkSize + 4;
}
}
// 删除这个索引区域
if (nChunkSize + 4 == nLen)
{
IFILEMGR_Remove(*ppFile, FAVORITE_FILE);
}
else if ((nPos < nLen) && (nPos + nChunkSize + 4 <= nLen))
{
// 按位拷贝,把这个区域后面的内容拷到前面来
for (i = 0; i < nLen - (nPos + nChunkSize + 4); i++)
{
MEMCPY(szBuffer + nPos + i, szBuffer + nPos + nChunkSize + 4 + i, 1);
}
nLen -= nChunkSize + 4;
// 保存文件
IFILEMGR_Remove(*ppFile, FAVORITE_FILE);
f = IFILEMGR_OpenFile (*ppFile, FAVORITE_FILE, _OFM_CREATE);
if (f)
{
IFILE_Write (f, szBuffer, nLen);
IFILE_Release(f);
bResult = TRUE;
}
}
FREEIF(szBuffer);
}
IFILEMGR_Release(*ppFile);
*ppFile = NULL;
return bResult;
}
// 在指定的矩形范围显示文本
void ShowResString(IShell * pIShell, IStatic ** ppIStatic, AEERect * rect, AECHAR * szTitle, int16 nResId)
{
if (ppIStatic == NULL) return;
if (rect == NULL) return;
if (*ppIStatic == NULL)
{
if (pIShell == NULL) return;
ISHELL_CreateInstance(pIShell, AEECLSID_STATIC, (void * *)ppIStatic);
}
if (*ppIStatic) {
AECHAR * szBuf = NULL;
LoadTextMessage(pIShell, nResId, &szBuf, RES_FILE);
if (szBuf == NULL) return;
ISTATIC_SetText(*ppIStatic, szTitle, szBuf, AEE_FONT_BOLD, AEE_FONT_NORMAL);
ISTATIC_SetRect(*ppIStatic, rect);
ISTATIC_SetProperties(*ppIStatic, ST_NOSCROLL|ST_MIDDLETEXT);
ISTATIC_SetActive(*ppIStatic, TRUE);
ISTATIC_Redraw(*ppIStatic);
if (szBuf) FREEIF(szBuf);
}
}
int GetFreeMem(IShell* pIShell)
{
int freemem;
IHeap *ih;
AEEDeviceInfo di;
if(!pIShell) return -1;
if(SUCCESS != ISHELL_CreateInstance(pIShell,AEECLSID_HEAP,(void**)&ih)){
return -1;
}
ISHELL_GetDeviceInfo(pIShell,&di);
freemem = di.dwRAM - IHEAP_GetMemStats(ih);
IHEAP_Release(ih);
return freemem;
}
boolean CheckFileSpace(IShell* pIShell)
{
/*
uint32 freesize = 0;
IFileMgr *filemgr;
filemgr = NULL;
if(AEE_SUCCESS != ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)&filemgr)){
return FALSE;
}
if(filemgr == NULL){
return FALSE;
}
if(0 == IFILEMGR_GetFreeSpace(filemgr,&freesize)){
IFILEMGR_Release(filemgr);
return FALSE;
}
if(freesize < MIN_FILE_FREESPACE){
IFILEMGR_Release(filemgr);
return FALSE;
}
IFILEMGR_Release(filemgr);
return TRUE;
*/
uint32 freesize = GETFSFREE(NULL);
if(freesize < MIN_FILE_FREESPACE){
return FALSE;
}
return TRUE;
}
boolean MemCheckAvail(IShell* pIShell,int blocksize)
{
IHeap *ih;
boolean result;
if(SUCCESS != ISHELL_CreateInstance(pIShell,AEECLSID_HEAP,(void**)&ih)){
return FALSE;
}
result = IHEAP_CheckAvail(ih,blocksize);
IHEAP_Release(ih);
return result;
}
uint32 GetFileSpace(IShell* pIShell)
{
/*
uint32 freesize = 0;
IFileMgr *filemgr;
filemgr = NULL;
if(AEE_SUCCESS != ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR, (void **)&filemgr)){
return 0;
}
if(filemgr == NULL){
return 0;
}
if(0 == IFILEMGR_GetFreeSpace(filemgr,&freesize)){
IFILEMGR_Release(filemgr);
return 0;
}
IFILEMGR_Release(filemgr);
return freesize;
*/
uint32 freesize = GETFSFREE(NULL);
return freesize;
}
void DrawPicRect(IImage *img, int xoff, int yoff, int cx, int cy)
{
if (img)
{
long cxImg, cyImg;
AEEImageInfo info;
IIMAGE_GetInfo(img, &info);
cxImg = info.cx;
cyImg = info.cy;
IIMAGE_Draw(img, xoff + (int)((cx - cxImg) / 2), yoff + (int)((cy - cyImg) / 2));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -