📄 diary.c
字号:
return QUIT_ABORT;
}
}
}
else
{
/*日记被修改为一篇新日记(日期被改变)*/
dwRet = MsgBoxRun((MWinView*)handle, NULL
, MAKE_ID(IDS_DIARY_MODIFY_SAVE)
, MAKE_ID(IDS_DIARY_TITLE_NEW)
, MT_YESNO|MT_ICONINFO);
if (QUIT_YES == dwRet || QUIT_POWEROFF == dwRet)
{
/*同意保存为新日记*/
ApSetMode(AP_MODE_NEW);
status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
ApSetMode(AP_MODE_MODIFY);
if (QUIT_POWEROFF == dwRet)
{
return QUIT_DESKTOP;
}
}
else
{
/*不同意*/
return QUIT_ABORT;
}
}
}
break;
}
/*未存储成功*/
if (status < 0)
{
ApErrorMessage(status);
return QUIT_DESKTOP;
}
if (QUIT_HOTKEY == pEvent->xParam)
{
return(QUIT_DESKTOP);
}
else
{
ApSetMode(AP_MODE_ALL);
return AP_MODE_ALL;
}
}
}
else if (QUIT_CANCEL == wMsgRet)
{
/*用户取消存储,返回程序继续运行*/
return QUIT_ABORT;
}
else if (QUIT_NO == wMsgRet)
{
/*用户不愿存储*/
}
}
/*用户未作修改或不愿存储*/
if (0 == dbInfo.uRecordNum)
{
/*在日记本中没有日记时再次确认是否要退出*/
dwRet = MsgBoxRun((MWinView*)handle, NULL
, MAKE_ID(IDS_DIARY_NEW_ASKSAVE)
, MAKE_ID(IDS_DIARY_TITLE_NEW)
, MT_OKCANCEL|MT_ICONINFO);
if (QUIT_OK == dwRet)
{
return QUIT_DESKTOP;
}
else
{
return QUIT_ABORT;
}
}
ApSetMode(AP_MODE_ALL);
return AP_MODE_ALL;
}
}
break;
case EV_COMMAND:
switch(pEvent->xParam)
{
case CM_DESTROY:
{
hEdit = (MEdit*)GetHandleFromID((MView*)hWnd, DIARY_EDIT_NEW_ID);
pEdtBufr = FldEditGetFldPtr((MFldEdit*)hEdit, 0);
MemFree(pEdtBufr);
}
break;
case CM_EDITOR_SETINPUT: /*设置输入*/
{
UINT uImeID = ImeMatchChar((UINT16)pEvent->yParam);
if (uImeID == ImeGetCurrent((MWinView*)hWnd))
{
return 0; /*如果和当前输入法相同,不操作*/
}
ImeSetCurrent((MWinView*)hWnd, uImeID); /*设置当前输入法*/
}
break;
case CM_EDITOR_HAVEMAXLEN: /*达到最大编辑长度*/
case CM_EDITOR_BUFFERFULL: /*编辑缓冲区被写满*/
MsgBoxRun((MWinView*)hWnd, NULL, MAKE_ID(IDS_DIARY_EDITFULL)
, MAKE_ID(IDS_DIARY_TITLE_NEW), MT_ICONINFO);
return 0;
case CM_IME_SELECTED: /*输入法改变,变更编辑器大小*/
{
MRect rc;
// INT nWidth, nHeight;
hEdit = (MEdit*)GetHandleFromID((MView*)hWnd, DIARY_EDIT_NEW_ID);
WindowGetClientArea(hWnd, &rc);
rc.height -= pEvent->yParam;
/* GraphGetIconSize(NULL, &nWidth, &nHeight, (UINT8*)IDB_EDIT_LEFT_BAR);
rc.x += nWidth;
rc.width -= nWidth;
GraphGetIconSize(NULL, &nWidth, &nHeight, (UINT8*)IDB_EDIT_RIGHT_BAR);
rc.width -= nWidth;
*/
EditSetRect(hEdit, &rc);
}
break;
}
break;
}
return WindowHandleEvent((MWindow*)handle, pEvent);
}
/*==========================================================
FUNCTION :CheckDateField
DESCRIPTION:检查多域编辑器的日期域内容是否合法
INPUTS :
hEdit:编辑器句柄
OUTPUTS :
RETURN :合法标志
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
BOOL CheckDateField(MFldEdit* hEdit)
{
UINT8* pDateStr;
UINT uFldLen;
/*确定是否按格式输入固定长度的字符串*/
uFldLen = FldEditGetFldLen(hEdit, 0);
if (10 != uFldLen)
{
return FALSE;
}
/*确定输入的字符串格式是否合法,日期是否在规定年限内*/
pDateStr = FldEditGetFldPtr(hEdit, KEYFIELD);
if (isdigit(pDateStr[0]) && isdigit(pDateStr[1])
&& isdigit(pDateStr[2]) && isdigit(pDateStr[3])
&& isdigit(pDateStr[5]) && isdigit(pDateStr[6])
&& isdigit(pDateStr[8]) && isdigit(pDateStr[9])
&& *(pDateStr+4) == '-' && *(pDateStr+7) == '-')
{
DateType date;
date.dateYear = (UINT16)((pDateStr[0] - 48)*1000
+ (pDateStr[1] - 48)*100
+ (pDateStr[2] - 48)*10
+ (pDateStr[3] - 48));
date.dateMonth = ((pDateStr[5] - 48)*10 + (pDateStr[6] - 48));
date.dateDay = ((pDateStr[8] - 48)*10 + (pDateStr[9] - 48));
if (TimCheckDateValid(&date))
{
return TRUE;
}
}
return FALSE;
}
/*==========================================================
FUNCTION :DiaryPringMessage
DESCRIPTION:提示用户在多域编辑器输入数据,并将光标定位于此域
INPUTS :
hWnd:编辑器所在窗体的句柄
hEditor:编辑器句柄
pEditPaam:编辑器的创建参数
wIndex:待输入域编号
OUTPUTS :
RETURN :
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
VOID DiaryPringMessage(MWindow* hWnd, UINT8* hEditor, MEditParam* pEditParam, UINT16 wIndex)
{
BOOL bRet;
UINT8 szMsg[20], szCaption[10];
UINT16 wCapLen;
UINT8* pszCaption;
bRet = FALSE;
memset(szCaption, 0, 10);
memset(szMsg, 0, 20);
pszCaption = pEditParam[wIndex].pCaption;
if (IS_ID(pszCaption))
{
ResGetString(NULL, (UINT)pszCaption, szCaption, 9);
}
else
{
wCapLen = (UINT16)strlen(pEditParam[wIndex].pCaption);
memcpy(szCaption, pEditParam[wIndex].pCaption, wCapLen);
}
wCapLen = sprintf(szMsg, "请输入%s", szCaption);
if (szMsg[wCapLen - 1] == ':')
{
wCapLen--;
}
else
{
if (strcmp((INT8*)&szMsg[wCapLen - 2], ":") == 0)
wCapLen -= 2;
}
szMsg[wCapLen++] = '!';
szMsg[wCapLen] = 0;
MsgBoxRun(NULL, 0, szMsg, MAKE_ID(IDS_DIARY_TITLE_NEW),
MT_ICONINFO);
FldEditSetCurrentFld((MFldEdit*)hEditor, (UINT)wIndex);
}
/*==========================================================
FUNCTION :DiaryVIEW_EV_CallBack
DESCRIPTION:浏览日记窗体事件回调函数
INPUTS :
handle:窗体句柄
pEvent:事件实例
g_PreRecordID:当前记录ID,隐式输入。
OUTPUTS :
RETURN :处理结果
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
UINT32 DiaryVIEW_EV_CallBack(MView* handle, MEvent* pEvent)
{
UINT uApSel;
MEdit* hEdit;
UINT8* pEdtBufr;
StructDbInfo dbInf;
switch(pEvent->dwMsgType)
{
case EV_COMMAND:
switch(pEvent->xParam)
{
case DIARY_CMD_PREVIOUS: /*上一篇,功能等同于按向左方向键*/
MsgSend2((HGUI)handle, EV_KEY_DOWN, MJ_VK_LEFT, NULL, NULL);
return 0;
case DIARY_CMD_NEXT: /*下一篇,功能等同于按向右方向键*/
MsgSend2((HGUI)handle, EV_KEY_DOWN, MJ_VK_RIGHT, NULL, NULL);
return 0;
case DIARY_CMD_FIND: /*查找*/
case DIARY_CMD_MODIFY: /*修改*/
case DIARY_CMD_DELETE: /*删除*/
case DIARY_CMD_WRITE: /*新增*/
if (ViewCmdProcess((MWindow*)handle, pEvent) && (DIARY_CMD_DELETE == pEvent->xParam))
{
/*在删除完最后一篇日记后退出日记本*/
DbGetDbInfo(g_DbHandle, &dbInf);
if (0 != dbInf.uRecordNum)
{
ApExit(AP_MODE_VIEW);
}
}
return 0;
case CM_DESTROY:
hEdit = (MEdit*)GetHandleFromID((MView*)handle, DIARY_EDIT_NEW_ID);
pEdtBufr = FldEditGetFldPtr((MFldEdit*)hEdit, 0);
MemFree(pEdtBufr);
break;
}
break;
case EV_KEY_DOWN:
switch (pEvent->xParam)
{
case MJ_VK_RIGHT: /*下一篇*/
if (NULL != g_IndexBuf)
{
UINT32 i;
if (1 == *g_IndexBuf)
{
MsgBoxRun((MWinView*)handle, NULL
, "总共就找到一篇日记耶!"
, MAKE_ID(IDS_DIARY_TITLE_INDEX_VIEW)
, MT_ICONINFO );
return 0;
}
for (i=1; i<=*g_IndexBuf; i++)
{
if ( g_PreViewRecID == DbRecordHandleToID(g_DbHandle, (INT)(*(g_IndexBuf + i))) )
{
if (i == 1)
{
g_PreViewRecID = DbRecordHandleToID(g_DbHandle, (INT)(*(g_IndexBuf + *g_IndexBuf)));
}
else
{
g_PreViewRecID = DbRecordHandleToID(g_DbHandle, (INT)(*(g_IndexBuf + i - 1)));
}
ApExit(AP_MODE_VIEW);
return 0;
}
}
}
uApSel = g_PreViewRecID;
if (0 == uApSel)
{
MsgBoxRun((MWinView*)handle, NULL
, MAKE_ID(IDS_DIARY_BTN_TIP), MAKE_ID(IDS_DIARY_TITLE_VIEW)
, MT_ICONINFO );
}
else
{
g_PreViewRecID--;
ApExit(AP_MODE_VIEW);
}
return 0;
case MJ_VK_LEFT: /*上一篇*/
if (NULL != g_IndexBuf)
{
UINT32 i;
if (1 == *g_IndexBuf)
{
MsgBoxRun((MWinView*)handle, NULL
, "总共就找到一篇日记耶!"
, MAKE_ID(IDS_DIARY_TITLE_INDEX_VIEW)
, MT_ICONINFO );
return 0;
}
for (i=1; i<=*g_IndexBuf; i++)
{
if ( g_PreViewRecID == DbRecordHandleToID(g_DbHandle, (INT)(*(g_IndexBuf + i))) )
{
if (i == *g_IndexBuf)
{
g_PreViewRecID = DbRecordHandleToID(g_DbHandle, (INT)(*(g_IndexBuf + 1)));
}
else
{
g_PreViewRecID = DbRecordHandleToID(g_DbHandle, (INT)(*(g_IndexBuf + i + 1)));
}
ApExit(AP_MODE_VIEW);
return 0;
}
}
}
DbGetDbInfo(g_DbHandle, &dbInf);
if (g_PreViewRecID+1 == dbInf.uRecordNum)
{
MsgBoxRun((MWinView*)handle, 0, MAKE_ID(IDS_DIARY_TOP_TIP)
, MAKE_ID(IDS_DIARY_TITLE_VIEW), MT_ICONINFO);
}
else
{
g_PreViewRecID++;
ApExit(AP_MODE_VIEW);
}
return 0;
case MJ_VK_DELETE: /*删除*/
MsgSend2((HGUI)handle, EV_COMMAND, DIARY_CMD_DELETE, 0, NULL);
return 0;
case MJ_VK_ESCAPE: /*退出*/
if (g_IndexBuf == NULL)
{
ApSetMode(AP_MODE_ALL);
ApExit(AP_MODE_ALL);
}
else
{
ApSetMode(AP_MODE_INDEX);
ApExit(AP_MODE_INDEX);
}
return 0;
}
break;
}
return WindowHandleEvent((MWindow*)handle, pEvent);
}
/*==========================================================
FUNCTION :ViewCmdProcess
DESCRIPTION:处理浏览日记窗体的部分事件,由浏览日记窗体的事件
回调函数调用
INPUTS :
hWnd:窗体句柄
pEvent:事件实例
OUTPUTS :
RETURN :操作成功标志
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
BOOL ViewCmdProcess(MWindow* hWnd, MEvent* pEvent)
{
switch(pEvent->dwMsgType)
{
/* case EV_KEY_DOWN:
if (PJ_VK_FONT == pEvent->xParam)
{
if (SYSFONT_GBK12 == g_DiaryViewFont)
{
g_DiaryViewFont = SYSFONT_GBK16;
}
else
{
g_DiaryViewFont = SYSFONT_GBK12;
}
ApExit(AP_MODE_VIEW);
}
return TRUE;
*/
case EV_COMMAND:
switch(pEvent->xParam)
{
case DIARY_CMD_WRITE: /*写日记*/
{
StructDbInfo sdi;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -