📄 diary.c
字号:
/*==========================================================
FUNCTION :DiaryALL_BG_CallBack
DESCRIPTION:主窗体背景回调函数
INPUTS :主窗体设备环境句柄
OUTPUTS :
RETURN :
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
VOID DiaryALL_BG_CallBack(MDC* hDC)
{
MRect ClientRect;
UINT uWidth, uHeigh;
WindowGetClientArea((MWindow*)hDC, &ClientRect);
GraphGetIconSize(NULL, &uWidth, &uHeigh, MAKE_ID(IDB_BACKGROUND));
GraphDrawBitmap(hDC, ClientRect.x + (ClientRect.width - uWidth)/2 /*画窗口背景图*/
, ClientRect.y + (ClientRect.height - uHeigh)/2
, 0, 0, NULL, MAKE_ID(IDB_BACKGROUND));
/*写功能选择菜单*/
GraphDrawText(hDC, (ClientRect.x + ClientRect.width/2)
- 2*hDC->dcFontID
, ClientRect.y
+ (ClientRect.height)/2
, 0, 0, NULL, " 写日记 ");
GraphDrawLine(hDC, (ClientRect.x + ClientRect.width/2)
- 4*hDC->dcFontID
, ClientRect.y + hDC->dcFontID + 1
+ (ClientRect.height)/2
, (ClientRect.x + ClientRect.width/2)
+ 4*hDC->dcFontID
, ClientRect.y + hDC->dcFontID + 1
+ (ClientRect.height)/2);
GraphDrawText(hDC, (ClientRect.x + ClientRect.width/2)
- 2*hDC->dcFontID
, ClientRect.y + hDC->dcFontID + hDC->dcFontID/2
+ (ClientRect.height)/2
, 0, 0, NULL, "浏览日记");
GraphDrawLine(hDC, (ClientRect.x + ClientRect.width/2)
- 4*hDC->dcFontID
, ClientRect.y + hDC->dcFontID + hDC->dcFontID/2 + hDC->dcFontID + 1
+ (ClientRect.height)/2
, (ClientRect.x + ClientRect.width/2)
+ 4*hDC->dcFontID
, ClientRect.y + hDC->dcFontID + hDC->dcFontID/2 + hDC->dcFontID + 1
+ (ClientRect.height)/2);
GraphDrawText(hDC, (ClientRect.x + ClientRect.width/2)
- 2*hDC->dcFontID
, ClientRect.y + 3*hDC->dcFontID
+ (ClientRect.height)/2
, 0, 0, NULL, "心跳回忆");
GraphDrawLine(hDC, (ClientRect.x + ClientRect.width/2)
- 4*hDC->dcFontID
, ClientRect.y + 3*hDC->dcFontID + hDC->dcFontID + 1
+ (ClientRect.height)/2
, (ClientRect.x + ClientRect.width/2)
+ 4*hDC->dcFontID
, ClientRect.y + 3*hDC->dcFontID + hDC->dcFontID + 1
+ (ClientRect.height)/2);
DiaryInvertRect(hDC); /*显亮当前选择的功能*/
}
/*==========================================================
FUNCTION :DiaryInvertRect
DESCRIPTION:根据用户选择的功能(由g_PresentChoice记录)反显
其文字所对应的矩形区域
INPUTS :
handle:主窗体设备句柄。
g_PresentChoice:隐式输入。
OUTPUTS :
RETURN :
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
VOID DiaryInvertRect(MDC* hDC)
{
MRect rect;
WindowGetClientArea((MWindow*)hDC, &rect);
GraphInvertRect(hDC, (rect.x + rect.width/2)
- 2*hDC->dcFontID
+ ((g_PresentChoice == 1) ? hDC->dcFontID/2:0)
, rect.y
+ (rect.height)/2
+ (g_PresentChoice - 1)*(hDC->dcFontID + hDC->dcFontID/2)
, (rect.x + rect.width/2)
- 2*hDC->dcFontID
+ 4*hDC->dcFontID
- ((g_PresentChoice == 1) ? hDC->dcFontID/2:0)
, rect.y
+ (rect.height)/2
+ (g_PresentChoice - 1)*(hDC->dcFontID + hDC->dcFontID/2)
+ hDC->dcFontID);
}
/*==========================================================
FUNCTION :DiaryALL_EV_CallBack
DESCRIPTION:主窗体事件回调函数
INPUTS :
handle:主窗体视图句柄
pEvent:消息实例
OUTPUTS :
RETURN :处理结果
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
UINT32 DiaryALL_EV_CallBack(MView* handle, MEvent* pEvent)
{
switch (pEvent->dwMsgType)
{
case EV_KEY_DOWN:
{
switch (pEvent->xParam)
{
case MJ_VK_UP: /*上一个功能*/
{
DiaryInvertRect((MDC*)handle);
if (g_PresentChoice == 1)
{
g_PresentChoice = 3;
}
else
{
g_PresentChoice--;
}
DiaryInvertRect((MDC*)handle);
return 0;
}
case MJ_VK_DOWN: /*下一个功能*/
{
DiaryInvertRect((MDC*)handle);
if (g_PresentChoice == 3)
{
g_PresentChoice = 1;
}
else
{
g_PresentChoice++;
}
DiaryInvertRect((MDC*)handle);
return 0;
}
case MJ_VK_ENTER: /*进入所选择的功能*/
{
switch (g_PresentChoice)
{
case 1:
ApExit(AP_MODE_NEW);
return 0;
case 2:
ApExit(AP_MODE_VIEW);
return 0;
case 3:
ApExit(AP_MODE_CURVE);
return 0;
}
}
}
}
break;
}
return WindowHandleEvent((MWindow*)handle, pEvent);
}
/*==========================================================
FUNCTION :DiaryCreateWin_WR
DESCRIPTION:创建写日记、浏览日记窗口
INPUTS :
OUTPUTS :
RETURN :窗口句柄
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
MWindow* DiaryCreateWin_WR(VOID)
{
MWindow* hWnd; /*窗口句柄*/
MToolBar* pToolBar; /*窗口工具条*/
UINT8* pHelpID; /*窗口帮助资源指针*/
UINT8* pTitle; /*窗口标题*/
MFldEdit* hFldEdit; /*多域编辑器句柄*/
UINT16 wEditStyle; /*多域编辑器风格*/
MRect rect; /*窗口区域*/
UINT8* pBuf; /*多域编辑器编辑缓冲区*/
MEditParam* pParam; /*多域编辑器创建参数结构数组*/
UINT16 iFont; /*多域编辑器字体*/
pParam = (MEditParam*)pFieldEditParam;
GuiGetUserFullRect(&rect);
/*初始化窗体创建参数*/
switch (ApGetMode())
{
case AP_MODE_NEW: /*写日记*/
case AP_MODE_MODIFY: /*修改日记*/
{
pTitle = (UINT8*)IDS_DIARY_TITLE_NEW;
wEditStyle = EDS_MULTILINE|EDS_HORZCURSOR|EDS_LINETHREAD;
pHelpID = (UINT8*)IDR_HELP_WRITE;
pToolBar = NULL;
iFont = SYSFONT_GBK16;
}
break;
case AP_MODE_VIEW: /*浏览日记*/
{
if (NULL == g_IndexBuf)
{
pTitle = (UINT8*)IDS_DIARY_TITLE_VIEW;
pHelpID = (UINT8*)IDR_HELP_VIEW;
pToolBar = (MToolBar*)Diary_View_ToolBar;
}
else
{
pTitle = (UINT8*)IDS_DIARY_TITLE_INDEX_VIEW;
pHelpID = (UINT8*)IDR_HELP_INDEXVIEW;
pToolBar = (MToolBar*)Diary_Index_ToolBar;
}
wEditStyle = EDS_MULTILINE|EDS_HORZCURSOR|EDS_READONLY;
iFont = g_DiaryViewFont;
}
break;
}
hWnd = WindowCreate(NULL, NULL, DIARY_WND_NEW_ID
, &rect, WS_APWINDOW|WS_TITLE
, pHelpID, pTitle, NULL, pToolBar);
if (NULL == hWnd)
{
SysWatchHotReset(SYS_INIT_RESET);
}
/*申请多域编辑器缓冲区*/
pBuf = MemAlloc(AP_MAX_EDITLEN);
if (NULL == pBuf)
{
SysWatchHotReset(SYS_INIT_RESET);
}
memset(pBuf, 0, AP_MAX_EDITLEN);
/*初始化编辑器缓冲区*/
switch (ApGetMode())
{
case AP_MODE_NEW: /*写日记模式*/
EditInitBuf(pBuf);
break;
case AP_MODE_VIEW: /*浏览日记模式*/
case AP_MODE_MODIFY: /*修改日记模式*/
if (!EditSetBuf(pBuf))
{
MemFree(pBuf);
SysWatchHotReset(SYS_INIT_RESET);
}
break;
}
/*在创建的窗体中创建编辑器*/
memset(&rect, 0, sizeof(MRect));
WindowGetClientArea(hWnd, &rect);
rect.height--;
hFldEdit = FldEditCreate((MView*)hWnd, NULL, DIARY_EDIT_NEW_ID
, &rect, SYSFONT_GBK16, wEditStyle, pBuf
, AP_MAX_EDITLEN, ROWSPACE, INDENT, FIELD_NUM, pParam);
if (NULL == hFldEdit)
{
MemFree(pBuf);
SysWatchHotReset(SYS_INIT_RESET);
}
/*指定消息处理函数*/
switch(ApGetMode())
{
case AP_MODE_NEW:
case AP_MODE_MODIFY:
((MView*)hWnd) -> fpDrawBackGround = DiaryNEW_BG_CallBack;
((MView*)hWnd) -> fpHandleEvent = DiaryNEW_EV_CallBack;
break;
case AP_MODE_VIEW:
((MView*)hWnd) -> fpDrawBackGround = DiaryVIEW_BG_CallBack;
((MView*)hWnd) -> fpHandleEvent = DiaryVIEW_EV_CallBack;
break;
}
return hWnd;
}
/*==========================================================
FUNCTION :EditInitBuf
DESCRIPTION:初始化写日记窗体的编辑器的缓冲区(写新日记模式下)
INPUTS :
pBuf:指向编辑器的编辑缓冲区。
OUTPUTS :
RETURN :
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
VOID EditInitBuf(UINT8* pBuf)
{
struct EditTail
{
UINT16 Serial_Num;
UINT16 Class_Num;
UINT32 Class_Addr;
UINT32 Default_Class;
}EditTailTmp;
DateType date;
MEdExtraCharHead EditHeadTmp;
UINT8* pCurBuf = pBuf;
EditHeadTmp.byFlag = CHAR_EXTRA;
EditHeadTmp.byReserve = NULL;
EditHeadTmp.wMemLen = sizeof(MEdExtraCharHead)+2*(sizeof(UINT16)+sizeof(UINT32));
EditHeadTmp.byWidth = 7;
EditHeadTmp.byHeight = 1;
EditHeadTmp.wCharType = EDITALLOW_CLASS;
EditHeadTmp.fpExtraFunc = ListExtraCharHandle;
/*初始化日期域*/
TimGetDate(&date);
sprintf(pCurBuf, "%d-%02d-%02d", date.dateYear /*将当前日期的格式化字符串写入缓冲区*/
, date.dateMonth, date.dateDay); /*作为默认日期*/
pCurBuf += 10;
/*插入与分隔符*/
*pCurBuf = 0x2;
pCurBuf++;
/*初始化心情域*/
{
EditTailTmp.Serial_Num = 2; /*该域默认类别的序号*/
EditTailTmp.Class_Num = SPIRIT_NUM; /*该域最多的类别数*/
EditTailTmp.Class_Addr = (UINT32)&DiaryClass_Spirit[0]; /*该域的类别存储地址*/
EditTailTmp.Default_Class = (UINT32)DiaryClass_Spirit[2]; /*该域的默认类别名*/
memcpy(pCurBuf, &EditHeadTmp, sizeof(MEdExtraCharHead));
pCurBuf += sizeof(MEdExtraCharHead);
memcpy(pCurBuf, &EditTailTmp, sizeof(struct EditTail));
pCurBuf += sizeof(struct EditTail);
}
/*插入与分隔符*/
*pCurBuf = 0x2;
pCurBuf++;
/*初始化天气域*/
{
EditTailTmp.Serial_Num = 2;
EditTailTmp.Class_Num = WEATHER_NUM;
EditTailTmp.Class_Addr = (UINT32)&DiaryClass_Weather[0];
EditTailTmp.Default_Class = (UINT32)DiaryClass_Weather[2];
memcpy(pCurBuf, &EditHeadTmp, sizeof(MEdExtraCharHead));
pCurBuf += sizeof(MEdExtraCharHead);
memcpy(pCurBuf, &EditTailTmp, sizeof(struct EditTail));
pCurBuf += sizeof(struct EditTail);
}
/*初始化内容域*/
*pCurBuf = 0x2;
pCurBuf++;
}
/*==========================================================
FUNCTION :EditSetBuf
DESCRIPTION:初始化浏览日记记窗体的编辑器的缓冲区
或者初始化写日记窗体编辑器的缓冲区(修改日记模式)
INPUTS :
pBuf:指向编辑器的编辑缓冲区。
g_PreViewRecID:隐式输入。
OUTPUTS :
RETURN :设置成功标志
____________________________________________________________
DATE AUTHOR VERSION DESCRIBE
------------------------------------------------------------
2004-08-XX 黄 猛 Ver1.00 Create
==========================================================*/
BOOL EditSetBuf(UINT8* pBuf)
{
INT nCurFld; /*域处理循环变量*/
INT nFldCnt; /*通讯录域的总数*/
StructDbData sDbData; /*数据库记录数据结构,暂存欲浏览、修改的记录的数据*/
UINT8* pRecBufr; /*记录数结构的数据缓冲区*/
UINT8* pSrc;
UINT8* pDst = pBuf;
// MEditParam* pCurArgs = pEditArgs;
/*申请记录缓冲区*/
pRecBufr = MemAlloc(AP_MAX_EDITLEN);
if (NULL == pRecBufr)
{
MsgBoxRun(NULL, NULL, (UINT8*)IDS_DIARY_MEMORY_FULL,
MAKE_ID(IDS_DIARY_TITLE_VIEW),MT_OK|MT_ICONINFO);
return FALSE;
}
/*将选定记录数据读到缓冲区内*/
sDbData.pBuf = pRecBufr;
DbRecordRead(g_DbHandle,&sDbData, g_PreViewRecID, -1);
/*得到域的总数*/
nFldCnt = sizeof(pFieldEditParam) / sizeof(MEditParam);
pSrc = pRecBufr;
/*将记录中的数据读入编辑器缓冲区各个编辑域*/
for (nCurFld = 0; nCurFld < nFldCnt; nCurFld++)
{
/*填充扩展域*/
if (1 == nCurFld || 2 == nCurFld)
{
/*填充心情域*/
if (1 == nCurFld)
{
RenewEditExChar(pDst,pSrc,(UINT32)&DiaryClass_Spirit[0],
SPIRIT_NUM, 7);
}
/*填充天气域*/
else
{
RenewEditExChar(pDst,pSrc,(UINT32)&DiaryClass_Weather[0],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -