⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diary.c

📁 名人E+E118的应用程序源码
💻 C
📖 第 1 页 / 共 5 页
字号:
												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 + -