📄 diary.c
字号:
WEATHER_NUM, 7);
}
pSrc += sDbData.uFieldLen[nCurFld];
pDst += sizeof(MEdExtraCharHead) + 2*(sizeof(UINT16) + sizeof(UINT32));
*pDst = FIELD_SEPARATOR;
pDst++;
}
/*填充普通域*/
else
{
memmove(pDst, pSrc, sDbData.uFieldLen[nCurFld]);
pDst += sDbData.uFieldLen[nCurFld];
pSrc += sDbData.uFieldLen[nCurFld];
}
}
MemFree(pRecBufr);
return TRUE;
}
/*==========================================================
FUNCTION :RenewEditExChar
DESCRIPTION:将数据库记录中的扩展字符串数据恢复到编辑器的缓冲
区
INPUTS :
editbuf:编辑器缓冲区指针
databuf:扩展字符串数据指针
ItemAddr:扩展字符串的类别数组指针
ItemNum:扩展字符串的类别数
ItemWidth:扩展字符串的宽度
OUTPUTS :
RETURN :写入编辑器缓冲区的字节数
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
UINT16 RenewEditExChar(UINT8 *editbuf, UINT8 *databuf, UINT32 ItemAddr, UINT16 ItemNum, UINT8 ItemWidth)
{
MEdExtraCharHead TypeExtraStr;
UINT16 i,ItemLen;
UINT32 ItemStrAddr;
UINT8 *tmpaddr,findflag;
UINT8 tmpstr[20];
UINT32 tmpdata;
memmove(tmpstr,databuf,19);
tmpaddr = editbuf;
TypeExtraStr.byFlag = CHAR_EXTRA;
TypeExtraStr.wMemLen = sizeof(MEdExtraCharHead) + 12;
TypeExtraStr.byWidth = ItemWidth;
TypeExtraStr.byHeight = 1;
TypeExtraStr.wCharType = EDITALLOW_CLASS;
TypeExtraStr.fpExtraFunc = ListExtraCharHandle;
ItemStrAddr = ItemAddr;
findflag = 0;
for (i = 0; i < ItemNum; i++)
{
tmpdata = *(UINT32 *)ItemStrAddr;
ItemLen = (UINT16)strlen((UINT8 *)tmpdata);
if (memcmp((UINT8 *)tmpdata,tmpstr,ItemLen) == 0)
{
findflag = 1;
TypeExtraStr.byWidth = ItemLen + 3;
break;
}
ItemStrAddr += 4;
}
memmove(tmpaddr,(UINT8 *)&TypeExtraStr,sizeof(MEdExtraCharHead));
tmpaddr += sizeof(MEdExtraCharHead);
if (findflag)
{
memcpy(tmpaddr, &i, sizeof(UINT16));
}
else
{
i = 0;
memcpy(tmpaddr, &i, sizeof(UINT16));
}
tmpaddr += 2;
memcpy(tmpaddr, &ItemNum, sizeof(UINT16));
tmpaddr += 2;
memcpy(tmpaddr, &ItemAddr, sizeof(UINT32));
tmpaddr += 4;
if (findflag)
{
memcpy(tmpaddr, &tmpdata, sizeof(UINT32));
}
else
{
memcpy(tmpaddr, (UINT8*)ItemAddr, sizeof(UINT32));
}
return (sizeof(MEdExtraCharHead)+12);
}
/*==========================================================
FUNCTION :DiaryNEW_BG_CallBack
DESCRIPTION:写日记窗体的背景回调函数
INPUTS :
hDC:窗口句柄
OUTPUTS :
RETURN :
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
VOID DiaryNEW_BG_CallBack(MDC* hDC)
{
MRect rc;
MDC dc;
MInputME mime = {0};
WindowGetClientArea((MWindow*)hDC, &rc);
GraphInitialDC(&dc);
dc.dcX = rc.x;
dc.dcY = rc.y;
dc.dcWidth = rc.width;
dc.dcHeight = rc.height;
/*设置输入法*/
mime.uType = ImeGetCurrent((MWinView*)hDC);
ImeGetInfo(&mime);
}
/*==========================================================
FUNCTION :DiaryNEW_BG_CallBack
DESCRIPTION:浏览日记窗体的背景回调函数
INPUTS :
hDC:窗口句柄
OUTPUTS :
RETURN :
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
VOID DiaryVIEW_BG_CallBack(MDC* hDC)
{
MRect rc;
MDC dc;
MInputME mime = {0};
WindowGetClientArea((MWindow*)hDC, &rc);
GraphInitialDC(&dc);
dc.dcX = rc.x;
dc.dcY = rc.y;
dc.dcWidth = rc.width;
dc.dcHeight = rc.height;
/*设置输入法*/
mime.uType = ImeGetCurrent((MWinView*)hDC);
ImeGetInfo(&mime);
}
/*==========================================================
FUNCTION :DiaryNEW_BG_CallBack
DESCRIPTION:写日记窗体的事件回调函数
INPUTS :
hDC:窗口句柄
g_DbHandle:数据库句柄,隐式输入。
OUTPUTS :
RETURN :处理结果
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
UINT32 DiaryNEW_EV_CallBack(MView* handle, MEvent* pEvent)
{
MWindow* hWnd;
MEdit* hEdit;
UINT8* pEdtBufr;
UINT32 dwRet;
BOOL bChged; /*编辑器改变标志*/
STATUS status; /*数据库操作返回值*/
hWnd = (MWindow*)handle;
switch(pEvent->dwMsgType)
{
case EV_QUIT:
{
StructDbInfo dbInfo;
UINT8 pSearchBuf[11]; /*要查找的字符串(日期)*/
UINT16 wPreRecIdTmp = g_PreViewRecID; /*暂存当前记录ID*/
status = -1;
hEdit = (MEdit*)GetHandleFromID((MView*)hWnd, DIARY_EDIT_NEW_ID);
bChged = EditIsModified(hEdit);
pEdtBufr = FldEditGetFldPtr((MFldEdit*)hEdit, KEYFIELD);
memset(pSearchBuf, 0, 11);
memcpy(pSearchBuf, pEdtBufr, 10);
DbGetDbInfo(g_DbHandle, &dbInfo);
/*检查日记本是否已写满*/
if (AP_MODE_NEW == ApGetMode() && DB_MAX_RECORDNUM <= dbInfo.uRecordNum)
{
MsgBoxRun((MWinView*)handle, NULL, MAKE_ID(IDS_DIARY_DBFULL)
, MAKE_ID(IDS_DIARY_TITLE_NEW), MT_OK|MT_ICONINFO);
ApExit(AP_MODE_ALL);
return QUIT_NORMAL;
}
/*消息处理*/
switch(pEvent->xParam)
{
/*关机退出消息*/
case QUIT_POWEROFF:
if (bChged && CheckDateField((MFldEdit*)hEdit))
{
/*数据被修改并且日期域的数据格式和日期范围合法*/
switch (ApGetMode())
{
case AP_MODE_NEW:
if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
{
/*该片日记已存在,直接覆盖*/
ApSetMode(AP_MODE_MODIFY);
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
ApSetMode(AP_MODE_NEW);
}
else
{
/*该片日记不存在,直接存储*/
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
break;
case AP_MODE_MODIFY:
{
if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
{
/*该片日记已存在*/
if (g_PreViewRecID == wPreRecIdTmp)
{
/*日期未被修改,直接覆盖,保存修改*/
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
else
{
/*被修改日记的已被修改为另外一篇已存在的日记,直接覆盖*/
dwRet = MT_OK; //MsgBoxRun();
if (MT_OK == dwRet)
{
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
else
{
}
g_PreViewRecID = wPreRecIdTmp; /*回复原“当前记录ID”*/
}
}
else
{
/*被修改的日记被修改为另外一篇日记,直接保存*/
dwRet = MT_OK; //MsgBoxRun();
if (MT_OK == dwRet)
{
ApSetMode(AP_MODE_NEW);
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
ApSetMode(AP_MODE_MODIFY);
}
else
{
}
}
}
}
}
return QUIT_DESKTOP;
/*正常退出*/
case QUIT_HOTKEY:
case QUIT_NORMAL:
if (bChged)
{
/*用户有过修改操作*/
UINT16 wMsgRet;
UINT8* pAskStr = (UINT8*)IDS_DIARY_SAVE_NEW;
if (AP_MODE_MODIFY == ApGetMode())
{
pAskStr = (UINT8*)IDS_DIARY_SAVE_MODIFY;
}
wMsgRet = MsgBoxRun((MWinView*)hWnd, DIARY_MSGBOX_SAVE /*询问是否保存*/
, pAskStr
, MAKE_ID(IDS_DIARY_TITLE_NEW)
, MT_YESNOCANCEL|MT_ICONQUESTION );
if (QUIT_POWEROFF == wMsgRet)
{
/*用户直接关机,得到关机消息,处理同前面关机处理*/
if (CheckDateField((MFldEdit*)hEdit))
{
switch (ApGetMode())
{
case AP_MODE_NEW:
if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
{
ApSetMode(AP_MODE_MODIFY);
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
ApSetMode(AP_MODE_NEW);
}
else
{
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
break;
case AP_MODE_MODIFY:
{
if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
{
if (g_PreViewRecID == wPreRecIdTmp)
{
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
else
{
dwRet = MT_OK; //MsgBoxRun();
if (MT_OK == dwRet)
{
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
else
{
}
g_PreViewRecID = wPreRecIdTmp;
}
}
else
{
dwRet = MT_OK; //MsgBoxRun();
if (MT_OK == dwRet)
{
ApSetMode(AP_MODE_NEW);
ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
ApSetMode(AP_MODE_MODIFY);
}
else
{
}
}
}
}
}
return QUIT_DESKTOP;
}
else if (QUIT_YES == wMsgRet)
{
/*用户同意存储,检查日期域*/
if (!CheckDateField((MFldEdit*)hEdit))
{
/*未输入日期或者日期格式不对*/
MsgBoxRun((MWinView*)handle, NULL, MAKE_ID(IDS_DIARY_DATE_FORMAT)
, MAKE_ID(IDS_DIARY_TITLE_NEW)
, MT_OK|MT_ICONINFO);
FldEditSetCurrentFld((MFldEdit*)hEdit, KEYFIELD);
return QUIT_ABORT;
}
else
{
/*日期域正常,正常存储*/
switch (ApGetMode())
{
case AP_MODE_NEW:
if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
{
/*日记已存在,询问是否覆盖*/
dwRet = MsgBoxRun((MWinView*)handle
, NULL,MAKE_ID(IDS_DIARY_IS_EXIST)
,MAKE_ID(IDS_DIARY_TITLE_NEW)
,MT_YESNO|MT_ICONINFO);
if (QUIT_YES == dwRet || QUIT_POWEROFF == dwRet)
{
/*同意覆盖*/
ApSetMode(AP_MODE_MODIFY);
status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
ApSetMode(AP_MODE_NEW);
g_PreViewRecID = wPreRecIdTmp; /*恢复当前记录ID*/
if (QUIT_POWEROFF == dwRet)
{
return QUIT_DESKTOP;
}
}
else
{
/*取消覆盖,返回程序继续执行*/
g_PreViewRecID = wPreRecIdTmp;
return QUIT_ABORT;
}
}
else
{
/*新日记直接存储*/
status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
break;
case AP_MODE_MODIFY:
{
if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
{
/*被修改日记被修改为另一篇日记*/
if (g_PreViewRecID == wPreRecIdTmp)
{
/*日期未被修改,直接保存所作的修改*/
status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
}
else
{
/*被修改成另一篇已存在的日记,询问覆盖*/
dwRet = MsgBoxRun((MWinView*)handle, NULL
,MAKE_ID(IDS_DIARY_MODIFY_EXIST)
,MAKE_ID(IDS_DIARY_TITLE_NEW)
, MT_YESNO|MT_ICONINFO);
if (QUIT_YES == dwRet || QUIT_POWEROFF == dwRet)
{
/*覆盖*/
status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
g_PreViewRecID = wPreRecIdTmp; /*恢复当前记录ID*/
if (QUIT_POWEROFF == dwRet)
{
return QUIT_DESKTOP;
}
}
else
{
/*取消覆盖*/
g_PreViewRecID = wPreRecIdTmp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -